软件工程第二章软件过程.docx_第1页
软件工程第二章软件过程.docx_第2页
软件工程第二章软件过程.docx_第3页
软件工程第二章软件过程.docx_第4页
软件工程第二章软件过程.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章 :软件过程目标:软件工程和软件过程模型的概念;了解3个一般的软件过程模型及何时使用它们;了解软件需求工程,软件开发,测试和进化中所涉及的基本过程活动;理解为什么软件过程要有效地组织以应对软件需求和设计上的变更;了解Rational统一过程是如何集成好的软件过程实践来产生一个可适应的软件过程。所有的软件过程都必须具有4种对软件工程来说是基本的活动。它们是:1. 软件描述:必须定义软件的功能以及软件操作上的约束。2. 软件设计和实现:必须生产符合描述的软件。3. 软件有效性验证:软件必须得到有效性验证,即确保软件是客户所想要的。4. 软件进化:软件必须进化以满足不断变化的客户需要。2.1软件过程模型一 软件过程模型一般有1. 瀑布模型:该模型将基本的过程活动,描述,开发,有效性验证和进化,看成是一些界限分明的独立的过程阶段,例如,需求描述阶段,软件设计阶段,实现阶段,测试阶段,等等。2. 增量式开发:该方法使得描述活动,开发活动和有效性验证活动交织在一起。系统的开发是建立一系列的版本(增量),每个版本添加部分功能到先前的版本中。3. 面向复用的软件工程:该方法使得描述活动,开发活动和有效性验证活动交织在一起。系统开发过程着重于集成这些组件到新系统中,而非从头开发。2.1.1瀑布模型一 瀑布模型中的主要阶段直接映射基本的开发活动:1. 需求分析和定义2. 系统和软件设计3. 实现和单元测试4. 集成和系统测试5. 运行和维护二 适合采用瀑布模型的时候 瀑布模型是与其他工程过程模型相一致的,在它的每个阶段都要生成文档。这使得过程是可见的,项目经理能够根据项目计划监控项目的过程。它的主要问题在于它将项目生硬地分解成这些清晰的阶段。关于需求的责任和义务一定要在过程的早期阶段清晰界定,而这又意味它对用户需求变更的响应较困难。 所以只有在对需求了解的好,而且在系统开发过程中不太可能发生重大改变的时候,适合采用瀑布模型。 瀑布模型的一个重要变形是形式化系统开发。针对系统描述创建其数学模型。然后采用能保持一致性的数学变换对该数学模型进行加工,知道产生可执行代码。 形式化的开发过程,如基于B方法特别适用于有严格安全性,可靠性或信息安全性需求的系统的开发。形式化方法简化了安全用例和信息安全性的需求。基于形式变换的过程通常只用于开发安全性或信息安全性要求极高的一类系统。这需要非常专业的知识和技能。对于大多数系统,在系统开发中应用这一过程不会比其他方法带来明显的成本优势。2.1.2增量式开发一 增量式开发的定义 增量式开发的思想是先开发出一个初始的实现,给用户使用并听取用户的使用意见和建议,通过对多个版本的不断修改直到产生一个充分的系统。描述,开发和有效性验证等活动不是分离的而是交织在一起。同时让这些活动之间都能得到快速地反馈信息传递。 增量式软件开发,是敏捷开发的一个基本部分,对于商务,电子商务和个人系统来说更加适合。增量式开发反映了我们解决问题的方法。我们很少提前制定出完整的问题解决方案,而是逐步地逼近解决方案,当我们意识到错误的时候进行回溯。通过增量式地开发软件,在开发过程中可以更经济,更容易对软件变更做出响应。二 增量式开发较之瀑布模型有3个重要优点:1. 降低了适应用户需求变更的成本。重新分析和修改文档的工作量较之瀑布模型要少很多。2. 在开发过程中更容易得到用户对于已做的开发工作的反馈意见。用户可以评价软件的现实版本,并可以看到已经实现了多少。这比让用户从软件设计文档中判断工程进度要好很多。3. 使更快地交付和部署有用的软件到客户方变成了可能,虽然不是所有的功能都已经包括在内。相比于瀑布模型,用户可以更早地使用软件并创造商业价值。三 从管理的角度来看,增量式方法存在两个问题:1. 过程不可见。管理者需要通过经常性的可交付文档来把握进度,如果系统开发速度太快,要产生反映系统每个版本的文档就很不划算。2. 伴随着新的增量的添加,系统结构在逐渐退化。除非投入时间和金钱用在重构系统结构上以改善软件,否则定期的变更会损坏系统的结构。随着时间的推移,越往后变更系统越困难,而且成本也将逐渐上升。2.1.3面向复用的软件工程一 面向复用的中间阶段是:1. 组件分析:给出需求描述,然后搜寻能满足需求的组件。2. 需求修改:根据的得到的组件信息分析需求,然后修改需求以反映可得到的组件。3. 使用复用的系统设计:设计系统的框架或者重复使用一个已存在的框架。4. 开发和集成:当组件不能买到时就需要自己开发,然后集成这些自己开发的组件和现货组件,使之成为一个整体。二 3种类型的软件组件可能用于面向复用的过程:1. 通过标准服务开发的Web服务,可用于远程调用。2. 对象的集合,作为一个包和组件框架,如.NET或者J2EE等集成在一起。3. 独立的软件系统,通过配置在特定的环境下使用。三 面向复用模型的优势与劣势 面向复用的模型的明显优势是它减少了需要开发的软件数量,从而降低了软件开发成本,同时也降低了开发中的风险。通常也可使软件快速地交付。然而,需求妥协是不可避免的,而且这可能又导致一个不符合用户真正需要的系统。此外,对系统进化的控制也将失效,因为可复用的组件新版本可能是不受机构控制的。2.2过程活动 真正的软件过程是交织着技术,协作,管理等内容的一个活动序列,围绕着一个总的目标,即实现系统的描述,设计,实现和测试。2.2.1软件描述一 软件描述或需求工程是理解和定义系统需要提供哪些服务,以及找出开发和运行中受到哪些约束。需求工程是软件过程中一个特别关键的阶段,这个阶段的错误将不可避免地带来系统设计和实现阶段过程的后续问题。二 需求工程过程有4个主要的阶段:1. 可行性研究:指明现有的软件,硬件技术能否实现用户对新系统的要求。从业务角度来决定系统开发是否划算以及在预算范围内能否开发出来。可行性研究应该是相对来讲花钱少且快速完成的。结果应该得到结论,该系统是否值得进行更细致的分析。2. 需求导出和分析:这是一个通过对现有系统分析,与潜在用户和购买者讨论,进行任务分析等导出系统需求的过程。也可能需要开发一个或多个不同的系统模型和原型。这些都会帮助分析员了解所要描述的系统。3. 需求描述:就是把在分析活动中收集的信息以文档的形式确定下来。在这个文档中有两类需求。用户需求是从客户和最终用户角度对系统需求的抽象描述;系统需求是对系统要提供的功能的详尽描述。4. 需求有效性验证:该活动检查需求的现实性,一致性和完备性。在这个过程中,肯定会发现需求文档中的错误,必须加以改正以解决问题。2.2.2软件设计和实现一 软件开发的实现阶段是把系统描述转换成一个可运行的系统的过程。它总是包含设计和编程,但是,如果用增量式开发方法,可能还包含对软件描述的精炼过程。 软件设计是对实现软件的结构,系统的数据,系统组件间的接口以及所用的算法的描述。 绝大多数软件有面向其他软件系统的接口。二 信息系统设计过程中4个活动:1. 体系结构设计:识别系统总体结构,基本组件(有时候也叫子系统或模块),它们之间的关系以及它们是怎样分布的。2. 接口设计:定义系统组件间的接口。接口的描述必须是无二义的。在有精确接口定义的前提下,组件不必知道其他组件的具体实现即可使用它们。一旦接口描述达成一致意见,组件就可以并行设计和开发了。3. 组件设计:针对每个系统组件设计它的运行方式。这可能是对预期功能的一个简单声明,留给程序员去做具体的设计。也可能是对复用组件或是某个细化的设计模型所做的一系列的变更。设计模型可用于自动生成一个实现。4. 数据库设计:设计系统数据结构,以及如何在数据库中表示这些数据结构。此处的工作又一次取决于是否复用现有数据库或创建一个新的数据库。2.2.3软件有效性验证一 软件有效性验证,通常也称为检验和有效性验证(V&V),是要看系统是否符合它的描述以及系统是否符合客户的预期。程序测试,即用模拟测试数据运行系统,是最基本的有效性验证技术。有效性验证技术也包括在从用户需求定义到程序开发的每个软件过程阶段进行检查过程(比如,查阅和复查)。由于测试的主导地位,绝大多数的有效性验证成本发生在系统完成过程中和完成之后。二 测试过程中的阶段包括:1. 组件(或单元)测试:由开发系统的人员对组成系统的组件进行测试。每个组件都单独测试,而不受其他系统组件的影响。组件可能是简单的实体,如一个函数或对象类,或者是这些实体的一个相关集合。通常用自动化测试工具,如JUnit(Massol和Husted,2003),它能在新版本的组件创建的时候对其重新测试。2. 系统测试:集成组件形成完整的系统。这个过程主要是关注无法预测的组件间交互和组件界面问题所引发的错误。也关注系统是否满足了功能上和非功能上的需求,并测试系统的总体特性。对于大型系统来说,这可能是一个多阶段的过程,需要对组件所构成的子系统进行测试,然后测试由这些子系统所构成的最终系统。3. 接收测试:这是系统在接受并运行之前进行的最后阶段测试。这个阶段不再是用模拟数据来测试系统,而是用客户提供的真实数据测试系统。真实数据能以不同的方式测试系统,所以能暴露出系统需求定义中的错误和遗漏。接受测试还能发现系统需求中的类问题,即系统的设施不能满足用户的需要或者系统性能是无法接受的。2.2.4软件进化一 自有软件开发以来,就有软件开发过程和软件进化(软件维护)过程之分。而现在完全从头开发的系统很少,将软件系统的开发维护看成是一个连续体显得更有意义。因此,不再将软件工程看成是开发和维护两个完全独立的过程,而是将其堪称是一个进化过程,即软件在其生命周期内不断地随着需求的变更而变更的进化式过程。这个进化式过程如下图所示。现有系统定义系统需求2.3应对变更一 对于所有大型项目来说,变更是无法避免的。系统需求是在变化的,因为采购系统的工作要屈从于外部压力和管理权力的更替。当有新技术可用的时候,新的设计和实现方法就会出现。因此不管用什么样的软件过程模型,能在软件开发过程中及时处理变更是很必要的。二 有两个相关的方法会用于降低返工成本:1. 变更避免:软件过程包括一些能够在重大返工发生之前预测变更的活动。例如,原型系统的开发,要先给客户看系统的一些重要特征。客户可以试用原型,并在花费高额的软件生产成本之前重新定义需求。2. 变更容忍:所设计的过程使得变更以相对较低的成本得到处理。这通常需要增量开发。提出的变更可能是在还没有开发的增量上实现。假如不是这样的,只需要更改单个增量(系统的一小部分)来适应变更。三 两种应对变更系统需求的方法,它们是:1. 系统原型:快速开发一个系统版本或者是系统的一个部分,以检验客户需求和某些设计决定的可行性。它支持变更避免,因为它允许客户试用正式交付之前的系统,并重新审视和定义需求。因此在交付正式系统之后,客户提出的需求变更的数目将会降低。2. 增量交付:系统增量地交付给用户,给用户评审和试用。它支持变更能避免和变更容忍。避免了交付不成熟的需求实现,并允许在之后的增量中进行改变且将成本控制在较低水平。2.3.1原型构造一 原型是一个软件系统的最初版本,用于验证概念,试用设计选项,发现更多的问题和可能的解决方法。原型的快速迭代开发是必要的,这样就可以控制成本,系统信息持有者也可以在软件过程的早期试用系统原型。二 软件原型可以用在软件开发过程中,帮助预计可能需要的变更:1. 在需求工程过程中,原型有助于启发和验证系统需求。2. 在系统设计过程中,原型可用于探索特定软件的解决方案,并支持用户接口设计。三 原型开发的过程2.3.2增量式交付一 增量开发过程的好处是:1. 客户可以将早期的增量作为原型,从中获得对后面系统增量的需求经验。2. 客户无需等到整个系统的实现才能从中获益。第一个增量会满足他们大多数关键的需求,因此,软件马上就能使用。3. 这一过程保持了增量式开发的优点,那就是相对来讲变更能较容易地嵌入到系统中。4. 因为具有最高优先权的服务被首先交付,而后面的增量也不断被集成进来,这就使得最重要的系统服务肯定接受了最多的测试。这就意味着在系统的最重要的部分,客户不太可能遇到失败。二 增量式交付存在的问题1. 大多数系统需要一组基本设施,这些基本设施会被系统不同部分所使用。因为需求的详细定义是当增量将要被开发时才完成的,所以就很难确定全体增量所需要的公共设施。2. 当所开发的是一个替换系统时,迭代开发也是很困难的。因为用户想要旧系统的所有功能,往往不愿尝试一个不完整的新系统。因此,获取用户反馈是困难的。3. 软件描述和软件本身一起开发是迭代过程的本质。然而,这与许多机构的采购模型是相冲突的,因为完整的系统描述往往是系统开发合同的一部分。在增量方法中,直到最后的增量描述完成,才会有完整的系统描述。这就需要一种新形式的合同,像政府机构这样的大客户将很难接受这样的合同。2.3.3Boehm的螺旋模型一 风险驱动的软件过程框架(螺旋模型)最初由Boehm提出来。它不是将软件过程用一个伴随着有从一个活动到另一个活动的回溯的活动序列来表示,而是将过程用螺旋线表示。在螺旋线中每个回路表示软件过程的一个阶段。因此,罪立案的回路可能与系统可行性研究有关,下一个回路与系统需求定义有关,再下一个回路与系统设计有关,等等。螺旋模型避免了变更风险,它假定项目的结果是有风险的,并在模型中明确地包括风险管理活动以减小开发中的风险。二 在螺旋线中每个回路被分成4个部分:1. 目标设置:为项目的这个阶段定义专门目标。指定对过程和产品的约束,而且指定详细的管理计划。分析项目风险,根据这些风险,规划可选的策略方案。2. 风险评估和规避:每一个项目风险确定以后要进行详细的分析,并采取措施规避这些风险。举例来说,如果有需求不合适的风险,就可能需要开发一个原型系统。3. 开发和有效性验证:在风险预估以后,就可以为系统选择开发模型。举例来说,如果用户界面风险是主要的,一个适当的开发模型可能是建立抛弃式原型。如果安全性风险是主要的,则基于形式化转换的开发可能是最适当的,等等。如果主要风险在于子系统集成,那么瀑布模型可能是最适当的。4. 规划:对项目进行评审以确定是否需要进入螺旋线的下一个环路。如果决定需要继续就要做出项目的下个阶段的计划。三 螺旋模型和其他软件模型之间的重要区别在于,螺旋式模型中对风险的考虑是明确的。螺旋模型的一个回路始于如性能,功能等关心的目标,达到这些目标的可能方式以及对这些方式的约束在这时要全部列出。对每个目标的所有可选方案要进行评估,通常这就会帮助识别项目风险的源头。下一步骤是通过详细分析,原型建立,仿真等活动预估这些风险。2.4Rational统一过程一 Rational统一过程(RUP)是新式过程模型的一个实例,该新式过程模型来自于UML上的工作以及相关的统一软件开发过程。由于它是一个混成过程模型的一个很好的实例,所以在此给出一个描述。它集合

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论