软工建模九张图 瀑布模型生命周期 软件生命周期 需求工程中的分析模型 将分析模型转化为软件设计 谈对其的理解

有以下知识点(考试内容当然鈈止这些)

4. 需求分析的定义、获取

5. 常见的软件体系结构(B/S 、C/S 、软件总线中间件)

6. SOA 的定义、特点、和工作模型(松耦合、明确定义的接口)

7. 雲计算的定义、优势和应用模型

8. 软件测试的概念、原则、方法和测试策略

10. 软件项目管理的管理过程和领域

11. 成本估算模型、进度计划的方法

12. 風险管理、质量管理的概念

    软件工程是一门指导软件开发的工程学科,它以计算机理论及其他相关学科的理论为指导采用工程化的概念、原理、技术和方法进行软件的开发和维护,把经实践证明的科学的管理措施与最先进的技术方法结合起来软件工程研究的目标是“以較少的投资获取高质量的软件”。

软件生命周期(SDLD)是指一个从用户需求开始经过开发、交付使用,在使用中不断地增补修订直至软件报废的全过程,亦称软件生存期(Life  Cycle)

软件生命周期分为以下阶段:

可行性研究和项目开发计划。该阶段必须要回答的问题是“要解決的问题是什么”

需求分析。该阶段的任务不是具体地解决问题而是准确地确定“软件系统必须做什么”,确定软件系统必须具备哪些功能

概要设计。概要设计就是设计软件的结构该结构由哪些模块组成,这些模块的层次结构是怎样的这些模块的调用关系是怎样的,每个模块的功能是什么同时还要设计该项目的应用系统的总体数据结构和数据库结构,即应用系统要存储什么数据这些数据昰什么样的结构,它们之间有什么关系等

详细设计。即对每个模块完成的功能进行具体描述要把功能描述变为精确的、结构化的过程描述。

编码该阶段把每个模块的控制结构转换成计算机可接受的程序代码,即写成以某特定程序设计语言表示的“源程序”

测試。它是保证软件质量的重要手段其主要方式是在设计测试用例的基础上检验软件的各个组成部分。测试分为模块测试、组装测试、確认测试等。

维护软件维护是软件生存期中时间最长的阶段。已交付的软件投入正式使用后便进入软件维护阶段,它可以持续几年甚至几十年

在大部分文献中将生存期划分为5个阶段,即 要求定义、设计、编码、测试及维护其中 要求定义阶段包括可行性研究和项目開发计划及需求分析,设计阶段包括概要设计和详细设计

为了描述软件生存期的活动,提出了多种生存期模型如瀑布模型生命周期、循坏模型、螺旋模型、喷泉模型、智能模型等。

3. 目前常见的软件过程模型如下:瀑布模型生命周期、增量模型、螺旋模型、喷泉模型、智能模型等

优点:在软件工程的第一阶段,瀑布模型生命周期得到了广泛的应用它简单易用,在消除非结构化软件降低软件的复杂性,促进软件开发工程化方面起了很大的作用

缺点:由于瀑布模型生命周期是一种理想的线性开发模式,它将一个充满回溯的软件开发过程硬性分割为几个阶段无法解决软件需求不明确或者变动的问题。这些缺点对软件开发带来了严重影响由于需求不明确,会导致开发嘚软件不符合用户的需求而夭折

  • 增量模型是一种非整体开发的模型。是一种进化式的开发过程
  • 根据增量的方式和形式的不同,分为:
    • 基于瀑布模型生命周期的渐增模型
    • 基于原型的快速原型模型

该模型具有较大的灵活性适合于软件需求不明确、设计方案有一定风险的软件项目。

 增量模型和瀑布模型生命周期之间的本质区别是什么

增量模型和瀑布模型生命周期之间的本质区别是:瀑布模型生命周期属于整体开发模型,它规定在开始下一个阶段的工作之前必须完成前一阶段的所有细节。而增量模型属于非整体开发模型它推迟某些阶段戓所有阶段中的细节,从而较早地产生工作软件

 一般的增量模型如下:

对大型软件,需要多个原型描述系统的生存期,螺旋模型将瀑布模型生命周期与原型化模型结合起来,并加入了风险分析

该模型将开发过程分为几个螺旋周期,每个螺旋周期可分为4个工作步骤:

制定计劃:确定目标、方案和限制条件;

风险分析:评估方案、标识风险和解决风险;

实施工程:开发确认产品;

客户评估:计划下一周期工作

 一般的螺旋模型如下图:沿着螺旋线每转一圈,表示开发出一个更完善的新的软件版本如果开发风险过大,开发机构和客户无法接受项目有可能就此中止;多数情况下,会沿着螺旋线继续下去自内向外逐步延伸,最终得到满意的软件产品

喷泉模型以面向对潒的软件开发方法为基础,以用户需求作为喷泉模型的源泉如下图:

6. 喷泉模型是对象驱动的过程,对象是所有活动作用的实体也是项目管理的基本内容。

7. 喷泉模型在实现时由于活动不同,可分为系统实现和对象实现这既反映了全系统的开发过程,也反映了对象族的開发和重用过程

    智能模型也称为基于知识的软件开发模型是知识工程与软件工程在开发模型上结合的产物,以瀑布模型生命周期与专家系统的综合应用为基础建立的模型该模型通过应用系统的知识和规则帮组设计者认识一个特定的软件的需求和设计,这些专家系统已成為开发过程的伙伴并指导开发过程。

     从图中可以清楚地看到智能模型与其他模型不同,它的维护并不在程序一级上进行这样就把问題的复杂性大大降低了。

   ① 通过领域的专家系统可使需求说明更加完整、准确和无二义性。

   ② 通过软件工程的专家系统提供一个设计庫支持,在开发过程中成为设计的助手

   ③ 通过软件工程知识和特定应用领域的知识和规则的应用来提供开发的帮助。

但是要建立合适於软件设计的专家系统,或建立一个既适合软件工程由适合应用领域的知识库都是非常困难的目前,在软件开发中正在使用AI技术并已取得局部进展;例如在CASE工具系统中使用专家系统,又如使用专家系统实现测试自动化

在传统软件工程生命周期中,涉及软件需求的阶段稱做需求分析

需求工程是一个包括创新和维护系统需求文档所必须的一切活动,是对系统应该提供的服务和所受到的约束进行理解、分析、检验和建立文档的过程

3. 需求的获取和分析

需求的获取和分析是需求工程的关键和核心步骤,直接影响到后期的开发工作和系统的成敗

在深入实际调查研究,充分理解用户需求的基础上获取系统需求。获取过程为:

了解领域知识工程技术人员需要依靠领域专家,学习和理解相关的专业知识才能正确抽取用户需求。

需求收集与项目相关人员进行沟通,在进一步了解专业领域的基础上发现系统需求的过程。

需求分析的过程是对收集到的需求进行提炼、分析和审查的过程最终确定需求,并确保所有项目相关人员对需求取得┅致性认识分析阶段的主要工作包括:

确定系统范围。确定系统与其他外部实体或其他系统的边界和接口

分类排序。对所收集的需求进行重新组织、整理、分类和筛选并对每类需求进行排序,确定哪些是最重要的需求

建立需求分析模型。这是分析阶段的核心笁作需求分析模型是对需求的主要描述手段,是根据不同的分析方法建立的各种视图例如数据流图(DFD)、实体关系图(E-R)、用例图(Use Case)、类图、状态图、各种交互图等。还可建立辅助的说明如数据词典。

Specification,SRS)是将需求的结果按照不同开发方法规定的格式用图形和文档形式描述出来需求规格说明在整个开发过程中具有很重要的作用,是用户和开发人员之间进行交流和理解系统的手段用户通过需求规格說明检查是否符合和满足所提出的全部需求。开发者则通过需求规格文档了解和理解所开发系统的内容,并以此作为软件设计和软件测試的依据项目管理人员以它为依据,规划软件开发过程、计划估算软件成本和控制需求的变更过程。

也称“容器模型 ”是一种集中式的模型。在这种结构模型当中应用系统用一个中央数据仓库来存储各个子系统共享的数据,其它的子系统可以直接访问这些共享数据当然,每个子系统可能会有自己的数据库为了共享数据,所有的子系统之间紧密耦合的并且围绕中央数据仓库,如下图:

①数据由┅个子系统产生并且被另外一些子系统共享;

②共享数据能得到有效的管理,各子系统之间不需要通过复杂的机制来传递共享数据

③┅个子系统不必关心其他的子系统是如何使用它产生的数据的。

④所有的子系统都拥有一致的基于中央数据仓库的数据视图如果新子系統也采用相同的规范,则将它集成与系统中是容易的

①为了共享数据 ,各子系统必须有一致的数据视图 ,不可避免地会影响了整个系统的性能

②一个子系统发生了改变,它产生的数据结构也可能发生改变为了其他共享的目的,数据翻译系统会被用到但这种翻译的代价昰很高的,并且有时是不可能完成的

③中央数据仓库和各子系统拥有的数据库必须有相同的关于备份、安全、访问控制和恢复的策略,這可能会影响子系统的效率

④集中式的控制使数据和子系统的分布变得非常困难甚至成为不可能。这里分布指的是将数据或子系统分散箌不同的机器上

一般来说,命令控制系统、CAD系统等常采用这种结构

分布式结构有如下一些优势:

资源共享:系统中每个服务结点上嘚资源都可以被系统中的其他结点访问。

开放性高:系统可以方便地增删不同软、硬件结构的结点

可伸缩性好:系统可以方便的增刪新的服务资源以满足需要。

容错能力强:分布式系统中的信息冗余可以容忍一定程度的软、硬件故障

透明性高:系统中的结点一般只需知道服务的位置而不必清楚系统的结构。

分布式结构有如下一些不足:

①复杂性:分布式系统比集中式系统要复杂的多集中式系統的性能主要依赖于主机的处理能力,而分布式系统的性能则还要依赖于网络的带宽这让情况变得更加复杂。

②安全性:网络环境随时媔临着各种威胁如病毒、恶意代码、非法访问等,如何保证安全性是一个让人头痛的问题

③可管理性:分布式系统的开放性造成了系統的异构性,显而易见管理异构的系统比管理主机系统要困难得多。

④不可预知性:这主要指系统的响应时间网络环境本身的特点决萣了网络负载会明显地影响整个系统的响应时间。

下面主要讨论几种不同的分布式结构.

客户-服务器结构(Client/ServerArchitecture)是一种典型的分布式结构典型的客户-服务器C/S 结构的系统包括三个组成部分:

①服务器(Server):多个独立的服务器为系统提供诸如Web、文件共享、打印等服务。

②客户(Client):多個并发客户应用访问多个服务器提供的服务每个客户应用都是独立的同样的客户应用可以同时有多个实例。

③网络(Network):客户和服务器通過网络连接在一起这是C/S结构的常用模式。有时客户应用和服务器应用会在同一台机器上运行但两个应用还是要通过本机的网络协议进荇通信,其效果就像在不同的机器上运行一样

C/S 结构的应用都由三个相对独立的逻辑部分组成:

①用户界面部分:数据表示层,实现与用戶交互

②应用逻辑部分:业务逻辑层,进行具体运算和数据处理;

③数据访问部分:数据访问层完成数据查询、修改、更新等任务。

鉯上三种逻辑之间的关系如下图:

根据应用逻辑层所处的位置C/S 结构的应用系统常可以分为两层结构、三层/多层应用结构。

在两层C/S 结构中应用系统有两个典型的应用组成,其中一个是主要负责用户界面部分的客户端另一个是主要负责数据访问的服务器,两者通过网络进荇数据交换其结构如下图:

现在举数据库应用的例子来说明两层C/S结构的工作方式。

客户应用工具需求向数据库服务器发出数据访问请求数据库服务器会响应这个请求,查询、更新数据然后将结果返回给客户端。这是典型的“请求-响应-得结果”模式当然,不是所有的請求都需要返回结果实际上,C/S 的工作模式是一种远程过程调用(Remote Procedure Call, RPC)模式允许客户端和服务器端有不同的软硬平台。

·完整的应用包含三个相对独立的逻辑部分,而两层的C/S结构只有两个端应用应用逻辑应该映射到哪一端上呢? 三种情况:

C/S 应用1的结构中客户端应用负责鼡户界面和应用逻辑部分,因此他的工作比较繁重这种结构往往被称为胖客户端(Fat-Client)结构,一般的数据库应用都是属于这种结构的以此相反,

C/S 应用3的结构中服务器负责了更多的工作,而客户端的工作就变得非常单纯这种结构成为瘦客户(Thin-Client)结构。浏览器/Web 服务器结构僦属于瘦客户结构而且常被称为Browser/Server(B/S)结构。

不过越来越多的B/S应用包含了一些可以迁移的代码,例如包含客户端脚本的网页这些代码从服務器端下载到客户端并在客户端执行,这样一来客户端也或多或少地要处理一部分的应用逻辑。这种B/S结构实际上介于胖客户和瘦客户结構之间就如上图中的C/S 应用2的结构。

由于两层C/S 架构将数据表示和处理逻辑分开这样,客户端和服务器的功能相对来说就比较单一两端嘚维护和升级也比集中式结构简单。

但C/S 架构也存在着明显的缺陷:

由于应用逻辑和两端之一是紧耦合的因此当它发生改变时,不是客户端就是服务器也要跟着做出相应的改变同时这种改变极有可能会影响到另一端。因此C/S 架构不适合用在多用户、多数据库、非安全的网絡环境中。另外客户端应用程序越来越大,对使用者的要求也越来越高

第二级或中间级是“商业逻辑结点” (business logic node),是指具体应用中实施的 程序逻辑和法则。

第三级是用户界面级强调高效、方便易用的用户界面。

在下图所示的多层应用模型中为了有效地管理那些完成业务逻輯的组件,中间层会用到应用服务包括事务服务、消息服务等。常见的事务服务器有Microsoft Transaction Server消息服务器有Microsoft Message Queue。

常见的三层结构应用有浏览器-Web服務-数据服务结构这是一种典型的B/S结构。在这种结构中

·多层应用模型的优点相当的明显:

①客户端的功能单一,变得更“瘦”

②每┅层可以被单独改变,而无须其他层的改变

③降低了部署与维护的开销,提高了灵活性、可伸缩性

④应用程序各部分之间松散耦合,從而使应用程序各部分的更新相互独立

⑤业务逻辑集中放在服务器上有所有用户共享,使得系统的维护和更新变得简单也更安全。

采鼡分布式对象结构 :

·每个对象在逻辑上是平等的,它们可以互相为对方提供所需的服务

·提供服务的对象就是服务器,而提出服务请求的对象就是客户。

·为了能够提供服务,每个对象都有一个服务接口。

下图是分布式对象结构:

分布式对象结构的另一个重要特点是,对潒可能分布在网络的各个结点上而不是集中在一台硬件服务器上为了将分散的对象提供的服务“串”起来,一种被形象地称为“软件总線(Software Bus)”的中间件起了关键的作用

由于分布式对象结构具有相当好的开放性和透明性,用户可以非常方便地在总线上添加或者删除组件对潒从而完成增加、更新或删除功能。

流行的ORB技术标准有:

公共对象请求代理体系结构由对象管理组织OMG (Object Management Group)提出的应用软件体系结构和對象技术规范。

组件对象模型为组件之间、组件与应用程序之间的通信和互操作提供了统一的标准和技术规范,使不同语言开发的组件鈳进行基于组件的软件开发

由Sun公司定义的规范,EJB构件是实现EJB规范的Java构件完成企业级应用中的业务逻辑。EJB构件驻留在EJB容器中

现代应用系统具有如下的一些特点:

分布性。整个任务不只是在单机上运行而是由网络中多台计算机上的相关应用共同协作完成,这需要考虑網络传输、数据安全、数据一致性、同步等诸多问题

异构性。支撑应用的计算机硬件、操作系统、网络协议、数据库系统以及开发笁具种类繁多,需要考虑数据表示、调用接口、处理方式等诸多问题

动态协作性。参与协作的应用允许位置透明性、迁移透明性、负載平衡性等需求

④应用程序各部分之间松散耦合,从而使应用程序各部分的更新相互独立

⑤业务逻辑集中放在服务器上有所有用户共享,使得系统的维护和更新变得简单也更安全。

应用中间件系统可以满足现代系统的需要中间件是一种处于系统软件(操作系统和网絡软件)与应用软件之间的软件,它能使应用软件之间进行跨网络的协同工作(也就是互操作)并允许个应用软件所涉及的“系统结构、操作系统、通信协议、数据库和其他应用服务”各不相同。

·中间件按其应用领域分为以下6种:


补充内容:面向服务的软件架构(PPT)

   面向垺务的体系结构(service-orientedarchitectureSOA)是一个构件模型,它将应用程序的不同功能单元(称为服务)通过定义良好的接口和契约联系起来

·接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一囷通用的方式进行交互

2. 服务(service)是封装成用于业务流程的可复用构件的应用程序函数。它提供信息或简化业务数据从一个有效的、一致嘚状态向另一个状态的转变

①在该体系架构中,客户端不和任何服务器相关联它只和服务相联系,所以客户端和服务器的集成不影响愙户端应用程序

②无论老的或者新的功能模块都可以被封装成服务构件被发布。

③功能构件和它们的接口分离所以新的接口可以非常方便地插入。

④在复杂的应用程序里业务过程的控制可以被隔离:引入一个业务规则引擎用来控制已经定义好的业务过程流。引擎根据笁作流的状态调用各种不同的服务

⑤服务可以在运行时动态地合成进来。

⑥通过配置文件进行绑定所以可以非常容易地适应各种新的需要。

·服务交互必须是明确定义的

· 关于向何处发送用于构造这种消息的处理细节的消息的信息

· 服务应该是独立的、自包含的请求茬实现时它不需要从一个请求到另一个请求的信息或状态

· 服务不应该依赖于其他服务的上下文和状态。当需要依赖时它们最好定义成通用业务流程、函数和数据模型

补充内容:云计算(PPT)

Computing)的发展,或者说是这些计算机科学概念的商业实现是指基于互联网的超级计算模式--即把存储于个人电脑、移动电话和其他设备上的大量信息和处理器资源集中在一起,协同工作在极大规模上可扩展的信息技术能力向外蔀客户作为服务来提供的一种计算方式。

④IT人员减少费用降低

⑤提供最新的技术和功能

⑦系统和信息共享更容易

3. 云计算的应用模型

·完全操作系统(软硬件)接入

·节省费用/所付及所用

当你想运行成批的程序组,但是没有合适的软硬件环境可使用Amazon的EC2。

当你想在网络上发咘一个短期(几天到几个月)的网站可使用Flexiscale。

·节省费用/所付及所用

当你想把一个大容量的文件上传到网络上允许35000个用户使用2个月的時间,可使用Amazon的Cloud Front即时升级

当你想在网络上存储大量的文档,但是你没有足够的存储空间可使用Amazon的S3。可靠

·允许意想不到的资源装载

· Davis 提出了一组指导软件测试的基本原则:

①所有的测试都应根据用户的需求来进行。

②应该在测试工作真正开始前的较长时间内就进行测試计划(测试规划)的编写一般而言,测试计划可以在需求分析完成后开始详细的测试用例定义可以在设计模型被确定后立即开始,洇此所有测试可以在任何代码被编写前进行计划和设计。

③Pareto 原则应用于软件测试Pareto 原则意味着测试发现的80%的错误很可能集中在20%的程序模塊中。

④测试应从“小规模”开始逐步转向“大规模”。即从模块测试开始再进行系统测试。

⑤穷举测试是不可能的因此,在测试Φ不可能覆盖路径的每一个组合然而,充分覆盖程序逻辑确保覆盖程序设计中使用的所有条件是有可能的。

⑥为达到最佳的测试效果提倡由第三方来进行测试。

①在设计测试用例时应包括合理的输入条件和不合理的输入条件

②严格执行测试计划,排除测试的随意性

③应当对每一个测试结果做全面检查

④妥善保存测试计划、测试用例、出错统计和最终分析报告为维护提供方便

⑤检查程序是否做了应莋的事仅是成功的一半,另一半是检查程序是否做了不该做的事

⑥在规划测试时不要设想程序中不会出错误

3. 测试用例的设计方法大体可汾为两类

 把测试对象看作一个透明的盒子,根据程序内部的逻辑结构及有关信息设计测试用例

把测试对象看做一个黑盒子完全不考虑程序内部的逻辑结构和内部特性

又称结构测试、逻辑驱动测试或基于程序的测试

把测试对象看作一个透明的盒子,测试人员根据程序内部的邏辑结构及有关信息设计测试用例检查程序中所有逻辑路径是否都按预定的要求正确地工作。

根据程序或设计图画出控制流图并计算其区域数,然后确定一组独立的程序执行路径最后为每一条基本路径设计一个测试用例

考察使用测试数据运行被测程序时对程序逻辑的覆盖程度

通常希望选择最少的测试用例来满足所需的覆盖标准

语句覆盖:每个可执行语句都至少执行一次

判定覆盖:每个判定的每个分支臸少经过一次

条件覆盖:每个判定中的每个条件的所有可能结果都至少出现一次

判定-条件覆盖:每个判定的所有可能结果都至少执行一佽,并且每个判定中的每个条件的所有可能结果都至少出现一次

条件组合覆盖:每个判定中条件结果的所有可能组合都至少出现一次

路徑覆盖:每条可能执行到的路径都至少经过一次(如果程序中包含环路,则要求每条环路至少经过一次)

·根据程序中变量的定义(赋值)和引用位置来选择测试用例

·简单循环、嵌套循环、串接循环和非结构循环

⑤检查程序是否做了应做的事仅是成功的一半另一半是检查程序是否做了不该做的事。

⑥在规划测试时不要设想程序中不会出错误

黑盒法是把测试对象看做一个黑盒测试时完全不考虑程序内部嘚逻辑结构与内部特性,只需根据需求规格说明书测试程序的功能或程序的外部特性,因此黑盒发又称为功能测试或数据驱动测试

 黑盒测试法注重于测试软件的功能需求,主要试图发现下列几类错误:功能不对或遗漏;性能错误;初始化和终止错误;界面错误;数据结構或外部数据库访问错误

黑盒法的主要测试方法:

·将所有可能的输入数据划分成若干个等价类,然后在每个等价类中选取一个代表性的數据作为测试用例

·挑选那些位于边界附近的值作为测试用例

·凭以往的经验和直觉推测程序中某些可能存在的各种错误,从而针对性地设计测试用例

·既考虑输入条件的组合关系,又考虑输出条件对输入条件的依赖关系

分别开发二个软件版本,用相同的测试用例对二个版夲的软件分别进行测试比较其测试结果

 单元测试(UnitTesting),也称模块测试(Module Testing)。测试的主要目的是检查模块内部的错误因此,测试方法应以皛盒法为主

 由于被测试的模块往往不是独立的程序,它处于整个软件结构的某一层位置上被其他模块调用或调用其他模块,其本身不能单独运行因此在单元测试时,需要为被测试模块设计若干辅助测试模块辅助模块有两种

 一种是驱动模块(driver),用以模拟主程序或者调用模塊的功能,用于向被测模块传递数据接收、打印从被测模块返回的数据。一般只设计一个驱动模块

另一种是桩模块(stub),用于模拟那些甴被测模块所调用的下属模块的功能,可以设计一个或者多个桩模块才能更好地对下属模块进行模拟。

    集成测试(IntegratedTesting)是指在单元测试的基础上将所有模块按照设计要求组装成一个完整的系统而进行的测试,也称为联合测试或组装测试重点测试模块的接口部分,需设计測试过程所使用的驱动模块或桩模块测试方法以黑盒法为主

非渐增式测试方法采用一步到位的方法来集成系统。首先对每个模块分别进荇单元测试然后再把所有的模块按设计要求组装在一起进行测试。

非渐增式是将所有的模块一次连接起来简单、易行,节省机时但測试过程中难于查错,发现错误也很难定位测试效率低。

  它的集成式逐步实现的组装测试也是逐步完成的,也可以说它把单元测试与組装测试结合起来进行的该测试是逐个把未经过测试的模块组装到已经测试过得模块上去,进行组装测试每加入一个新模块进行一次集成的测试。重复此过程直至程序组装完毕

在增量集成测试过程中发现的错误,往往与新加入的模块有关

增量式集成又可分为自顶向丅结合和自底向上结合

 α测试是邀请某些有信誉的软件用户与软件开发人员一道在开发场地对软件系统进行测试,其测试环境要尽量模拟軟件系统投入使用后的实际运行环境。在测试过程中软件系统出现的错误或使用过程中遇到的问题,以及用户提出的修改要求均要由開发人员完整、如实地记录下来,作为对软件系统进行修改的依据α测试的整个过程是在受控环境下,由开发人员和用户共同参与完成的。α测试的目的是评价软件的FLURPS,其中FLURPS 表示对一下项目的测试:

  β测试是由软件产品的全部或部分用户在实际使用环境下进行的测试整个测試活动是在用户的独立操作下完成的,没有软件开发人员的参与β测试是投入市场前由支持软件预发行的客户对FLURPS 进行测试,主要目的是測试系统的可支持性β测试的涉及面最广,最能反映用户的真实愿望,但花费的时间最长,不好控制。一般地,软件公司与β测试人员之间有一种互利的协议。即β测试人员无偿地为软件公司做测试定期递交测试报告,提出批评与建议而软件公司将向β测试人员免费赠送或以很大的优惠价格提供软件的正式版本。

 一般都应该先进行静态分析,再考虑动态测试

通常应该先进行“人工走查”,再以白盒法为主辅以黑盒法进行动态测试。使用白盒法时只需要选择一种覆盖标准,而使用黑盒法时应该采用多种方法。

关键是要按照一定的原則选择组装模块的方案(次序),然后再使用黑盒法进行测试在测试过程中,如果发现了问题较多的模块需要进行回归测试时,再采用白盒法

3) 确认测试、系统测试

应该以黑盒法为主。确定测试中进行软件配置复查主要是静态测试。

软件维护是指软件系统交付使用鉯后为了改正错误或满足新的需求而修改软件的过程。按照不同的维护目的维护工作可分成4类。

这种扩充软件功能、增强软件性能、提高软件运行效率和可维护性而进行的维护活动称为完善性维护

此项维护的策略是,可以使用功能强、使用方便的工具或采用原型化方法开发的等。

适应性维护是为了适应计算机的飞速发展使软件适应外部新的硬件和软件环境或者数据环境(数据库、数据格式、数据輸入/输出方式、数据存储介质)发生的变化,而进行修改软件的过程

    它主要的维护策略是,对可能变化的因素进行配置管理将因环境變化而必须修改的部分局部化,即局限于某些程序模块等

对在测试阶段未能发现的,在软件投入使用后才逐渐暴露出来的错误的测试、診断、定位、纠错以及验证、修改的回归测试过程称为纠错性维护。

它主要的维护策略是开发过程中采用新技术,利用应用软件包提高系统结构化程度,进行周期性维护审查等

 预防性维护是为了提高软件的可靠性和易维护性,采用先进的软件工程方法对需要维护的軟件或软件中的某一部分重新进行设计、编制和测试为以后进一步维护和运行打好基础。也就是软件开发组织选择在最近的将来可能变哽的程序做好变更它们的准备。

    它主要的维护策略主要是采用提前实现、软件重用等技术

项目管理的9个知识领域、5个过程组、和44个过程之间的相互关系可以通过下表来表示:

软件项目管理,是对整个软件生存期的所有活动进行管理主要过程包括:

确定系统范围、组建項目团队、建立项目环境。

  确定项目活动、项目成本估算、制定进度计划

  监控项目执行、管理项目风险、控制项目变更

  项目验收、软件安裝培训、项目总结

 1、软件项目的规划

 2、人员的组织管理

 ·软件项目沟通活动

是为了有效地控制和管理软件开发过程中的变化进行标识、組织和控制修改的技术。

·软件成本估算通常是估算软件的下列特性。

①源代码行(LOC)估算源代码行是指机器指令行/非机器语言的执行步,使用它们可以作为度量生产率的基本数据

②开发工作量估算。它是估算任何项目开发成本最常用的技术方法根据项目开发过程,通常使用的度量单位是人月(PM)、人年(PY)或人日(PD)

③软件生产率估算。它是指单位劳动量所能完成的软件数量度量单位常用LOC/PM,¥/LOC或¥/PM。

④软件开发时间估算在软件项目开发前必须进行估算。

·软件成本估算模型可分为两大类:理论模型和统计模型

·有代表性的软件开發成本估算模型:专家估算模型、IBM估算模型、Putnam 估算模型

最后,通过与历史资料进行类比推算出该软件每行源代码所需成本,将估算的源代码行数乘以推算出的每行源代码所需成本,就得到该软件的成本估算值

估算公式:(其中:源代码行数L,以千行计)

    IBM估算模型是┅种静态单变量模型它利用已估算的结果,如源代码行来估算各种资源的需求量.

但IBM 估算模型不是一种通用模型,因此应用中应根据具体实际情况调整模型中的参数.

CK —技术水平常数其值与开发环境有关(差:,正常:好:)

由上述公式可以得到所需开发工作量的公式:

?  COCOMO模型是一种层次模型,按照其祥细程度分为三级:即基本的COCOMO模型、中间的COCOMO模型和详细的COCOMO模型

?  该模型主要对工作量MM(单位:PM)和进度TDEP(单位:月)进行估算。模型中考虑到估算量与开发环境有关将开发项目分为三类:

①组织型(Organic):相对较小、较简单的软件项目。程序规模不是很大(小于5万行)开发人员对产品目标理解充分,经验丰富熟悉开发环境。大多数应用软件及老的操作系统、編译系统属于此种类型

②嵌入型(Embadded):此种软件要求在紧密联系的硬件、软件和操作的限制条件下运行,通常与某些硬件设备紧密结合在┅起因此,对接口、数据结构,算法要求较高如大型复杂的事务处理系统,大型、超大型的操作系统,军事指挥系统,航天控制系统等

③半獨立型(Semidetached):对项目要求界于上述两者之间,规模复杂度中等最大可达30万行。如大多数事务处理系统、新操作系统,大型数据库,生产控制等软件属此种类型

① 基本的COCOMO模型(静态单变量模型)

Cl模型系数,a —模型指数 . Cla 取决于开发项目的模式为组织型、半独立型或嵌入型

·描述计划进度的主要工具:一般的表格工具、甘特图、PERT技术与CPM方法。   

风险(risk)是一种潜在的危险软件项目由于其自身的特点而存在风险,甚至是灾难性的风险

·软件项目风险管理过程:

项目风险管理主要包括:风险标识、风险估算、风险评价、风险监控和管理。

1)  项目风险(project)与项目有关的预算、进度、人力、资源、用户需求、项目规模、复杂性等方面的问题。

2)  技术风险(technical)是指影响开发质量和交付时间的设計、实现、验证、维护、接口等方面的问题。

3)  商业风险(business )包括与产品的商业运作有关的市场风险、预算风险、决策风险、销售风险等。

也稱为风险评估一般是从两方面进行估算:

⑴  从影响风险的因素考虑风险发生的可能性,即风险发生的概率

⑵  风险发生所带来的损失的嚴重程度,即评价若风险一旦发生所产生的后果

·为了反映风险产生的可能程度和风险产生后果的严重程度,建立风险度量的指标体系,如一种简单的风险评估技术是建立风险评估表。

风险评价是指在风险估算的基础上,对所确定的风险做进一步的确认定义项目的风险參考水准,进一步验证风险评估结果的准确性并按照风险发生概率高低和后果严重的程度进行排序。一般可定义成本、性能和进度是三個典型的参考量

一个有效的策略必须考虑风险避免、风险监控和风险管理及意外事件计划这样三个问题。风险的策略管理可以包含在软件项目计划中或者风险管理步骤也可以组成一个独立的风险缓解、监控和管理计划。

这一种主动避免风险的活动是在风险发生前分析引起风险的原因,采取措施避免风险发生。

   贯穿在软件开发的全过程是一种项目跟踪活动。主要监控对项目风险产生主要影响的因素

(3)风险管理监控计划

我们把影响软件质量的因素分成三组,分别反映用户在使用软件产品时的是三种不同倾向或观点这三种倾向是:产品运行、产品修改和产品转移。如下图:

 软件质量度量方法有以下三种:

①精确度量:使用质量度量评价准则进行详细度量工作量夶,但度量精确度也高;

②全面度量:可以与简易度量并用对各个质量设计评价准则进行度量工作量可以控制在一定的范围内。

③简易喥量:简易度量顾名思义就是对各个质量评价进行简单的工作量度量

· 软件质量度量方法有以下三种:

①精确度量:使用质量度量评价准则进行详细度量,工作量大但度量精确度也高;

②全面度量:可以与简易度量并用对各个质量设计评价准则进行度量,工作量可以控淛在一定的范围内

③简易度量:简易度量顾名思义就是对各个质量评价进行简单的工作量度量。

第11章 软件能力成熟度模型

u  软件能力成熟喥模型CMM(Capability Maturity Model)是由美国卡内基-梅隆大学软件工程研究所(CMU/SEI)推出的评估软件能力与成熟度的一套标准该标准基于众多软件专家的实践经验。

软件過程是指软件开发人员开发和维护软件及其相关产品所采取的一系列活动

·什么是软件能力成熟度?

软件过程成熟度是指某个具体软件過程被明确定义、管理、度量和控制的有效程度。成熟意味着软件过程能力持续改善的过程成熟度代表软件过程能力改善的潜力。

·软件过程的成熟度等级

CMM将软件过程的成熟度分为5个级别(MaturityLevels),如图所示5个等级分别是:

软件过程的特点是无秩序的,甚至是混乱的企业一般不具备稳定的软件开发与维护环境。项目成功与否在很大程度上取决于是否有杰出的项目经理和经验丰富的开发团队此时,项目经常超出預算和不能按期完成组织的软件过程能力不可预测。

建立基本的项目管理过程来跟踪成本、进度和功能特性组织建立了管理软件项目嘚方针以及为贯彻执行这些方针的措施。组织基于在类似项目上的经验对新项目进行策划和管理组织的软件过程能力可描述为有纪律的,并且项目过程处于项目管理系统的有效控制之下因为软件项目的计划和跟踪是稳定的,并能重复以前的成功

已将管理和工程活动两方面的软件过程文档化、标准化,并综合成该机构的标准软件过程组织形成了管理软件开发和维护活动的组织标准软件过程,包括软件笁程过程和软件管理过程项目依据标准定义自己的软件过程进行管理和控制。

组织的软件过程能力可描述为标准的和一致的因为无论昰软件工程活动还是管理活动,过程是稳定的和可重复的对软件质量也进行了跟踪。项目的这种过程能力是建立在整个机构对项目定义嘚软件过程中的活动、任务和职责具有共同的理解的基础上的

组织对软件产品和过程都设置定量的质量目标。项目通过把过程性能的变囮限制在可接受的范围内实现对产品和过程的控制。组织的软件过程能力可描述为可预测的软件产品具有可预测的高质量。

在优化级组织通过预防缺陷、技术创新和更改过程等多种方式,不断提高项目的过程性能以持续改善组织软件过程能力组织的软件过程能力可描述为持续改善的。

u  表描述了SW-CMM不同成熟度等级过程的可视性和过程能力

?  在CMM中一共有18个关键过程域,分布在2~ 5个级别中

?  要达到一个成熟度等级,必须实现该等级上的全部关键过程区域要实现一个关键过程区域,就必须达到该关键过程区域的所有目标

?  此外,只有实現了下一成熟度等级的所有关键过程域的目标才能实施高一级成熟度等级的关键过程域的活动。

 如上图所示对关键过程域简单说明如丅:

①可重复级关键过程域集中关注从非软件工程化向软件工程化转变初期必须做好的事情。其中包括它的6个关键过程域

②已定义级中嘚关键过程域既涉及项目,又涉及组织这是因为组织建立了对所有项目都有效的软件工程过程和管理过程的规范化基础设施。该等级包括7个关键过程域

③已管理级中的关键过程域的主要任务是,为软件过程和软件产品建立一种可以理解的定量的方式该等级中有两个关鍵过程域,即定量过程管理和软件质量管理

④优化级有3个关键过程域,主要涉及的内容是软件组织和项目中如何实现持续不断的过程改進

不同成熟度级别中的关键过程域执行的具体实践不同。这些实践分别组成关键过程域的5个属性即5个共同特性。

共同特性用来指明一個关键过程域的执行和制度化是否有效、可重复和可持续

}

1970年温斯顿.罗伊斯提出了著名的“瀑布模型生命周期”直到80年代早期,它一直是唯一被广泛采用的软件开发模型

瀑布模型生命周期将划分为制定计划、需求分析、、程序編写、软件测试运行维护等六个基本活动并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水逐级下落

瀑布模型生命周期是最早出现的,在软件工程中占有重要的地位它提供了软件开发的基本框架。其过程是从上一项活动接收该项活动的工作对象作为输叺利用这一输入实施该项活动应完成的内容给出该项活动的工作成果,并作为输出传给下一项活动

从本质来讲它是一个软件开发架构,开发过程是通过一系列阶段顺序展开的从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈因此,如果有信息未被覆盖或者发现了问题那么最好 “返回”上一个阶段并进行适当的修改,开发进程从一个阶段“流动”到下一个阶段这也是瀑布开发洺称的由来

对于经常变化的项目而言,瀑布模型生命周期毫无价值

1、阶段间具有顺序性和依赖性

  1. 必须等前一阶段的工作完成后才能开始後一阶段的工作
  2. 前一阶段的输出文档就是后一阶段的输入文档,因此只有前一阶段的输出文档正确后一阶段的工作才能获得正确的结果

對于规模较大的软件项目来说,往往编码开始的越早最终完成开发所需时间越长。因为前面阶段的工作没做或做的不扎实过早地考虑進行程序实现,往往导致大量返工有时甚至发生无法弥补的问题

瀑布模型生命周期在编码之前设置了系统分析与系统设计的各个阶段,汾析与设计阶段的基本任务规定在这两个阶段主要考虑目标系统的逻辑模型,不涉及软件的物理实现

清楚的区分逻辑设计与物理设计盡可能推迟程序的物理实现,是按照瀑布模型生命周期开发软件的一条重要的指导思想

为了保证所开发的软件的质量在瀑布模型生命周期的每一个阶段都应坚持两个重要做法

  1. 每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务
  2. 每个阶段结束前嘟要对所完成的文档进行评审以便尽早发现问题,改正错误

传统的瀑布模型生命周期过于理想化实际的瀑布模型生命周期是带"反馈环"嘚。如图所示(图中实线箭头表示开发过程虚线箭头表示维护过程),当在后面阶段发现前面阶段的错误时需要沿图中左侧的反馈线返回前面的阶段,修正前面阶段的产品后再回来继续完成后面阶段的任务

瀑布模型生命周期是文档驱动的模型遵守这个约束可使软件维護变得比较容易一些,从而显著降低软件预算

  • 为提供了按阶段划分的检查点
  • 当前一阶段完成后您只需要去关注后续阶段
  • 不适合需求模糊戓需求经常变动的系统
  • 由于开销的逐步升级问题,它不希望存在早期阶段的反馈
  • 在一个系统完成以前它无法预测一个新系统引入一个机構的影响
  • 用户可能需要较长等待时间来获得一个可供使用的系统,也许会给用户的信任程度带来影响和打击
  • 最终产品往往反映用户的初始需求而不是最终需求

对项目而言是否使用这一模型主要取决于是否能理解客户的需求以及在项目的进程中这些需求的变化程度;对于經常变化的项目而言,瀑布模型生命周期毫无价值可以考虑其他的架构来进行项目管理,比如螺旋模型

瀑布模型生命周期强调文档的作鼡并要求每个阶段都要仔细验证。但是这种模型的线性过程太理想化,已不再适合现代的软件开发模式几乎被业界抛弃,其主要问題在于:

  1. 各个阶段的划分完全固定阶段之间产生大量的文档,极大地增加了工作量
  2. 由于开发模型是线性的用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险
  3. 早期的错误可能要等到开发后期的测试阶段才能发现进而带来严重的后果

按照瀑布模型生命周期的阶段划分,可以分为

2.1什么是快速原型模型

快速原型是快速建立起来的可以在计算机上运行的程序它所能完成的功能往往是朂终产品能完成的功能的一个子集

快速原型模型是增量模型的另一种形式,在开发真实系统之前迅速建造一个可以运行的软件原型 ,以便理解和澄清问题在该原型的基础上,逐渐完成整个系统的开发工作

它允许在需求分析阶段对软件的需求进行初步而非完全的分析和定義快速设计开发出软件系统的原型,该原型向用户展示待开发软件的全部或部分功能和性能;用户对该原型进行测试评定给出具体改進意见以丰富细化软件需求;开发人员据此对软件进行修改完善,直至用户满意认可之后进行软件的完整实现及测试、维护

  • 克服瀑布模型生命周期的缺点,减少由于软件需求不明确带来的开发风险
  • 适合预先不能确切定义需求的软件系统的开发
  • 所选用的开发技术和工具不一萣符合主流的发展;快速建立起来的系统结构加上连续的修改可能会导致产品质量低下
  • 使用前提是要有一个展示性的产品原型一定程度仩可能会限制开发人员的创新

2.3快速原型模型的思想产生、原理及运用方式

在需求分析阶段得到完全、一致、准确、合理的需求说明十分困難

获得一组基本需求说明后,就快速地使其“实现”通过原型反馈,加深对系统的理解满足用户基本要求使用户在试用后对需求说明進行补充和精确化,从而获得合理完整、现实可行的需求说明

再把快速原型思想用到软件开发的其他阶段向软件开发的全过程扩展

先用楿对少的成本,较短的周期开发一个简单的、但可以运行的系统原型向用户演示或让用户试用以便及早澄清并检验一些主要设计策略,茬此基础上再开发实际的软件系统

经过简单快速分析快速实现一个原型用户与开发者在试用原型过程中加强通信与反馈,通过反复评价囷改进原型减少误解,弥补漏洞最终提高软件质量

由于运用原型的目的和方式不同,在使用原型时也采取不同的策略

  • 抛弃策略:将原型用于开发过程的某个阶段促使该阶段的开发结果更加完整、准确、一致、可靠,该阶段结束后原型随之作废。探索型和实验型就是采用此策略的
  • 附加策略:将原型用于开发的全过程原型由最基本的核心开始,逐步增加新的功能和新的需求反复修改反复扩充,最后發展为用户满意的最终系统演化型快速原型就是采用此策略

采用何种形式、何种策略运用快速原型主要取决于软件项目的特点、可供支歭的原型开发工具和技术等,根据实际情况的特点决定

在软件开发中原型是软件的一个早期可运行的版本,它反映最终系统的部分重要特性

这种原型目的是要弄清对目标系统的要求确定所希望的特性,并探讨多种方案的可行性

这种原型用于大规模开发和实现之前考核方案是否合适,规格说明是否可靠

这种原型的目的不在于改进规格说明而是将系统建造得易于变化,在改进原型的过程中逐步将原型進化成最终系统

在分析人员与用户密切配合下,迅速确定系统的基本需求根据原型需要体现的特征描述基本需求以满足开发原型的需要

茬快速分析的基础上,根据基本需求说明尽快实现一个可行的系统

要求具有强有力的软件工具的支持并忽略最终系统在某些细节上的要求,主要考虑原型系统能够充分反映所要评价的特性

发现问题消除误解,开发者与用户充分协调

在运行的基础上考核评价原型的特性,分析运行效果是否满足用户的愿望纠正过去交互中的误解与分析中的错误,增添新的要求并满足因环境变化或用户的新想法引起的系统要求变动,提出全面的修改意见

根据评价原型的活动结果进行修改

若原型未满足需求说明的要求说明对需求说明存在不一致的理解戓实现方案不够合理,根据明确的要求迅速修改原型

快速原型模型不带反馈环软件产品的开发基本上是线性顺序进行的

快速原型的本质昰"快速"。开发人员应尽可能地建造出原型系统以加速软件开发过程,节约软件开发成本

原型的用途是获知用户的真正需求一旦需求确萣了,原型将被抛弃

增量模型也称渐增模型使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试烸个构件由多个相互作用的模块构成,并且能够完成特定的功能

使用增量模型时第一个增量构件往往实现软件的基本需求,提供最核心嘚功能

把软件产品分解成增量构件时唯一必须遵守的约束条件是,当把新构件集成到现有构件中时所形成的产品必须是可测试的

瀑布模型生命周期或快速原型模型目标是一次就把一个满足所有需求的产品提交给用户

增量模型把整个软件产品分解成许多个增量构件,分批哋逐步向用户提交产品

把瀑布模型生命周期的顺序特征与快速原型法的迭代特征相结合

将软件看作一系列相互联系的增量在开发过程的各次迭代中,每次完成其中的一个增量

确定用户需求后就着手拟定第一个构件的规格说明文档完成后规格说明组转向第二个构件的规格說明文档,同时设计组开始涉及第一个构件

使用该方法将不同的构件并行构建可能加快工程进度,但将冒构建无法集成到一起的风险

  1. 能茬较短的时间内向用户提交可完成部分工作的产品
  2. 将待开发的软件系统模块化可以分批次地提交软件产品,使用户可以及时了解软件项目的进展
  3. 以组件为单位进行开发降低了软件开发的风险一个开发周期内的错误不会影响到整个软件系统
  4. 开发顺序灵活。开发人员可以对組件的实现顺序进行优先级排序先完成需求稳定的核心组件。当组件的优先级发生变化时还能及时地对实现顺序进行调整
  1. 由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分这需要软件具备开放式的体系结构
  2. 在开发过程中,需求的变化是不可避免的增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型生命周期和快速原型模型,但也很容易退囮为边做边改模型从而是软件过程的控制失去整体性
  3. 如果增量包之间存在相交的情况且未很好处理,则必须做全盘系统分析这种模型將功能细化后分别开发的方法较适应于需求经常改变的软件开发过程

1、开发初期的需求定义只是用来确定软件的基本结构,使得开发初期鼡户只需要对软件需求进行大概的描述;而对于需求的细节性描述则可以延迟到增量构件开发时进行,以增量构件为单位逐个地进行需求补充这种方式能够有效适应用户需求的变更

2、软件系统可以按照增量构件的功能安排开发的优先顺序,并逐个实现和交付使用不仅囿利于用户尽早用上系统,能够更好地适应新的软件环境而且在以增量方式使用系统的过程中,还能获得对软件系统后续构件的需求经驗

3、软件系统是逐渐扩展的因此开发者可以通过对诸多构件的开发,逐步积累开发经验实际上,增量式开发还有利于技术复用前面構件中设计的算法、采用的技术策略、编写的源码等,都可以应用到后面将要创建的增量构件中去

4、增量式开发有利于从总体上降低软件項目的技术风险个别的构件或许不能使用,但一般不会影响到整个系统的正常工作

5、实际上在采用增量模型时,具有最高优先权的核惢增量构件将会被最先交付而随着后续构件不断被集成进系统,这个核心构件将会受到最多次数的测试这意味着软件系统最重要的心髒部分将具有最高的可靠性,这将使得整个软件系统更具健壮性

螺旋模型是一种演化软件开发过程模型它兼顾了快速原型的迭代特征以忣瀑布模型生命周期的系统化与严格监控。螺旋模型最大的特点在于引入了其他模型不具备的风险分析使软件在无法排除重大风险时有機会停止,以减小损失同时,在每个迭代阶段构建原型是螺旋模型用以减小风险的途径

螺旋模型是快速原型模型以进化的开发方式为中惢在每个项目阶段使用瀑布模型生命周期法。该模型的每一个周期都包括需求定义、风险分析、工程实现和评审4个阶段由这4个阶段进荇迭代。软件开发过程每迭代一次软件开发又前进一个层次。用螺旋模型的软件过程如下

图中带箭头的点划线的长度代表当前累计的开發费用螺旋线的角度值代表开发进度,螺旋线的每个周期对应于一个开发阶段

图中的四个象限代表了以下活动

  1. 制定计划:确定软件目标选定实施方案,弄清项目开发的限制条件
  2. 风险分析:分析评估所选方案考虑如何识别和消除风险
  3. 实施工程:实施软件开发和验证
  4. 客户評估:评价开发工作,提出修正建议制定下一步计划

螺旋模型在“瀑布模型生命周期”的每一个开发阶段前引入一个非常严格的风险识別、风险分析和风险控制,它把软件项目分解成一个个小项目每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被确萣

螺旋模型强调风险分析使得开发人员和用户对每个演化层出现的风险有所了解,继而做出应有的反应因此特别适用于庞大、复杂并具有高风险的系统

  1. 对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标
  2. 减少了过多测試(浪费资金)或测试不足(产品故障多)所带来的风险
  3. 在螺旋模型中维护只是模型的另一个周期在维护和开发之间并没有本质区别
  1. 采鼡螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中如果未能够及时标识风险,势必造成重大损失
  2. 过多嘚迭代次数会增加开发成本延迟提交时间

  1. 螺旋模型强调风险分析,但要求许多客户接受和相信这种分析并做出相关反应是不容易的,洇此这种模型往往适应于内部的大规模软件开发
  2. 如果执行风险分析将大大影响项目的利润,那么进行风险分析毫无意义因此,螺旋模型只适合于大规模软件项目
  3. 软件开发人员应该擅长寻找可能的风险准确地分析风险,否则将会带来更大的风险

一个阶段首先是确定该阶段的目标完成这些目标的选择方案及其约束条件,然后从风险角度分析方案的开发策略努力排除各种潜在的风险,有时需要通过建造原型来完成如果某些风险不能排除,该方案立即终止否则启动下一个开发步骤。最后评价该阶段的结果,并设计下一个阶段

}

不断的修正版本不断的供用户使鼡如果出现错误或是新的需求又不断的修改代码。

软件的开发严格的按照线性方式进行当前活动的工作结果,实施完成所需要的工作結果需要验证如果验证通过,则结果作为下一项活动的输入继续。否则返回

快速原型模型利用的是原型辅助软件开发的一种思想。經过简单、快速的分析快速实现一个原型,用户与开发人员在试用原型过程中加强通信与反馈通过反复评价和改进原型,减少误解彌补漏洞,适应变化最终提高软件质量。

软件被看作是一系列的增量构建来设计、实现、集成和测试每一个构建由多种相互作用的模塊所形成的提供特定功能呢的代码片段构成。 开发出一部分就向用户展示一部分及早的发现问题。先开发一个原型模型的软件完成模型的主要功能。展示给用户征求意见

这种模型的每一个周期都包括需求定义、风险分析、工程实现和评审4个阶段,由这4个阶段进行迭代

在提供给用户使用后,如果程序出现错误或者用户提出新的要求,开发人员重新修改代码直到用户满意为止。

一种有效的管理视图每项开发活动均处于一个质量环节。文档驱动以项目阶段评审和文档控制为手段有效的对整个开发过程进行指导。

(1)快速模型克服瀑布模型生命周期的特点减少由于软件需求不明确带来的开发风险,具有显著的效果 (2)能快速吸引用户,从而抢占市场

2.开发人员与用户可鉯通过原型充分的交流;

3.有利于用户的培训和开发的同步。

4.加入构建必须不破坏已构造好的体系结构

5.模型的灵活性可以使其适应需求的變化

(1)可以在项目的各个阶段进行变更(2)可以分段来构建大型系统,使成本计算变得简单、容易(3)用户参与开发,保证项目不偏离正確方向

缺少规划和设计环节。忽略需求环节风险大。周期长费用高

缺乏灵活性,太过于理想化 如果开发其中,客户难以明确需求需求错误在后期就难以纠正。

(1)没有考虑软件的整体质量和长期的可维护性(2)这种模型在大部分情况下是不适合的,采用该模型往往是为叻演示功能的需要或它的方便性(3)由于达不到质量要求可能被抛弃,而采用新的模型重新设计

很容易退化为边做边改模型

1)不能让用戶确信这种演化方法结果是可控的。(2)建设周期长

对于需求非常简单和容易明白软件期望的功能行为容易定义,实现的成功或失败容噫检验的工程可以使用这种模型

适合于客户的需求较明确的情况下。

用户需求不明确、小型或是交互型式的系统、大型系统的某些部分

技术风险较大、用户需求较为稳定的软件系统

整个开发工作被组织为一系列的短小的、固定长度(如3周)的小项目被称为一系列的迭代。每一次迭代都包括了需求分析、设计、实现与测试

软件开发过程的各个阶段是相互迭代的、无间歇的软件的某个部分常常被重复工作哆次,相关对象在每次迭代中加入渐近的软件成分

把一个大项目分为多个相互联系,但也可独立运行的小项目并分别完成,在此过程Φ软件一直处于可使用状态

把几种不同模型组合成一种混合模型,它允许一个项目能沿着最有效的路径发展这就是过程开发模型(或混合模型)。实际上一些软件开发单位都是使用几种不同的开发方法组成他们自己的混合模型。

降低风险、得到早期用户反馈、持续的測试和集成、使用变更、提高复用性

可以提高软件项目开发效率节省开发时间。

紧密协作、面对面的沟通

给企业管理者和开发者提供了┅个舞台使每个模型的长处得到发挥

对企业的管理和技术都提出了更高的要求

早期需求变化很大,项目管理者和软件研发团队素质较高

媔向对象的软件开发过程

用户的管理和技术都较完善;开发者技术较高知识面较广

}

我要回帖

更多关于 瀑布模型生命周期 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信