软件工程生命周期模型的学习总结

1 综述

软件过程定义了软件开发中采用的方法。软件工程是集成计算机软件开发的过程、方法和工具的学科。

软件工程的一般视图:定义阶段(做什么)、开发阶段(如何做)、支持阶段(变化)。 2 线性顺序模型

有时被称为“传统生存周期或瀑布模型”。

活动包括:系统/信息工程和建模、软件需求分析、设计、代码生成、测试、支持 为什么线性模型有时候不能奏效?

建议:虽然线性模型经常被嘲笑为“旧式的”,但是,在需求被很好理解的情况下,它仍然是一种合理的方法。

缺点:

1、实际的项目大部分情况难以按照该模型给出的顺序进行,而且这种模型的迭代是间接的,这很容易由微小的变化而造成大的混乱。

2、 经常情况下客户难以表达真正的需求,而这种模型却要求如此,这种模型是不欢迎具有二义性问题存在的。

3、 客户要等到开发周期的晚期才能看到程序运行的测试版本,而在这时发现大的错误时,可能引起客户的惊慌,而后果也可能是灾难性的。

4、采用这种线性模型,会经常在过程的开始和结束时碰到等待其他成员完成其所依赖的任务才能进行下去,有可能花在等待的时间比开发的时间要长。我们称之为“堵赛状态”。 优点:

1、它提供了一个摸板,这个摸板使得分析、设计、编码、测试和支持的方法可以在该摸板下有一个共同的指导。

2、虽然有不少缺陷但比在软件开发中随意的状态要好得多。

瀑布模型将软件开发活动分为需求分析、设计、编码、测试等几个阶段,这几个阶段是对工程活动的划分,瀑布模型没有再涉及其它方面的活动,因此瀑布模型关注于工程活动。

关于选取开发模型

有时开发模型的选取不是很容易判断的,这里面有时不单是需求及开发的问题,对于开发商有开发周期、开发费用的问题,对于用户同样有内部计划、公司发展计划等因素进行影响。

一般来说对于应用开发―――为客户开发软件,客户在开发及测试完毕软件后就要实际开始使用,那么就使用瀑布模型。

当然在需求明确的情况下自然也要使用瀑布模型

对于自主开发及客户需求不明并有较长的设计时间―――可以用演化模型。

而螺旋模型适于适合于大型软件开发,吸收了"演化"概念,不过有时也用于用户需求不明的情况下。 当然还有其他开发模型,没有在本文讨论。

名词定义:

瀑布模型:规定了各项软件工程活动。包括:制定开发计划、进行需求分析和说明、软件设计、程序

编码、测试及维护。

特点:自上而下,相互衔接的固定次序,如瀑布流水、逐级下落。

演化模型:第一次只是试验开发,其目标只在于探索可行性,弄清软件需求;第二次则在此基础上获得较为满意的软件产品,通常把一次得到的试验性产品称"原型"。

特点:减少由于软件需求不明确而给开发带来的风险。

螺旋模型:将瀑布模型及演化螺旋模型结合起来,并且加入被两种模型都忽略了的风险分析,弥补了两者的不足。 瀑布模型的特点:

① 瀑布模型为软件的开发和维护提供了一种有效有管理模式,对保证软件

产品的质量有重要的作用;

② 可根据这一模式制定出开发计划,进行成本预算,组织开发力量,以项

目的阶段评审和文档控制为手段,有效地对整个开发过程进行指导;

③ 在一定程度上消除非结构化软件、降低软件的复杂度、促进软件开发工

程化方面起到显著作用;

④ 瀑布模型缺乏灵活性、无法通过开发活动来澄清本来不够确切的需求,

这将导致直到软件开发完成时发现所开发的软件并非是用户所需求的。

3 原型实现模型

原型实现范型定义:

需求收集

快速设计

原型实现模型是迭代的,是帮助客户或开发者理解需求的,总体上讲,并不是交付一个最终产品系统。其流程从听取客户意见开始、随后是建造/修改原型、客户测试运行原型、然后回头往复循环直到客户对原型满意为止。由于这种模型可以让客户快速的感受到实际的系统(虽然这个系统不带有任何质量的保证),所以客户和开发者都比较喜欢这种过程模型(对于那些仅仅用来演示软件功能的公司而言或从来不考虑软件质量和不害怕长期维护的公司而言)。 缺点:

1、没有考虑软件的整体质量和长期的可维护性。

2、大部分情况是不合适的操作算法被采用目的为了演示功能,不合适的开发工具被采用仅仅为了它的方便,还有不合适的操作系统被选择等等。

3、由于达不到质量要求产品可能被抛弃,而采用新的模型重新设计。

优点:

1、如果客户和开发者达成一致协议:原型被建造仅为了定义需求,之后就被抛弃或者部分抛弃, 那么这种模型很合适了。

2、迷惑客户抢占市场,这是一个首选的模型。

原型实现仍然是软件工程的一个有效范型。关键是定义开始时的游戏规则,即客户和开发者达成一致:原型被建造仅是为了定义需求,之后就被抛弃了(或至少部分被抛弃),实际的软件在充分考虑了质量和可维护性之后才被开发。

建议:当你的客户有一个合理的续签,但对细节没有任务线索时,先开发一个原型。

原型模型则主要是为了解决需求获取的难题而创建原型用于需求的获取和确认,再将需求转化为软件系统,其主要内容集中在软件开发本身,因此原型模型也关注于工程活动。

4 RAD模型

快速应用开发(Rapid Application Development、RAD)是一个增量型的软件开发过程模型,强调极短的开发周期。是线性顺序模型的一个“高速”变种,通过使用基于构件的建造发放赢得了快速开发。如果需求理解的好而且约束了项目的范围,利用这种模型可以很快的创建出功能完善的“信息系统”。其流程从业务建模开始,随后是数据建模、过程建模、应用生成、测试及反复。RAD过程强调的是复用,复用已有的或开发可复用的构件。实际上RAD采用第四代技术。

基于构件的软件工程(不理解)

适用范围:

如果需求理解得很并且约束了项目范围。主要适用于信息系统应用,包括以下阶段:业务建模、数据建模、过程建模、应用生成、测试及反复。 业务建模工作流程与其他工作流程的关系如下:

业务模型是需求工作流程的一种重要输入,用来了解对系统的需求。

业务实体是分析设计工作流程的一种输入,用来确定设计模型中的实体类。 缺点:

1、只能用于信息系统。

2、对于较大的项目需要足够的人力资源去建造足够的RAD组。

3、开发者和客户必须在很短的时间完成一系列的需求分析, 任何一方配合不当都会导致RAD项目失败。

4、这种模型对模块化要求比较高,如果有哪一功能不能被模块化,那么建造RAD所需要的构件就会有问题。

5、技术风险很高的情况下不适合这种模型。

优点:

1、开发速度快,质量有保证。

2、对信息系统特别有效。

5 演化软件过程模型

演化模型是迭代的。它的特征是:使软件工程师渐进地开发逐步完善的软件版本。

5.1 增量模型

增量模型融合了线性顺序模型的基本成分(重复的应用)和原型实现的迭代特征。增量模型采用随着日程时间的进展而交错的线性序列。每一个线性序列产生软件的一个可发布的

“增量”。当使用增量模型时,第一个增量往往是核心的产品,也就是说第一个增量实现了基本的需求,但很多补充的特征还没有发布。客户对每一个增量的使用和评估,都做为下一个增量发布的新特征和功能。这个过程在每一个增量发布后不断从复,直到产生了最终的完善产品。增量模型强调每一个增量均发布一个可操作的产品。

缺点:

1、至始至终开发者和客户纠缠在一起,直到完全版本出来。

优点:

1、人员分配灵活,刚开始不用投入大量人力资源,当核心产品很受欢迎时,可增加人力实现下一个增量。

2、当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径,这样就可以先发布部分功能给客户,对客户起到镇静剂的作用。

3、具有一定的市场。

增量模型将瀑布模型的顺序化和多次迭代相结合,每个增量开发都是一次瀑布模型的过程,强调每一个增量均发布一个可运行版本,以满足客户和市场的需要。增量模型主要考虑当需要快速推出可运行的版本,而该版本不需要完整的功能时,在工程活动上的解决方案,因此增量模型也关注于工程活动。

5.2 螺旋模型

这是一个演化软件过程模型,它将原型实现的迭代特征和线性顺序模型中控制的和系统化的方面结合起来。使得软件的增量版本的快速开发成为可能。在螺旋模型中,软件开发是一系列的增量发布。在每一个迭代中,被开发系统的更加完善的版本逐步产生。螺旋模型被划分为若干框架活动,也称为任务区域。典型地,有3到6个任务区域:

1、客户交流:建立开发者和客户之间有效通信所需要的任务。

2、计划:定义资源、进度、及其它相关项目信息所需要的任务。

3、风险分析:评估技术的及管理的风险所需要的任务。

4、工程:建立应用的一个或多个表示说需要的任务。

5、构造及发布:构造、测试、安装和提供用户支持所需要的任务。

6、客户评估:基于对在工程阶段产生的或在安装阶段实现的软件表示的评估,获得客户反馈所需要的任务。

这是一个相对较新的模型,它的功效还需要经历若干年的使用方能确定下来。

缺点:

1、需要相当的风险分析评估的专门技术,且成功依赖于这种技术。

2、很明显一个大的没有被发现的风险问题,将会导致问题的发生,可能导致演化的方法失去控制。

3、这种模型相对比较新,应用不广泛,其功效需要进一步的验证。

优点:

1、对于大型系统及软件的开发,这种模型是一个很好的方法。开发者和客户能够较好地对待和理解每一个演化级别上的风险。

螺旋模型的主要贡献在于明确提出迭代概念和风险的问题,并指出在项目定义、需求、设计等阶段均存在风险,需要重点考虑,并通过多次迭代的原型主动诱发风险。风险管理不属于工程活动的范围,但我们仍然认为螺旋模型的主要内容是工程方面的:因为对于非工程活动,螺旋模型仅考虑了风险问题,而风险管理仅是非工程活动的一个小部分,不足以依此推断螺旋模型主要关注于非工程活动。

5.3 WINWIN螺旋模型

螺旋模型提出了强调客户交流的一个框架活动。该活动的目标是从客户处诱导项目需求。在理想情况下,开发者简单地询问客户需要什么,而客户提供足够的细节进行下去。不幸的是这种情形很少发生。在现实中,客户和开发者进入一个谈判过程,客户被要求在成本和应市之间的约束下平衡功能、性能、和其它产品或系统特征。最好的谈判追求“双赢”结果,也就是说通过谈判客户获得大部份系统的功能,而开发者则获得现实的和可达到的预算和时限。对客户的交流定义了下面的活动:

1、系统或子系统的关键“风险承担者”的标识。

2、风险承担者的“赢条件”的确定。

3、风险承担者的赢条件谈判,以将它们协调为一组满足各方考虑的双赢条件。 缺点:

1、需要额外的谈判技巧。

优点:

1、客户和开发者达到一种平衡。

5.4 并发开发模型

这种模型关注于多个任务的并发执行,表示为一系列的主要技术活动、任务及它们的相关状态。并发过程模型是由客户要求、管理决策、评审结果驱动的。该模型不是将软件工程活动限定为一个顺序的事件序列,而是定义了一个活动网络。网络上的每一个活动均可于其它活动同时发生。这种模型可以提供一个项目的当前状态的准确视图。

缺点:暂时无

优点:

1、可用于所有类型的软件开发,而对于客户/服务器结构更加有效。

2、可以随时查阅到开发的状态。

6 基于构件的开发模型

面向对象的技术为软件工程的基于构件的过程模型提供了技术框架。面向对象模型强调了类的创建、类的封装了的数据、操纵该数据的算法。一般来讲经过合适的设计和实现,面向对象的类可以在不同的应用及基于计算机的系统的体系结构中复用。基于构件的开发模型融合了螺旋模型的许多特征,它本质上是演化形的,要求软件创建的迭代方法。然而基于构件的开发模型是利用预先包装好的软件构件(有时成为类)来构造应用。

开发活动从候选类的标识开始,这一步是通过检查将被应用系统操纵的数据及用于实现该操纵的算法来完成的。相关的数据和算法被封装成一个类。

缺点:

1、 过分依赖于构件,构件库的质量影响着产品质量。

优点:

1、构件可复用。提高了开发效率。

2、采用了面向对象的技术。

7 形式化方法模型

形式化方法模型包含了一组活动,他们导致了计算机软件的数学规约。形式化方法使得软件工程师们能够通过应用一个严格的数学符号体系来规约、开发、和验证基于计算机的系统。 这种方法的一个变种,称为净室软件工程,已经被一些组织所采用。在开发中使用形式化方法时,它们提供了一种机制,能够消除使用其它软件过程模型难以克服的很多问题。二义性、不完整性、不一致性能被更容易地发现和纠正,而不是通过专门的评审,是通过对应用的数学分析。 形式化方法提供了可以产生无缺陷软件的承诺。

缺点:

1、开发费用昂贵(对开发人员需要多方面的培训),而且需要的时间较长。

2、不能将这种模型作为对客户通信的机制,因为客户对这些数学语言一无所知。

3、目前还不流行。

优点:

1、形式化规约可直接作为程序验证的基础,可以尽早的发现和纠正错误(包括那些其它情况下不能发现的错误)。

2、开发出来的软件具有很高的安全性和健壮性,特别适合安全部门或者软件错误会造成经济损失的开发者。

3、具有开发无缺陷软件的承诺。

8 第四代技术

一系列的软件工具的使用,是第四代技术的特点。这些工具有一个共同的特点:能够使软件工程师们在较高级别上规约软件的某些特征,然后根据开发者的规约自动生成源代码。我们知道,软件在越高的级别上被规约,就越能被快速的建造出程序。软件工程的

4GT模型集中于规约软件的能力:使用特殊的语言形式或一种采用客户可以理解的术语描述待解决问题的图形符号体系。和其它模型一样,4GT也是从需求收集这一步开始的,要将一个4GT实现变成最终产品,开发者还必须进行彻底的测试、开发有意义的文档,并且同样要完成其它模型中同样要求的所有集成活动。总而言之,4GT已经成为软件工程的一个重要方法。特别是和基于构件的开发模型结合起来时,4GT模型可能成为当前软件开发的主流模型!

缺点:

1、用工具生成的源代码可能是“低效”的。

2、生成的大型软件的可维护性目前还令人怀疑。

3、在某些情况下可能需要更多的时间。

优点:

1、缩短了软件开发时间,提高了建造软件的效率。

2、对很多不同的应用领域提供了一种可行性途径和解决方案

9 过程技术

10 产品和过程 11 附录

1 综述

软件过程定义了软件开发中采用的方法。软件工程是集成计算机软件开发的过程、方法和工具的学科。

软件工程的一般视图:定义阶段(做什么)、开发阶段(如何做)、支持阶段(变化)。 2 线性顺序模型

有时被称为“传统生存周期或瀑布模型”。

活动包括:系统/信息工程和建模、软件需求分析、设计、代码生成、测试、支持 为什么线性模型有时候不能奏效?

建议:虽然线性模型经常被嘲笑为“旧式的”,但是,在需求被很好理解的情况下,它仍然是一种合理的方法。

缺点:

1、实际的项目大部分情况难以按照该模型给出的顺序进行,而且这种模型的迭代是间接的,这很容易由微小的变化而造成大的混乱。

2、 经常情况下客户难以表达真正的需求,而这种模型却要求如此,这种模型是不欢迎具有二义性问题存在的。

3、 客户要等到开发周期的晚期才能看到程序运行的测试版本,而在这时发现大的错误时,可能引起客户的惊慌,而后果也可能是灾难性的。

4、采用这种线性模型,会经常在过程的开始和结束时碰到等待其他成员完成其所依赖的任务才能进行下去,有可能花在等待的时间比开发的时间要长。我们称之为“堵赛状态”。 优点:

1、它提供了一个摸板,这个摸板使得分析、设计、编码、测试和支持的方法可以在该摸板下有一个共同的指导。

2、虽然有不少缺陷但比在软件开发中随意的状态要好得多。

瀑布模型将软件开发活动分为需求分析、设计、编码、测试等几个阶段,这几个阶段是对工程活动的划分,瀑布模型没有再涉及其它方面的活动,因此瀑布模型关注于工程活动。

关于选取开发模型

有时开发模型的选取不是很容易判断的,这里面有时不单是需求及开发的问题,对于开发商有开发周期、开发费用的问题,对于用户同样有内部计划、公司发展计划等因素进行影响。

一般来说对于应用开发―――为客户开发软件,客户在开发及测试完毕软件后就要实际开始使用,那么就使用瀑布模型。

当然在需求明确的情况下自然也要使用瀑布模型

对于自主开发及客户需求不明并有较长的设计时间―――可以用演化模型。

而螺旋模型适于适合于大型软件开发,吸收了"演化"概念,不过有时也用于用户需求不明的情况下。 当然还有其他开发模型,没有在本文讨论。

名词定义:

瀑布模型:规定了各项软件工程活动。包括:制定开发计划、进行需求分析和说明、软件设计、程序

编码、测试及维护。

特点:自上而下,相互衔接的固定次序,如瀑布流水、逐级下落。

演化模型:第一次只是试验开发,其目标只在于探索可行性,弄清软件需求;第二次则在此基础上获得较为满意的软件产品,通常把一次得到的试验性产品称"原型"。

特点:减少由于软件需求不明确而给开发带来的风险。

螺旋模型:将瀑布模型及演化螺旋模型结合起来,并且加入被两种模型都忽略了的风险分析,弥补了两者的不足。 瀑布模型的特点:

① 瀑布模型为软件的开发和维护提供了一种有效有管理模式,对保证软件

产品的质量有重要的作用;

② 可根据这一模式制定出开发计划,进行成本预算,组织开发力量,以项

目的阶段评审和文档控制为手段,有效地对整个开发过程进行指导;

③ 在一定程度上消除非结构化软件、降低软件的复杂度、促进软件开发工

程化方面起到显著作用;

④ 瀑布模型缺乏灵活性、无法通过开发活动来澄清本来不够确切的需求,

这将导致直到软件开发完成时发现所开发的软件并非是用户所需求的。

3 原型实现模型

原型实现范型定义:

需求收集

快速设计

原型实现模型是迭代的,是帮助客户或开发者理解需求的,总体上讲,并不是交付一个最终产品系统。其流程从听取客户意见开始、随后是建造/修改原型、客户测试运行原型、然后回头往复循环直到客户对原型满意为止。由于这种模型可以让客户快速的感受到实际的系统(虽然这个系统不带有任何质量的保证),所以客户和开发者都比较喜欢这种过程模型(对于那些仅仅用来演示软件功能的公司而言或从来不考虑软件质量和不害怕长期维护的公司而言)。 缺点:

1、没有考虑软件的整体质量和长期的可维护性。

2、大部分情况是不合适的操作算法被采用目的为了演示功能,不合适的开发工具被采用仅仅为了它的方便,还有不合适的操作系统被选择等等。

3、由于达不到质量要求产品可能被抛弃,而采用新的模型重新设计。

优点:

1、如果客户和开发者达成一致协议:原型被建造仅为了定义需求,之后就被抛弃或者部分抛弃, 那么这种模型很合适了。

2、迷惑客户抢占市场,这是一个首选的模型。

原型实现仍然是软件工程的一个有效范型。关键是定义开始时的游戏规则,即客户和开发者达成一致:原型被建造仅是为了定义需求,之后就被抛弃了(或至少部分被抛弃),实际的软件在充分考虑了质量和可维护性之后才被开发。

建议:当你的客户有一个合理的续签,但对细节没有任务线索时,先开发一个原型。

原型模型则主要是为了解决需求获取的难题而创建原型用于需求的获取和确认,再将需求转化为软件系统,其主要内容集中在软件开发本身,因此原型模型也关注于工程活动。

4 RAD模型

快速应用开发(Rapid Application Development、RAD)是一个增量型的软件开发过程模型,强调极短的开发周期。是线性顺序模型的一个“高速”变种,通过使用基于构件的建造发放赢得了快速开发。如果需求理解的好而且约束了项目的范围,利用这种模型可以很快的创建出功能完善的“信息系统”。其流程从业务建模开始,随后是数据建模、过程建模、应用生成、测试及反复。RAD过程强调的是复用,复用已有的或开发可复用的构件。实际上RAD采用第四代技术。

基于构件的软件工程(不理解)

适用范围:

如果需求理解得很并且约束了项目范围。主要适用于信息系统应用,包括以下阶段:业务建模、数据建模、过程建模、应用生成、测试及反复。 业务建模工作流程与其他工作流程的关系如下:

业务模型是需求工作流程的一种重要输入,用来了解对系统的需求。

业务实体是分析设计工作流程的一种输入,用来确定设计模型中的实体类。 缺点:

1、只能用于信息系统。

2、对于较大的项目需要足够的人力资源去建造足够的RAD组。

3、开发者和客户必须在很短的时间完成一系列的需求分析, 任何一方配合不当都会导致RAD项目失败。

4、这种模型对模块化要求比较高,如果有哪一功能不能被模块化,那么建造RAD所需要的构件就会有问题。

5、技术风险很高的情况下不适合这种模型。

优点:

1、开发速度快,质量有保证。

2、对信息系统特别有效。

5 演化软件过程模型

演化模型是迭代的。它的特征是:使软件工程师渐进地开发逐步完善的软件版本。

5.1 增量模型

增量模型融合了线性顺序模型的基本成分(重复的应用)和原型实现的迭代特征。增量模型采用随着日程时间的进展而交错的线性序列。每一个线性序列产生软件的一个可发布的

“增量”。当使用增量模型时,第一个增量往往是核心的产品,也就是说第一个增量实现了基本的需求,但很多补充的特征还没有发布。客户对每一个增量的使用和评估,都做为下一个增量发布的新特征和功能。这个过程在每一个增量发布后不断从复,直到产生了最终的完善产品。增量模型强调每一个增量均发布一个可操作的产品。

缺点:

1、至始至终开发者和客户纠缠在一起,直到完全版本出来。

优点:

1、人员分配灵活,刚开始不用投入大量人力资源,当核心产品很受欢迎时,可增加人力实现下一个增量。

2、当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径,这样就可以先发布部分功能给客户,对客户起到镇静剂的作用。

3、具有一定的市场。

增量模型将瀑布模型的顺序化和多次迭代相结合,每个增量开发都是一次瀑布模型的过程,强调每一个增量均发布一个可运行版本,以满足客户和市场的需要。增量模型主要考虑当需要快速推出可运行的版本,而该版本不需要完整的功能时,在工程活动上的解决方案,因此增量模型也关注于工程活动。

5.2 螺旋模型

这是一个演化软件过程模型,它将原型实现的迭代特征和线性顺序模型中控制的和系统化的方面结合起来。使得软件的增量版本的快速开发成为可能。在螺旋模型中,软件开发是一系列的增量发布。在每一个迭代中,被开发系统的更加完善的版本逐步产生。螺旋模型被划分为若干框架活动,也称为任务区域。典型地,有3到6个任务区域:

1、客户交流:建立开发者和客户之间有效通信所需要的任务。

2、计划:定义资源、进度、及其它相关项目信息所需要的任务。

3、风险分析:评估技术的及管理的风险所需要的任务。

4、工程:建立应用的一个或多个表示说需要的任务。

5、构造及发布:构造、测试、安装和提供用户支持所需要的任务。

6、客户评估:基于对在工程阶段产生的或在安装阶段实现的软件表示的评估,获得客户反馈所需要的任务。

这是一个相对较新的模型,它的功效还需要经历若干年的使用方能确定下来。

缺点:

1、需要相当的风险分析评估的专门技术,且成功依赖于这种技术。

2、很明显一个大的没有被发现的风险问题,将会导致问题的发生,可能导致演化的方法失去控制。

3、这种模型相对比较新,应用不广泛,其功效需要进一步的验证。

优点:

1、对于大型系统及软件的开发,这种模型是一个很好的方法。开发者和客户能够较好地对待和理解每一个演化级别上的风险。

螺旋模型的主要贡献在于明确提出迭代概念和风险的问题,并指出在项目定义、需求、设计等阶段均存在风险,需要重点考虑,并通过多次迭代的原型主动诱发风险。风险管理不属于工程活动的范围,但我们仍然认为螺旋模型的主要内容是工程方面的:因为对于非工程活动,螺旋模型仅考虑了风险问题,而风险管理仅是非工程活动的一个小部分,不足以依此推断螺旋模型主要关注于非工程活动。

5.3 WINWIN螺旋模型

螺旋模型提出了强调客户交流的一个框架活动。该活动的目标是从客户处诱导项目需求。在理想情况下,开发者简单地询问客户需要什么,而客户提供足够的细节进行下去。不幸的是这种情形很少发生。在现实中,客户和开发者进入一个谈判过程,客户被要求在成本和应市之间的约束下平衡功能、性能、和其它产品或系统特征。最好的谈判追求“双赢”结果,也就是说通过谈判客户获得大部份系统的功能,而开发者则获得现实的和可达到的预算和时限。对客户的交流定义了下面的活动:

1、系统或子系统的关键“风险承担者”的标识。

2、风险承担者的“赢条件”的确定。

3、风险承担者的赢条件谈判,以将它们协调为一组满足各方考虑的双赢条件。 缺点:

1、需要额外的谈判技巧。

优点:

1、客户和开发者达到一种平衡。

5.4 并发开发模型

这种模型关注于多个任务的并发执行,表示为一系列的主要技术活动、任务及它们的相关状态。并发过程模型是由客户要求、管理决策、评审结果驱动的。该模型不是将软件工程活动限定为一个顺序的事件序列,而是定义了一个活动网络。网络上的每一个活动均可于其它活动同时发生。这种模型可以提供一个项目的当前状态的准确视图。

缺点:暂时无

优点:

1、可用于所有类型的软件开发,而对于客户/服务器结构更加有效。

2、可以随时查阅到开发的状态。

6 基于构件的开发模型

面向对象的技术为软件工程的基于构件的过程模型提供了技术框架。面向对象模型强调了类的创建、类的封装了的数据、操纵该数据的算法。一般来讲经过合适的设计和实现,面向对象的类可以在不同的应用及基于计算机的系统的体系结构中复用。基于构件的开发模型融合了螺旋模型的许多特征,它本质上是演化形的,要求软件创建的迭代方法。然而基于构件的开发模型是利用预先包装好的软件构件(有时成为类)来构造应用。

开发活动从候选类的标识开始,这一步是通过检查将被应用系统操纵的数据及用于实现该操纵的算法来完成的。相关的数据和算法被封装成一个类。

缺点:

1、 过分依赖于构件,构件库的质量影响着产品质量。

优点:

1、构件可复用。提高了开发效率。

2、采用了面向对象的技术。

7 形式化方法模型

形式化方法模型包含了一组活动,他们导致了计算机软件的数学规约。形式化方法使得软件工程师们能够通过应用一个严格的数学符号体系来规约、开发、和验证基于计算机的系统。 这种方法的一个变种,称为净室软件工程,已经被一些组织所采用。在开发中使用形式化方法时,它们提供了一种机制,能够消除使用其它软件过程模型难以克服的很多问题。二义性、不完整性、不一致性能被更容易地发现和纠正,而不是通过专门的评审,是通过对应用的数学分析。 形式化方法提供了可以产生无缺陷软件的承诺。

缺点:

1、开发费用昂贵(对开发人员需要多方面的培训),而且需要的时间较长。

2、不能将这种模型作为对客户通信的机制,因为客户对这些数学语言一无所知。

3、目前还不流行。

优点:

1、形式化规约可直接作为程序验证的基础,可以尽早的发现和纠正错误(包括那些其它情况下不能发现的错误)。

2、开发出来的软件具有很高的安全性和健壮性,特别适合安全部门或者软件错误会造成经济损失的开发者。

3、具有开发无缺陷软件的承诺。

8 第四代技术

一系列的软件工具的使用,是第四代技术的特点。这些工具有一个共同的特点:能够使软件工程师们在较高级别上规约软件的某些特征,然后根据开发者的规约自动生成源代码。我们知道,软件在越高的级别上被规约,就越能被快速的建造出程序。软件工程的

4GT模型集中于规约软件的能力:使用特殊的语言形式或一种采用客户可以理解的术语描述待解决问题的图形符号体系。和其它模型一样,4GT也是从需求收集这一步开始的,要将一个4GT实现变成最终产品,开发者还必须进行彻底的测试、开发有意义的文档,并且同样要完成其它模型中同样要求的所有集成活动。总而言之,4GT已经成为软件工程的一个重要方法。特别是和基于构件的开发模型结合起来时,4GT模型可能成为当前软件开发的主流模型!

缺点:

1、用工具生成的源代码可能是“低效”的。

2、生成的大型软件的可维护性目前还令人怀疑。

3、在某些情况下可能需要更多的时间。

优点:

1、缩短了软件开发时间,提高了建造软件的效率。

2、对很多不同的应用领域提供了一种可行性途径和解决方案

9 过程技术

10 产品和过程 11 附录


相关内容

  • Chp+1+软件工程学概论
  • 第1章 软件工程学概论 1 2015/9/17 本章内容 软件危机 软件工程 软件生命周期 软件过程     2 2015/9/17 学习重点    1.软件危机.软件工程产生的原因 2.软件工程过程和软件生命周期 3.软件生命周期模型 软件危机 软件工程 软件生命周期 软件过程 软件 ...

  • 软件需求工程选择题
  • 选择题 1. 软件生命周期包括哪些阶段?A A. 需求.设计.编码.单元测试.接收测试和维护阶段. B. 设计.编码.单元测试.接收测试和维护阶段. C. 需求.设计.编码.单元测试和接收测试阶段. D. 需求.设计和编码阶段. 2. 好的软件需求具有哪些特性?A A. 一致性和全面性. B. 易读 ...

  • 产品全生命周期管理技术
  • 产品全生命周期管理技术 http://www.cnsb.cn 2011-12-21 中国设备网 文字选择:大 中 小 中文摘要:产品全生命周期管理(Product overall Lifecycle Management--PLM)正在成为我国企业开展信息化的现实需求.本文以国际PLM主流产品为基础 ...

  • 项目与项目管理
  • 项目管理知识体系• 项目管理知识体系( Project Management Body of Knowledge, 简称PMBOK)这一专用术语是 指项目管理这一专业领域中的知识总和 • 是在项目管理专业建设和学科发展的过程中,由 PMI首先提出来的.其目的在于:定义和解释项 目管理的基本概念.原理 ...

  • 实用软件工程方法
  • 实用软件工程 教学大纲 1.1 课程简介 1.1.1 课程名称 中文名:实用软件工程方法 英文名:Introduction to Software Engieering 1.1.2 课程类别 岗位应用技能课程 1.1.3 课程概览 本书为软件工程的初学者介绍一个实用的软件开发框架,它只说明怎样去做软 ...

  • 基于全生命周期设计思想的工业设计方法_袁莉
  • 包装工程 PACKAGINGENGINEERINGVol.26No132005 基于全生命周期设计思想的工业设计方法 袁莉,杨随先,韩志甲 (四川大学, 成都 610065) [摘要] 分析了工业设计与全生命周期设计的关系以及将全生命周期设计思想引入工业设计 的意义.提出了基于全生命周期设计思想的产 ...

  • 软件工程导论试题(打印)
  • 软件工程导论试题(老师给的) 一.选择 1.瀑布模型把软件生命周期划分为八个阶段:问题的定义.可行性研究.软件需求分析. 系统总体设计.详细设计.编码.测试和运行.维护.八个阶段又可归纳为三个大的阶段: 计划阶段.开发阶段和 ( ). A.详细计划 B.可行性分析 C.运行阶段 D.测试与排错 2. ...

  • 软件工程重点知识
  • 第1章软件工程学概述 1.1软件危机 概念:指在计算机软件的开发和维护过程中所遇到的一系列严重问题.实际上,几乎所有软件都不同程度地存在这些问题. 原因: 1. 与软件本身的特点有关.1)软件不同于硬件,缺乏"可见性",它是计算机系统的逻辑部件而不是物理部件.2)软件不同于一般程 ...

  • 软件工程学
  • 目录 第一章 软件工程学 ............................................. 1 第二章可行性研究 .................................................... 5 第三章需求分析 ................. ...