《软件工程基本概念与原理.ppt》由会员分享,可在线阅读,更多相关《软件工程基本概念与原理.ppt(86页珍藏版)》请在三一办公上搜索。
1、软件工程初级教程,主讲:林风人邮件电话,1/86,一、课程的性质、任务,“软件工程”是专业核心基础课程,它是研究软件开发和软件管理的一门工程科学。它的主要任务是掌握支持软件开发和管理的理论、方法、技术、标准以及计算机辅助软件工程的工具(Visio或Rose)环境等知识;使学生具有软件开发能力(包括熟练进行程序设计语言的结构化编码与可视化设计能力;UML的阅读和建模能力;培养用软件工程化及项目化的思想处理解决问题的能力等)。,2/86,概括说:软件开发能力最关键的步骤有三步:,3/86,二、通过学习应能达到如下目标:,接受一种思想。掌握软件工程的基本原理、概念与方法-主要包括软件系统的可行性研究
2、、需求分析、概要设计、详细设计、编码、测试、维护、面向对象、项目管理等方面的基本知识与方法。掌握软件工程中的一些基本技术方法,如数据流图、数据字典、结构分析方法,面向对象分析方法、集成测试方法、项目管理的基本方法等。结合模拟案例,要求学生从实际中掌握从面向过程到面向对象思想理论的基本方法和技巧。掌握软件开发文档的组织编写等。掌握一种工具。学期末能用Visio或Rose软件完成大作业的设计(画各种软件工程图)(指定或自找题目)把目前或以后要学的程序设计知识(C、Java、VC+、C#、ASP.NET)提高到一定理论高度认识。,小提示:,学会思想比掌握一种工具更为重要。,4/86,“现在大家都已认
3、识到,如果有哪个项目不遵循软件工程原则必定会受到实践的惩罚。”,“软件工程课是我们参加工作以后最能直接应用的一门专业课。”,一位刚毕业参加工作的计算机专业学生,三、体会:,5/86,目 录,第1章 软件工程的基本概念与原理 第2章 软件开发过程 第3章 软件项目管理 第4章 可行性分析与初步计划第5章 需求分析第6章 总体设计第7章 详细设计第8章 软件实现第9章 软件维护,第10章 从结构化到面向对象 第11章 面向对象的需求获取第12章 面向对象的分析与设计第13章 面向对象的测试,6/86,第1章 软件工程的基本概念与原理,7/86,先接受2个正确观点,1、“开发软件不等于编写程序”开发
4、软件应该完成的工作远远多于编写程序应该完成的工作。设计算法(即完成指定功能的步骤),然后用程序设计语言(例如:C语言)表达该算法。而开发软件并非就是编写程序,事实上编写程序仅仅是开发软件所应完成的工作的一部分,而且只占一小部分。为了开发出一个符合用户需要、质量合格的软件,软件工程师必须首先弄清楚用户面临的问题是什么,也就是要明确软件的“主攻”方向;接下来应该进行可行性研究方案,分析用户面临的问题是否有行得通的解决方案。为避免浪费资源,仅在该软件的开发是可行的前提下,才进行实质性的开发工作;,8/86,先接受2个正确观点,然后应该进行需求分析工作,通过与用户的反复交流,搞清楚用户对该软件的具体需
5、求,这些需求是进行软件设计的依据;在编写程序之前需要先进行设计。通常,大型软件的设计工作又分成两个阶段进行,先进行总体设计(又称为概要设计),再进行详细设计;编写程序实质上是把设计结果翻译成用某种程序设计语言书写的程序;程序编写出来之后,还需要经过严格的测试过程(需要的工作量通常占软件开发全部工作量的40%50%),软件确实符合用户需求而且质量合格,才能交付给用户使用。,9/86,先接受2个正确观点,2、“错误做法会导致软件危机”。开发软件不等于编写程序。但是,迄今为止,仍然有不少人错误地认为开发软件就是编写程序,或者认为开发软件主要就是编写程序。人们之所以有错误的认识并在开发软件时采用了错误
6、的做法,主要可归因于在计算机系统发展的早期阶段“开发软件”的个体化特点。所谓软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题绝不仅仅是不能正常运行的软件才具有的,实际上,几乎所有软件都不同程度地存在这些问题。,10/86,1.1 软件工程学科的诞生,1.1.1 软件的特点1.1.2 软件生产的发展1.1.3 软件危机1.1.4 软件工程的诞生,11/86,1.1.1 软件的特点,软件的概念:20世纪60年代提出的,(软件=程序+文档)程序是指令的集合;文档有关程序功能、设计、编程使用的文字或图形资料。软件产品的特殊性:软件与硬件构成完整的计算机系统;软件产品与硬件产品
7、的主要区别包括:逻辑产品、无形、脑力劳动的结果,以程序和文档的形式体现,保存在特殊介质上,被计算机执行才能体现出它的功能和作用软件生产成本集中在研制阶段;软件不会被用坏、不存在磨损和消耗,但会过时;是脑力创造的结果,还未完全摆脱手工开发方式,大部分是”定做”;软件生产与维护费用不断增加;,12/86,1.1.1 软件的特点,软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。程序是按事先设计的功能和性能要求执行的指令序列。计算机程序包括源程序和目标程序。数据是使程序能正常操纵信息的数据结构(即数据的组织形式)。文档是与程序开发,维护和使用有关的图文材料。,13
8、/86,1.1.1 软件的特点,面向过程的程序=算法+数据结构 面向对象的程序=对象+消息 面向构件的程序=构件+构架 软件=程序+数据+文档,14/86,软件的维护曲线,15/86,1.1 软件工程的产生,1.1.1 软件的特点1.1.2 软件生产的发展1.1.3 软件危机1.1.4 软件工程,16/86,1.1.2 软件生产的发展,软件生产经历了三个阶段:,程序设计时代(46年-56年),软件开发时代(56年-68年),软件工程时代(68年以后),17/86,程序设计时代(46年-56年),个体手工方式;低级语言、编程效率低、难,编程是聪明人的事;追求编程技巧和程序运行效率;代码不规范,不
9、易读,不易维护;只重视编码,不重视设计和文档;硬件资源紧缺;,18/86,程序系统时代(56年-68年),作坊式小团队开发;出现高级语言,编程效率有所提高;追求写代码技巧,但提出了结构化程序设计方法;软件复杂性增加,需求增加,但软件开发方法和软件项目管理技术跟不上,开发速度慢,与计算机硬件发展速度拉大距离;软件数量猛增,但质量差,可维护性差,维护成本急剧增加;上述矛盾越来越显著,最终导致了软件危机;,19/86,软件工程时代(68年以后),软件工程学科诞生,引入了“工程化”思想;结构化和面向对象的方法成熟;使用数据库、开发工具、开发环境、网络、分布式技术开发软件;软件开发技术有了很大进步,但没
10、有突破性,软件价格不断上升,没有完全摆脱软件危机;,20/86,计算机软件发展的三个时期及特点,21/86,计算机软件发展的三个时期及特点,22/86,1.1 软件工程的产生,1.1.1 软件的特点1.1.2 软件生产的发展1.1.3 软件危机1.1.4 软件工程诞生,23/86,1.1.3 软件危机,软件危机的产生软件危机的表现软件危机的原因,24/86,1.软件危机的产生,软件生产的第二个阶段,硬件生产成本下降、效率提高、性能提高,激发了软件需求;软件复杂性要求提高、生产效率低,与硬件生产进一步拉开距离;软件质量差,难维护,成本急剧增加;软件项目成功率低;上述矛盾的进一步激化,瀑发了软件危
11、机,25/86,1.1.3 软件危机,软件危机的产生软件危机的表现爆发软件危机的原因,26/86,2.软件危机的表现,(1)经费超预算,项目一再拖延;(2)开发的软件不能满足用户要求;(3)软件可维护性差;(4)软件可靠性差;,27/86,3.软件危机产生的原因,(1)软件规划越来越大;(2)软件开发管理困难且复杂;(3)软件开发费用不断增加;(4)软件开发技术落后;(5)软件生产方式落后;(6)软件开发工具落后;,28/86,1.1 软件工程的产生,1.1.1 软件的特点1.1.2 软件生产的发展1.1.3 软件危机1.1.4 软件工程的诞生,29/86,1.1.4 软件工程诞生,软件危机促
12、使软件工程学科诞生;借鉴硬件生产的“工程化”思想,1968年,北大西洋公约组织提出了“软件工程”的概念,主张“用工程化思想来开发软件”。,30/86,第1章 软件工程的基本概念与原理,1.1 软件工程的产生1.2 软件工程的基本概念与原理1.软件工程的定义、性质2.软件工程关注的主要问题3.软件工程的目标4.软件的生命周期5.软件工程的基本原理,31/86,软件工程定义、性质,软件工程是用科学知识、技术、原理来定义、开发、维护软件的一门学科。概括地说,软件工程是指导软件开发和维护的一门工程学科。软件工程学科的根本要求:采用工程的概念、原理、技术和方法来开发与维护软件,把好的管理技术和开发技术方
13、法结合起来,追求可靠性、可维护性、满足用户需求、高的开发效率。用工程学科中的观点进行费用估算、进度控制、制定计划和方案;用管理科学中的方法和原理进行软件生产过程的管理;用数学的方法建立软件开发中的各种模型和算法。,32/86,软件工程关注的关键问题,(1)关注于大型程序的构造(2)中心课题是控制复杂性(3)软件需求经常变化(4)开发软件的效率非常重要(5)有效的沟通是合作开发软件的关键,33/86,(1)软件工程关注于大型程序的构造,“大”与“小”的分界线并不十分清晰。通常把一个人在较短时间内写出的程序称为小型程序,而把多人合作用时半年以上才写出的程序称为大型程序。传统的程序设计技术和工具是支
14、持小型程序设计的,不能简单地把这些技术和工具用于开发大型程序。,34/86,(2)软件工程中心课题是控制复杂性,通常,软件所解决的问题十分复杂,以致于不能把问题放在一起试途一步解决。人们不得不把问题分解,使得分解出的每个部分是直观、明了、可理解的,而且各部分之间保持简单的联系。用这种方法并不能降低问题的整体复杂性,但是却可使它变成容易解决。注意,许多软件的复杂性主要不是由问题的内在复杂性造成的,而是由必须处理的大量细节,让人看上去觉得很复杂。结论:分解的手法,是控制复杂性的主要手段,控制复杂性的有效方法是分解:面向过程的方法,是按功能分解;面向对象的方法,是按责任分解。,35/86,(3)软件
15、需求经常变化,绝大多数软件都模拟了现实世界的某一部分。现实世界不断变化,人们对其认识也有偏差,这就造成了软件需求经常变化的特性。这种变化不仅存在于开发过程中和也存在交付使用以后。前者要求在开发过程中,应能灵活调整设计方案,后者要求软件应具有可维护性。,36/86,(4)开发软件的效率非常重要,随着社会经济和文化的发展,网络及各类开发与应用平台的不断翻新,计算机硬件性能的不断提高,社会对软件的数量、规模和复杂性不断提高,软件的需求供不应求的现象依然日益严重。因此,寻求开发与维护软件的更好、更有效的方法和工具,依然是软件工程的一个重要课题。不断提高软件开发效率非常重要,规范的开发过程好的开发环境和
16、工具、提高软件复用是软件工程提高效率的有效办法。,37/86,(5)和谐地合作是开发软件的关键,软件处理的问题日益复杂和庞大,软件开发往往是多人协同工作的成果,明确的责任划分和有效的互通信团队成员协作的关键。事实上仅有上述规定还不够,每个人还必须严格地按规定行事。为了迫使团队成员遵守规定,应该运用标准和规程。通常,可以用工具来支持这些标准和规程。总之,纪律是成功地完成软件开发项目的一个关键。,团队合作是必须的,使用有效的工具,进行有效的沟通是关键,38/86,软件工程的性质,综合性、交叉性学科涉及计算机科学、工程科学、管理科学、数学等领域。,39/86,1.2 软件工程的基本概念和原理,1.软
17、件工程的定义、性质2.软件工程面临的主要问题3.软件工程的目标4.软件的生命周期5.软件工程的基本原理,40/86,软件工程面临的问题,需求问题质量问题(可靠性可维护性可移植性等)生产效率(重用是为了提高效率)费用,41/86,1.2 软件工程的基本概念,1.软件工程的定义、性质2.软件工程面临的主要问题3.软件工程的目标4.软件的生命周期5.软件工程的基本原理,42/86,软件工程的目标,运用工程化思想组织与管理软件项目,采用科学的管理方法、开发方法及工具,提高软件开发效率,保证软件质量,提高软件的可靠性和可维护性,在合理的工期内生产出能够满足用户需求的软件产品。,43/86,1.2 软件工
18、程的基本概念,1.软件工程的定义、性质2.软件工程面临的主要问题3.软件工程的目标4.软件的生命周期5.软件工程的基本原理,44/86,4.软件生命周期理论,软件生存周期的 定义 软件生命周期阶段的 划分 软件生命周期阶段划分的 原则,45/86,软件生存周期的定义,软件生命周期(Software Life Cycle)是从软件开发需求被提出,启动可行性分析开始,经历软件开发过程,直到软件被开发出来、投入使用,最终被淘汰为止的整个时间。生存周期理论,把整个生存周期划分为若干阶段,使得每个阶段有明确的任务,把规模大、活动多、管理复杂的软件开发活动变得容易控制和管理。,46/86,软件生命周期阶段
19、划分,软件生存周期一般划分为软件定义、软件开发、运行与维护三个时期。软件定义时期,可以进一步分为问题定义、可行性研究、需求分析三个阶段。软件开发时期,可以分为概要设计、详细设计、编码、测试等阶段。软件交付用户以后,就进入了漫长的运行与维护期,在软件被淘汰之前,要经历多次的纠错性、完善性和适应性维护活动,47/86,生命周期理论对开发过程的指导意义,每个阶段的工作均以前一阶段的结果为依据,并作为下一阶段的前提。每个阶段结束时,都要有技术审查和管理复审,从技术和管理两方面对阶段性开发成果进行检查,及时决定系统的继续进行,还是停工或返工。每个阶段都进行复审,主要检查必备的文档资料的质量和有效性。前一
20、阶段复审通过了,后一个阶段才能开始。应避免到开发后期才发现先期工作中存在的严重错误,造成不可挽回的损失或浪费。,48/86,生命周期理论对开发过程的指导意义,把软件生命周期划分为若干阶段,是实施软件生产工程化的基础。软件规模、种类、开发方式、开发环境以及开发使用的方法都会影响软件生存周期的阶段划分。分析师可以根据软件性质、用途及规模等因素,对软件过程中的阶段和活动进行适当的裁剪。,49/86,1.问题定义阶段,用户提出一个软件开发需求以后,分析师首先要明确软件的实现目标、规模及类型:如它是数据处理问题还是实时控制问题,是科学计算问题还是人工智能问题等。,50/86,2.可行性研究阶段,在清楚了
21、项目的性质、目标、规模后,要对项目进行可行性分析。分析师进行一次大大简化了的需求分析和设计过程(目的是探索这个问题是否值得去解决,是否有可行的解决方案。)提交可行性研究报告。可行性研究报告中应给出项目初步开发计划。根据项目的目标、功能、性能及规模,估计开发需要的资源。还要对软件开发费用、开发进度做出估计。详细的项目开发计划,等到需求分析结束,对项目有了进一步的认识之后,还要进行一次细化。,51/86,3需求分析阶段,软件是为用户开发的,软件的功能性和非功能性要求首先得由用户提出,这需要用户配合软件技术人员按照用户的实际业务要求进行挖掘。最终得到的软件产品能否满足用户的真实需求,是断定项目成败关
22、键要素。需求分析是详细获取并表述用户需求的活动。需求分析的结果是后续设计与编程活动的依据。获取真实、完整的需求,并以适当工具,准确地表述为需求分析模型是需求分析活动的关键。这一阶段的结果是软件需求规格说明书。,52/86,4概要设计阶段,概要设计阶段,开发人员根据软件需求规格说明书,构造目标系统的软件结构。这一活动也被称为“总体设计”,用于获得目标系统的宏观蓝图。,53/86,5详细设计阶段,详细设计包括过程设计,数据结构设计等活动,主要是把概要设计的结果,细化为可以用某种编程语言实现的设计方案。结构化方法中,主要是程序流程设计和用户界面设计。面向对象的方法中,将是对前期得到的类或对象模型进行
23、细节设计,使之可以直接支持编程。,54/86,6编程阶段,编程又称为编码,就是编写程序源代码。最终得到的“源程序清单”就是源代码清单。程序源代码要经过编译或解释以后,才能被执行。编码追求的是程序代码编写风格,要求规范、友好,便于阅读和调试,这是提高程序质量和软件可维护性的关键活动之一。编程往往跟调试以及单元测试同时进行,由程序员完成。,55/86,7测试阶段,测试是软件质量保证活动的最后一道防线。测试分为单元测试、集成测试和确认测试。单元测试就是模块测试,与编程活动同时进行。独立的测试阶段,主要完成集成测试、确认测试和验收测试。,56/86,8运行与维护,软件运行和维护是生存周期中最长的阶段。
24、软件交付使用后,便进入漫长的运行和维护期,可能持续几年甚至几十年,此间可能要进行多次维护或修改。维护活动按性质分为纠错性维护、完善性维护和适应性维护。,57/86,1.2 软件工程的基本概念,1.软件工程的定义、性质2.软件工程面临的主要问题3.软件工程的目标4.软件的生命周期5.软件工程的基本原理,58/86,软件工程的基本原理,软件工程是一门实践性很强的应用学科,掌握必要的原理和行动原则,对于规范实践活动,深入理解软件工程思想,提高项目的成功率都有帮助。著名软件工程专家B.Boehm综合有关专家和学者的意见,并根据多年开发软件的经验,提出了软件工程的七条原理。,59/86,软件工程的基本原
25、理,(1)应用生存周期的理论,分阶段的计划、管理和控制软件开发过程。统计发现,在不成功的软件项目中有50%左右是由于计划不周造成的,项目失控制而造成的。成功的经验是运行软件生命周期理论,把软件开发与维护的过程分成三个时期若干个阶段,这样化繁为简,便于控制与管理。Boehm认为,在软件的整个生命周期中应制定并严格执行六类计划:项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划、运行维护计划。,60/86,软件工程的基本原理,(2)坚持进行阶段性评审。大部分错误是在编码之前造成的 因此,在每个阶段都进行严格的评审,以便尽早发现在软件开发过程的错误严格进行阶段性成果的评审,尽早发现软件开
26、发过程中的错误,可以减少错误造成的损失。尤其发现早期的一个错误,就可以避免在后期辐射出的成百上千个错误。,61/86,软件工程的基本原理,(3)合理控制需求变动。需求变动性是软件项目与生俱来的特性,不变是不可能的。有变动的要求,就说明已有的成果有需要纠错和改善的地方,但需求变更有可能对项目进展造成冲击,要严格进行配置管理,合理控制需求变更。在软件开发过程中不要随意改变需求,因为改变某项需求往往需要付出较高的代价,但在实践中用户往往会提出需求变更,因此需要采取科学的产品控制技术。目前主要实行基准配置管理:基准配置是指经过阶段评审后的软件配置成分,如各个阶段产生的文档或程序代码。对涉及基准配置的修
27、改,必须经过严格的评审,通过后才能实施修改。,62/86,软件工程的基本原理,(4)采用先进的软件设计方法。好的设计方法可以得到灵活可靠的软件结构,对于提高软件的可靠性、可维护性、应对需求变更的灵活性都非常关键。通常考虑模块化、抽象与信息隐蔽、局部化、一致性等准则。这些准则在本书软件设计部分还会详细阐述。实践表明:采用先进的技术既可提高软件开发的效率,又可提高软件维护的效率。80年代及之前:结构化分析、设计技术90年代:面向对象分析、设计技术,63/86,软件工程的基本原理,(5)开发文档要完备,阶段性成果应能清楚地审查。软件产品是看不见、摸不着的逻辑产品,开发过程难以评价和管理。根据软件开发
28、项目的总目标及完成期限,规定开发组织的责任和产品标准,使所得的结果能够清楚地审查,64/86,软件工程的基本原理,(6)开发小组的人员应少而精。开发小组人员的素质和数量是影响软件产品质量和开发效率的重要因素。开发小组人员数目的增加,使相互交流复杂、费用增加。,65/86,软件工程的基本原理,(7)承认不断改进软件工程实践的必要性。遵循前6条基本原理,就能够按照当代软件工程基本原理实现软件的工程化生产,但不能保证赶上时代前进的步伐。积极主动采纳新的软件技术,且不断总结经验。,66/86,第1章 软件工程的基本概念与原理,1.1 软件工程学科的诞生1.2 软件工程的基本概念和原理1.3 软件工程研
29、究的主要内容,67/86,1.3 软件工程研究的主要内容,1.3.1 软件开发过程1.3.2 软件工程技术1.3.3 软件项目管理1.3.4 计算机辅助软件工程,68/86,1.3.1 软件开发过程,在软件工程学科诞生之前,人们只重视编程,很少关注软件开发过程对软件项目的响影。实践证明,软件项目是一项复杂的系统工程,对开发过程的组织与施工管理很大程度上决定了软件的开发效率、软件质量,甚至项目的成败。因此,对软件开发过程的研究与不断改善是软件工程讨论的一项主要内容。软件生命周期理论把软件开发与维护过程划分为若干个阶段,这是研究软件开发过程的基础。实践中,人们对行之有效的软件过程组织模式进行总结,
30、形成了不同的软件开发过程模型。传统的有瀑布模型、快速原型、增量模型、螺旋模型、喷泉模型等。随着面向对象方法的广泛应用,Rational公司还提出了统一过程模型(简称RUP)。随着软件过程越来越多的被重视,作为评价软件组织能力成熟度CMM模型也被提出,并得到了广泛的应用。近年来,代表着新的价值观和原则的敏捷联盟所倡导的敏捷过程以及软件过程改进成为讨论的热点。关于软件过程的详细内容,本书放在第二章讨论。,69/86,1.3.1 软件开发过程快速原型模型,1.基本思想 在获取一组基本的需求定义后,利用高级软件工具的可开发环境,快速地建立一个目标系统的最初版本,并把它交给用户试用、补充和修改,再进行新
31、的版本开发。反复进行这个过程,直到得出系统的“精确解”,即用户满意为止。经过这样一个反复补充和修改的过程,应用系统的“最初版本”就逐步演变为系统的“最终版本”。,原型:一个具体的可执行模型,它实现了系统的若干功能。原型法:不断地运行系统“原型”来进行启发、揭示和判断的系统开发方法。,70/86,1.3.1 软件开发过程快速原型模型,原型法的主要思路:根据用户的需求迅速构造一个低成本的用于演示及评价的试验系统(原型)由用户对原型进行评价在用户评价的基础上对原型进行修改或重构。有了满意的系统原型,同时也积累了使用原型的经验,用户常会提出新目标,从而进一步重新构造原型周期。新目标的范围要比修改或补充
32、不满意的原型大。()渐增型()用于验证软件需求的原型()用于验证设计方案,71/86,1.3.1 软件开发过程快速原型模型,3.软件原型是软件的最初版本,以最少的费用、最短的时间开发出的、以反映最后软件的主要特征的系统。它具有以下特征:(1)它是一个可实际运行的系统。(2)它没有固定的生存期。一种极端是扔掉原型(以最简便方式大量借用已有软件,做出最后产品的模型,证实产品设想是成功的,但产品中并不使用);另一种极端是最终产品的一部分即增量原型(先做出最终产品的核心部分,逐步增加补充模块),演进原型居于其中(每一版本扔掉一点,增加一点,逐步完善至最终产品)。,72/86,1.3.1 软件开发过程快
33、速原型模型,(3)从需求分析到最终产品都可作原型,即可为不同目标作原型。(4)它必须快速、廉价。(5)它是迭代过程的集成部分,即每次经用户评价后修改、运行,不断重复双方认可。,73/86,1.3.1 软件开发过程快速原型模型,快速原型法的特点:有直观的系统开发过程用户参与系统开发的全过程可以逐步明确用户需求用户直接掌握系统的开发进度用户接受程度高,74/86,1.3.1 软件开发过程快速原型模型,快速原型法的不足:不适用于拥有大量计算或控制功能的系统不适用于大型或复杂的系统容易掩盖需求、分析、设计等方面的问题结果不确定随原型构造评价过程而定整体考虑较少快速原型法主要适应于:适用于解决有不确定因
34、素的问题适用于对用户界面要求高的系统适用于决策支持方面的应用适用于中型系统,75/86,1.3.1 软件开发过程螺旋模型,在原型基础上,进行多次原型反复并增加风险评估后形成。,76/86,1.3.1 软件开发过程螺旋模型,77/86,1.3.1 软件开发过程螺旋模型,螺旋模型分析在螺旋模型结构中,维护只是螺旋模型的另一个周期,在维护和开发之间本质上并没有区别,从而解决了做太多测试或未作足够测试所带来的风险。适用条件内部的大规模软件的开发,不太适合合同软件。一般只适用于大规模软件的开发,78/86,1.3.2 软件工程技术,总体上,软件工程讨论的主要内容可以分为软件工程技术和软件项目管理两大部分
35、。在软件开发过程中,对于可行性分析、需求规格说明、系统设计、编程与测试,以及软件维护等活动都有相应的专门技术需要掌握。,79/86,从软件工程技术的内容体系来看,大体上分为:原理、方法、工具和技术四个层面。,软件工程原理表明:为了不断提高软件质量、软件开发效率,以及确保软件项目的成功,软件工程学科提出了解决问题的一组原理和相关原则(即7条原理),无论采用什么过程或方法,这些原理和原则都是应该普遍被遵守的。在遵守软件工程原理和原则的基础上,不同的专家、学者及软件工程实践者,从各自的角度认识和研究软件系统的规律,并提出了各自认识问题和解决问题的思维模式,最具代表性的就是我们熟悉的结构化方法论和面向
36、对象的方法论,这就是软件工程“方法”层面的内容。不同的方法论为了在相应的思维模式上对软件开发提出解决方案,研究并设计了一组从事分析与设计活动的工具,如结构化的分析与设计工具、面向对象的分析与设计工具等,这些就构成了软件工程“工具”层面的内容。在运用这些工具从事分析与设计的活动中,必不可少的需要掌握一定的技术,这就构成了软件工程“技术”层面的内容。,80/86,总之,从软件设计与实现技术的角度来讲,目前软件工程技术主要讨论结构化方法和面向对象的方法两种方法论。软件分析与设计过程中,同时伴随着软件分析与设计模型的建立与演化,因此软件建模也是软件工程技术研究的主要内容,包括结构化建模与面向对象的建模
37、,主要讨论建模工具和建模技术两个层面。有关软件工程技术的内容在各个开发周期的阶段中都会涉及到。,81/86,1.3.3 软件项目管理,软件项目管理是软件工程的另一部分重要内容。按照统一过程模型(RUP)的解释,软件工程技术的运用构成了软件开发过程中的核心的工作流,而软件项目管理活动则构成了软件过程中对核心工作流起支撑作用的支持工作流,是确保软件质量以及软件项目顺利实施的保证。软件项目管理讨论的主要内容包括:软件度量与估算、软件项目计划、软件进度控制、软件质量保证以及软件配置管理等内容,这些内容在本教材第三章详细讨论。,82/86,1.3.4 计算机辅助软件工程,计算机软件除了系统软件、应用软件
38、以外,还有一类专门用于辅助软件开发的工具软件,最常用的就是建模工具,如结构化方法提供的用于需求分析与设计建模的辅助工具,面向对象的方法也有相应的辅助工具,如Rational Rose。其本上软件开发周期的每一个阶段,都有相应的辅助软件开发活动的工具软件,目的是实现软件生存周期各个环节的自动化,提高软件开发的质量和效率。计算机辅助软件工程(Computer Aided Software Engineering,CASE)对软件的生存周期中的概念进行了新的探讨,这种探讨是建立在自动化基础上的。CASE的实质是为软件开发提供一组优化的、集成的、且能大量节省人力的软件开发工具,其目的是提高软件开发过程
39、各环节的自动化程度,确保项目范围内的一致性、完整性,这类工具又被称为CASE工具。CASE技术是软件开发工具和软件开发方法的结合,不同的方法论会提供相应的CASE工具,以解决软件开发过程的质量、效率、可靠性、可维护性等问题。CASE工具不同于以往的软件工具,主要体现在:支持专用的个人计算环境;使用图形工具对软件系统进行说明并建立文档;收集从最初的软件需求调查到软件维护各个环节的所有信息;将生存周期各阶段的工作连接在一起确保项目在一致性与完整性的基础上向前演化;用人工智能技术实现软件开发和维护工作自动化。,83/86,软件工程的内容,包括软件开发技术和软件项目管理;可概括为:理论、方法、工具、技术;本教材概括为:方法、过程、工具、环境;,84/86,作业:归纳如下内容,85/86,86/86,