软件工程第六版 软件工程第六版答案
摘要:软件工程的六条基本原理是什么? 软件工程(SoftWare Engineering)的框架可概括为:目标、过程和原则。 (1)软件工程目标:生产具有正确性、可用性以及开销合宜的产品。正确性指软件产品达...
发布日期:2020-11-21软件工程的六条基本原理是什么?
软件工程(SoftWare Engineering)的框架可概括为:目标、过程和原则。
(1)软件工程目标:生产具有正确性、可用性以及开销合宜的产品。
正确性指软件产品达到预期功能的程度。
可用性指软件基本结构、实现及文档为用户可用的程度。
开销合宜是指软件开发、运行的整个开销满足用户要求的程度。
这些目标的实现不论在理论上还是在实践中均存在很多待解决的问题,它们形成了对过程、过程模型及工程方法选取的约束。
(2)软件工程过程:生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。
软件工程过程主要包括开发过程、运作过程、维护过程。
它们覆盖了需求、设计、实现、确认以及维护等活动。
需求活动包括问题分析和需求分析。
问题分析获取需求定义,又称软件需求规约。
需求分析生成功能规约。
设计活动一般包括概要设计和详细设计。
概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。
详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。
实现活动把设计结果转换为可执行的程序代码。
确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。
维护活动包括使用过程中的扩充、修改与完善。
伴随以上过程,还有管理过程、支持过程、培训过程等。
(3)软件工程的原则是指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原则。
软件工程一般要学什么
大一学c语言,c+++,java ,还有数据结构 数字逻辑,汇编语言 第一学期:高等数学,计算机基础 第二学期:高等数学,C语言程序设计,逻辑电路与逻辑设计,线性代数 第三学期:离散数学,概率与数理统计 第四学期:计算机组成原理,数据结构,软件工程 第五学期:计算方法,操作系统,汇编语言 人工智能/JAVA语言 第六学期:算法分析与设计,数据库原理,编译原理 计算机网络/代数结构与组合数学 实时系统技术/Unix系统/软件构件技术/软件测试与维护 第七学期:软件项目管理,面向对象系统分析与统计 计算机图形学/信息检索与利用 电子商务/数据仓库与数据挖掘/软件过程能力评估/软件质量控制...
软件工程是学什么的啊??
软件工程专业本科生培养方案 一.指导思想: 软件产业作为信息产业的核心是国民经济信息化的基础,它已经涉足工业、农业、商业、金融、科教卫生、国防和百姓生活等各个领域。
采用先进的工程化方法进行软件开发和生产是实现软件产业化的 关键技术手段。
因此,为积极促进我国软件产业的发展,增强其国际竞争力,加速我国信息化建设,急需培养大批软件工程领域的实用型、复合型软件工程技术人才和软件工程管理人才。
二. 培养目标、方向和要求 1、培养目标 软件工程专业本科生的培养目标是面向国民经济信息化建设和发展的需要,面向企事业单位对软件工程技术人才的需求,培养具有国际竞争能力的多层次复合型软件实用人才。
作为一名合格的软件工程专业本科毕业生,应当符合国民经济信息化建设和发展需要, 以及企业对软件工程技术人才需求,能够成为企业所需要的较高层次的软件工程技术和管理人才,其基本能力应当达到(相当国际水准的)程序员、高级程序员、软件工程师、以及项目质量管理人员的水平。
2、培养方向 软件工程专业本科生的培养方向是强化基础、注重实践,不细化专业方向,但课程覆盖软件工程、系统工程、领域工程、网络工程、数字化技术、嵌入式软件、信息安全技术,以及软件项目管理、软件开发、软件测试、软件质量保证、系统管理与支持等内容。
3、培养要求 1)软件工程专业本科毕业生应较好地掌握马克思主义、毛泽东思想和邓小平理论;拥护党的基本路线和方针、政策;热爱祖国,遵纪守法,品行端正,身心健康,具有良好的职业道德和创业精神,积极为我国经济建设和社会发展服务。
2)软件工程专业本科毕业生应掌握软件工程领域扎实的基础理论和较宽广的专业知识;具有较强的工程实践能力,具备运用先进的工程化方法、技术和工具从事软件分析、设计、开发、维护等工作的能力,以及参与工程项目的能力、团队协作能力、技术创新能力和市场开拓能力。
3)掌握英语,具备良好的阅读、理解和撰写外语资料的能力和进行国际化交流的能力。
三. 培养方式及学习年限 1、培养方式 软件工程专业本科生采用系统的课程学习和工程实践相结合的培养方式。
软件工程实践要求学生直接参与软件工程项目实践,完成必要的技术方案设计、软件开发等工作,并在所取得的工程实践成果基础上完成学士学位论文的撰写。
学位论文可以是研究论文或技术报告,以及相关的工作成果。
学院提倡和特别加强双语教学,包括采用英文原版教材、聘请国外教授讲课或讲学等。
2、学习年限 本科生学习年限为4年 四. 课程设置 1、课程设置原则 计算机软件工程专业本科生课程体系设计遵循六个基本原则,即先进性、灵活性、复合性、工程性、创新性和模块化。
1)先进性:课程设置和课程内容需反映国际上先进的软件技术发展成果和软件企业对先进技术的需求,以及相关的基础理论。
2)灵活性:课程设置需具有灵活性,应根据软件技术的发展及时调整。
3)复合性:课程体系还需包括技能、工程、管理等方面的课程,使学生具有必要的综合技能和基本素质。
4)工程性:课程体系的设置面向软件工程实践,强调工程实践能力的培养,使学生能够自觉的运用先进的工程化方法和技术从事软件开发和项目管理,具有团队协作精神。
5)创新性:课程体系应当倡导学生自主学习,并给予必要的指导,从而培养学生自主学习和自我提高的能力,以及勇于开拓和善于创新的能力。
6)模块化:课程应该能够按照模块化的准则设计,课程模块的设计可以交叉。
如既可以按照课程性质划分为计算机基础类、软件数学类、工程类、方法工具类、软件系统类、管理类,也可以按照专业方向分为硬件类、操作系统类、数据库类、程序设计类、软件工程类、应用软件类、网络类、数学类、管理类等。
2、课程体系说明 课程体系包括以下几类: 1)、公共基础课程:主要包括甲类高等数学、英语、体育、政治理论等课程。
2)、专业基础课程:为学生打下坚实的计算机软件理论基础。
包括计算机科学基础、软件数学、系统软件、软件工程方法等方面的基础理论知识。
在数学方面,重点应包括离散数学、概率与数理统计、现代工程数学基础等;在软件专业基础方面,重点应包括软件工程、程序设计、数据结构、计算机组织结构、计算机网络、操作系统和数据库等方面的知识。
3)、软件设计与开发方法类课程:主要讲授软件分析、设计、开发、支持过程中先进和实用的方法、技术和工具,重点应包括需求获取与领域分析,面向对象(UML)等方法、技术与工具,信息化技术,数字化技术,网络与通信技术,以及领域知识和前沿技术等。
4)、软件工程方法类课程:主要教授软件工程方面的知识。
重点应包括个人与小组软件开发,分析与设计,软件过程与软件质量管理,软件测试,CMM等。
5)、软件系统类课程:主要讲授具体软件系统的使用知识,并强调应用技能的训练,重点应包括具体程序设计语言、具体操作系统,具体数据库,以及有关专业技能的认证课程等。
6)、项目管理课程:重点应包括软件项目管理、知识产权、软件企业管理与文化等课程。
7)...
什么叫软件工程?
软件工程一直以来都缺乏一个统一的定义,很多学者、组织机构都分别给出了自己的定义:Boehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。
IEEE:软件工程是开发、运行、维护和修复软件的系统方法。
Fritz Bauer:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。
软件工程学的内容 软件工程学的主要内容是软件开发技术和软件工程管理. 软件开发技术包含软件工程方法学、软件工具和软件开发环境;软件工程管理学包含软件工程经济学和软件管理学。
软件工程基本原理著名软件工程专家B.Boehm综合有关专家和学者的意见并总结了多年来开发软件的经验,于1983年在一篇论文中提出了软件工程的七条基本原理。
(1)用分阶段的生存周期计划进行严格的管理。
(2)坚持进行阶段评审。
(3)实行严格的产品控制。
(4)采用现代程序设计技术。
(5)软件工程结果应能清楚地审查。
(6)开发小组的人员应该少而精。
(7)承认不断改进软件工程实践的必要性。
B.Boehm指出,遵循前六条基本原理,能够实现软件的工程化生产;按照第七条原理,不仅要积极主动地采纳新的软件技术,而且要注意不断总结经验。
软件工程(SoftWare Engineering)的框架可概括为:目标、过程和原则。
(1)软件工程目标:生产具有正确性、可用性以及开销合宜的产品。
正确性指软件产品达到预期功能的程度。
可用性指软件基本结构、实现及文档为用户可用的程度。
开销合宜是指软件开发、运行的整个开销满足用户要求的程度。
这些目标的实现不论在理论上还是在实践中均存在很多待解决的问题,它们形成了对过程、过程模型及工程方法选取的约束。
(2)软件工程过程:生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。
软件工程过程主要包括开发过程、运作过程、维护过程。
它们覆盖了需求、设计、实现、确认以及维护等活动。
需求活动包括问题分析和需求分析。
问题分析获取需求定义,又称软件需求规约。
需求分析生成功能规约。
设计活动一般包括概要设计和详细设计。
概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。
详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。
实现活动把设计结果转换为可执行的程序代码。
确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。
维护活动包括使用过程中的扩充、修改与完善。
伴随以上过程,还有管理过程、支持过程、培训过程等。
(3)软件工程的原则是指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原则。
软件工程必须遵循什么原则围绕工程设计、工程支持以及工程管理已提出了以下四条基本原则:(1)选取适宜的开发模型该原则与系统设计有关。
在系统设计中,软件需求、硬件需求以及其它因素间是相互制约和影响的,经常需要权衡。
因此,必需认识需求定义的易变性,采用适当的开发模型,保证软件产品满足用户的要求。
(2)采用合适的设计方法在软件设计中,通常需要考虑软件的模块化、抽象与信息隐蔽、局部化、一致性以及适应性等特征。
合适的设计方法有助于这些特征的实现,以达到软件工程的目标。
(3)提供高质量的工程支撑工欲善其事,必先利其器。
在软件工程中,软件工具与环境对软件过程的支持颇为重要。
软件工程项目的质量与开销直接取决于对软件工程所提供的支撑质量和效用。
(4)重视软件工程的管理 软件工程的管理直接影响可用资源的有效利用,生产满足目标的软件产品以及提高软件组织的生产能力等问题。
因此,仅当软件过程予以有效管理时,才能实现有效的软件工程。
软件工程是指导计算机软件开发和维护的工程学科。
采用工程的概念、原理、 技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够 得到的最好的技术方法结合起来,这就是软件工程。
软件工程强调使用生存周期方法学和各种结构分析及结构设计技术。
它们是在七十年代为了对付应用软件日益增长的复杂程度、漫长的开发周期以及用户对软件产品经常不满意的状况而发展起来的。
人类解决复杂问题时普遍采用的一个策略就是“各个击破”,也就是对问题进行分解然后再分别解决各个子问题的策略。
软件工程采用的生存周期方法学就是从时间角度对软件开发和维护的复杂问题进行分解,把软件生存的漫长周期依次划分为若干个阶段,每个阶段有相对独立的任务,然后逐步完成每个阶段的任务。
采用软件工程方法论开发软件的时候,从对任务的抽象逻辑分析开始,一个阶段一个阶段地进行开发。
前一个阶段任务的完成是开始进行后一个阶段工作的前提和基础,而后一阶段任务的完成通常是使前一阶段提出的解法更进一步具体化,加进了更多的物理细节。
每一个阶段的开始和结束都有严格标准,对于任何两个相邻的阶段而言,前一阶段的结束标准就是后一阶段的开始标准。
在每一个阶段结束之前都必须进行正式严格的技术审查和管理复审,从技术和管理两方面对这个阶段的开发...
怎样才能成为高级软件工程师
转一个经典回答: 程序员的七种武器 信息技术的发展时间虽然不长,但其爆炸式的发展速度使信息技术迅速覆盖社会和人类生活的各个角落。
程序员们是这场信息化浪潮的见证者之一,更是其中的主要参与者,这是时代赋予每个程序员的机会和责任。
信息技术的更新速度是惊人的,程序员的职业生涯则是一个要求不断学习的过程,永远不能固步自封。
本人在工作期间曾看见过很多程序员只要有闲暇时间就浏览一些没有太大作用的网页,在网上聊天,打游戏,浪费了大量的时间,十分不可取。
而另外一种情况是,IT技术的日新月异使很多程序员眼花缭乱,什么都想学,却又不知从何学起,今天看看这个,明天学学那个,贪多不熟。
虽然IT技术发展迅速,但很多技术都是有规律可循,一些基本的概念、原理和方法还很通用,可以举一反三。
本人根据自己的体会和经验,向那些刚刚踏入IT行业的新程序员们或正在迷茫的程序员们推荐程序员必须掌握的七种武器,有了这七种武器,虽不敢说笑傲江湖,但将自己立于不败之地还是可以的。
第一种武器:开发工具 至少熟练掌握两到三种开发工具的使用,这是程序员的立身之本,其中C/C++和JAVA是我重点推荐的开发工具,C/C++以其高效率和高度的灵活性成为开发工具中的利器,很多系统级的软件还是用C/C++编写。
而JAVA的跨平台和与WEB很好的结合是JAVA的优势所在,而本人对SUN公司的“网络即计算机”的概念相当欣赏,并相信JAVA即其相关的技术集JAVA One会成为未来的主流开发工具之一。
其次,如果能掌握一种简便的可视化开发工具,如VB,PowerBuilder,Delphi,C++ Builder,则更好,这些开发工具减小了开发难度,并能够强化程序员对象模型的概念。
另外,需要掌握基本的脚本语言,如shell,perl等,至少能读懂这些脚本代码。
第二种武器:数据库 为什么数据库是如此重要?很多应用程序都是以数据库的数据为中心,而数据库的产品也有不少,其中关系型数据库仍是主流形式,所以程序员至少熟练掌握一两种数据库,对关系型数据库的关键元素要非常清楚,要熟练掌握SQL的基本语法。
虽然很多数据库产品提供了可视化的数据库管理工具,但SQL是基础,是通用的数据库操作方法。
如果没有机会接触商业数据库系统,可以使用免费的数据库产品是一个不错的选择,如mySQL, Postgres等。
第三种武器:操作系统 当前主流的操作系统是Windows,Linux/Unix,熟练地使用这些操作系统是必须的,但只有这些还远远不够。
要想成为一个真正的编程高手,需要深入了解操作系统,了解它的内存管理机制、进程/线程调度、信号、内核对象、系统调用、协议栈实现等。
Linux作为开发源码的操作系统,是一个很好的学习平台,Linux几乎具备了所有现代操作系统的特征。
虽然Windows系统的内核实现机制的资料较少,但通过互联网还是能获取不少资料。
只有对操作系统有一定的了解后,你会发现自己上了一个新的台阶。
第四种武器:网络协议TCP/IP 在互联网如此普及的今天,如果您还没有对互联网的支撑协议TCP/IP协议栈有很好的掌握,就需要迅速补上这一课,网络技术已改变了软件运行的模式,从最早的客户/服务器结构,到今天的WEB Services,再到未来的网格计算,这一切都离不开以TCP/IP协议栈为基础的网络协议支持,所以,深入掌握TCP/IP协议是非常必要的。
至少,你需要了解ISO七层协议模型,IP/UDP/TCP/HTTP等常用协议的原理和三次握手机制。
第五种武器:DCOM/CORBA/XML/WEB Services 随着技术的发展,软件与网络的无缝结合是必然趋势,软件系统的位置无关性是未来计算模式的重要特征之一,DCOM/CORBA是当前两大主流的分布计算的中间件平台,DCOM是微软COM(组件对象模型)的扩展,而CORBA是OMG支持的规范。
程序员需要做的不仅仅是利用商业的开发平台来开发软件,而是要理解这些技术的初衷,即为什么需要这项技术,如果你能理解了这一点,再回头看这些技术的具体实现,就如庖丁解牛,迎刃而解。
XML/WebServices重要性不言而喻,XML以其结构化的表示方法和超强的表达能力被喻为互联网上的“世界语”,是分布计算的基石之一。
第六种武器:软件工程与CMM 现代大型软件系统的开发中,工程化的开发控制取代个人英雄主义,成为软件系统成功的保证,一个编程高手并不一定是一个优秀的程序员,一个优秀的程序员是将出色的编程能力和开发技巧同严格的软件工程思想有机结合,编程只是软件生命周期中的其中一环,优秀的程序员应该掌握软件开发各个阶段的基本技能,如市场分析,可行性分析,需求分析,结构设计,详细设计,软件测试等。
一句话可以概括我的看法:“创意无限,流程保证”。
第七种武器:强烈的好奇心 什么才是一个程序员的终极武器呢,那就是强烈的好奇心和学习精神。
没有比强烈的好奇心和学习精神更好的武器了,它是程序员们永攀高峰的源泉和动力所在。
软件工程要学什么基础课?
软件工程专业课程设置分为六大类,依次为公共基础课、专业基础课、专业课、专业选修课、集中实践课和课外实践课。
专业基础课主要有:面向对象程序设计、计算机电路、数据结构、工程数学、离散数学、数据库系统概论、软件集成开发环境、计算机组成原理与实验、工程设计导论、汇编语言、操作系统与实验、计算机网络、软件工程、软件工程专业英语、编译原理与实验、系统分析与设计和软件质量保证与测试等课程。
专业课分为四个方向:动漫与数字媒体艺术方向、数据库应用技术方向、嵌入式软件技术方向和网络与通信软件技术方向。
动漫与数字媒体艺术方向专业课主要有:计算机平面设计、数字媒体艺术概论、构成基础、三维动画-MAYA和Flash AS 程序设计等课程; 数据库应用技术方向专业课主要有:MySQL 数据库设计与应用、SQL Server 数据库设计与应用、XML基础、大型数据库开发与应用和数据仓库等课程; 嵌入式软件技术方向专业课主要有:嵌入式操作系统、嵌入式微处理器结构与应用、Android应用程序开发、嵌入式Linux程序设计和WinCE应用程序开发等课程; 网络与通信软件技术方向专业课主要有:通信原理与技术、网络规划设计、WEB 编程技术、网络操作系统和网络信息安全等课程。
...
软件工程入门学些什么
本人乃软件工程专业毕业生! 不要着急,要自信一点,都是这么过来的,大学里面主要学的就是理论,实际操作都是要靠自己在课外的时间多自学.一般大一都是学C,大二学习java和C++,不过你自己要弄清楚,你到底想精通哪一门,千万不要每一门都去深究(暂时你没有那么多的时间)。
大学课堂上学的东西真的好重要,千万别听别人说什么“大学什么都学不到”,我学的是java,下面是我学习的部分路线(直接从以前的回答中复制过来的),希望对你有用。
首先找一本简单的教材,先对java有个基本的认识(大概看那么半个月就差不多了,随便下载一本入门的书就行了) 然后推荐你看>,分为上下两卷,已经是第八版了,大概有一千六七百页;当 你看完后,基本的java知识已经掌握了(记住,一定要多练习啊)(我那时候一个暑假看完第一遍,每天看将近十个小时加练习,但是要弄懂,呵呵,至少看个三四遍吧,这两本书只要能搞懂70%就很不错了) 这个时候你可以看看>中文名"java编程思想",这本书写的比较难,如果你看不懂,那么你要多做练习,慢慢看,如果看完了,而且懂了,那么证明你的java水平到达了一个更高的层次;(去参加面试的时候问的那些java知识完全可以应付过来了)(或者你可以先看下面的书,边看thinking in java这本书,这样也是可以的,而且学习的效率应该会高些) 然后java就会分方向,j2me(手机编程)不建议你去学这个(要学就学android手机编程),已经过时了;j2ee方向(Web编程),先学html,javaScript,css(这些书多得数不清,呵呵),然后就学servlet和jsp,《jsp应用开发详解》(入门) 《Servlet与JSP核心编程》(核心)这两本书还不错,然后就可以学SSH(三大框架,这个书一大堆),学习struts的时候建议你从struts1开始学起《精通Struts基于MVC的Java Web设计与开发》,然后就可以学习struts2《Struts2权威指南》,接下来学习Hibernate《精通Hibernate:Java对象持久化技术详解》,最后学习Spring《spring2.0技术手册》(提示:只要你java基础学得好,这些东西都会学得很快) 这个时候你就要把注意力放在设计模式,数据结构和计算机算法上面来了, 设计模式可以先看> 然后再看>, 数据结构建议你看清华大学严慰敏老师写的那本教材; 计算机算法要了解基本的排序,如果你不做底层,只做应用的话,没有必要去看那个这本书太难了。
(设计模式,数据结构和算法才是真正的精髓,要有很多年的编程经验才能够使用得游刃有余,光看懂还不行的,一定要多练习,到了这个境界才是真正的java高手)(我学java有三年了,这是我的体会) 等你掌握前面的这些知识之后,推荐你看>,这本书是目前java领域公认的高级书籍。
在项目中你肯定会遇到一些前端的知识,那么你得精通javascript,>(入门), >(进阶),这两本书弄懂了,那么学习jquery和extjs都会很快的。
还有要提醒你一下,对于初学者,不要使用eclipse编程工具,建议你先用记事本写程序,当你比较熟练了之后就可以使用eclipse这些工具了。
不要心急,不要图快,所有的书要一本本的慢慢看,多看几遍(一本书看上个四五遍,你就可以成高手,呵呵)。
java基础(j2se)的重点有:继承、多态、流、线程、网络编程、反射、集合、数据库连接、泛型、JNI技术、分布式技术还有解析xml也是很重要的,如果你想学android手机编程,那么SWING和AWT要熟悉一下。
如果你不想学Web编程(j2ee),那么我建议你可以学android手机编程《Google+Android开发入门与实战》(入门) 《Google Android SDK开发范例大全》(深入)(建议把android当作业余爱好,把web编程当作主攻方向,因为j2ee包含了大量框架知识),书很多,可以自己去搜。
多想 多看 多练才是王道,不要相信什么培训机构,这些都没啥用,真正学好只能靠你自己。
面向对象思想+java基础(j2se)+数据结构+设计模式+计算机算法 为核心,学好了这几个8000元/月轻而易举,什么都可以不学好,唯独这几科一定要学好,切记切记! 当然,随着你的技术水平的提高,你还会要学习其他的语言,不过这都是后话,等你把上面的东西掌握了,我再告诉你怎么学(高并发等内容),哈哈!