软件过程2014-9引•软件工程基本原理或准则第一条?•分析解决问题的基本方法?(软件危机)软件特点生产方式软件的生命周期?软件过程?生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序软件过程模型是对软件开发活动进行有效地组织、协调、管理与控制的一种策略目录软件生命周期软件过程概念软件过程模型软件生命周期SDLC,SoftwareDevelopmentLifeCycle问题定义问题定义和可行性研究•确定要开发软件系统的总目标和规模。•从技术、经济和社会因素等方面的要求来论证完成该软件任务的可行性。•估计可利用的资源(计算机硬件,软件,人力等)、成本、效益、开发进度。•制定出完成开发任务的实施计划,连同可行性研究报告,提交管理部门审查。SDLC,SoftwareDevelopmentLifeCycle要解决的问题是什么?用户视角是否有解?是否值得解?ProblemDefinitionFeasibilityStudies需求分析•理解用户需求,并将用户需求用书面形式表达出来。•编写软件需求规格说明书或系统功能说明书及初步的系统用户手册。需求说明书是以后阶段工作的基础。•输出需求规格说明书提交管理机构评审。SDLC,SoftwareDevelopmentLifeCycle目标系统必须做什么?开发视角RequirementsAnalysis设计•总体设计—“如何解决问题”–方案选型:列出多种解决方案进行比较–在需求说明书的基础上建立软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应•详细设计—对每个模块要完成的工作进行具体的描述,为源程序编写打下基础•系统方案、概要设计、详细设计提交评审。SDLC,SoftwareDevelopmentLifeCycle模块分解,接口确定。概要模块算法、数据结构。详细编码•把软件设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单”。•写出的程序应当是结构良好、清晰易读、规范的(如匈牙利法则,注释良好),且与设计相一致的。SDLC,SoftwareDevelopmentLifeCycle翻译:发言人Vs翻译官测试•单元测试:查找各模块在功能和结构上存在的问题并加以纠正。•集成测试:将已测试过的、并且相关的模块按一定顺序组装起来进行测试。•按规定的各项需求,逐项进行系统测试,决定已开发的软件是否合格,能否交付用户使用。SDLC,SoftwareDevelopmentLifeCycleUnitTestingIntegrationTestingSystemTesting运行和维护•纠正性维护:运行中发现了软件中的错误需要修正。•适应性维护:为了适应变化了的软件工作环境,需做适当变更。•完善性维护:为了增强软件的功能需做变更。•预防性维护:修改软件为将来的维护活动预先做准备SDLC,SoftwareDevelopmentLifeCycleCorrectiveMaintenanceAdaptiveMaintenancePerfectiveMaintenancePreventiveMaintenance任务思维模式用户需求过程产品•问题–假设:软件需求可以在开发初期完全确定下来–与用户的交互只是发生在确定需求之时和发布产品之后–现实情况很少符合上述假设SoftwareProcess过程思维模式•好处–通过提高可见性来降低开发风险–允许在项目进展过程中基于用户的反馈进行项目变更用户需求过程产品反馈SoftwareProcess软件过程概念•软件过程:是为获得软件产品,软件开发人员在软件工具支持下完成的一系列软件工程任务的框架。SoftwareProcess沟通通用过程框架:策划建模构建部署沟通Communication(与客户交流)策划Planning(制定计划)建模Modeling(分析和设计)构建Construction(编码和测试)部署Deployment(交付给用户)软件过程概念•软件过程讨论的主要内容包括软件过程模型、项目软件过程定义、软件过程裁剪、软件过程改进及软件能力成熟度的评价等内容。•软件过程模型给出了适合不同软件项目的软件过程活动组织的参考框架。对不同的软件组织来讲,典型软件过程模型仅仅是理论参考框架。为了不断提高软件能力,软件组织(企业与团队)应该不断积累经验,针对不同的软件项目和软件组织自身的特点,在软件过程定义、软件过程裁剪、软件过程改进等方面不断努力和提高。SoftwareProcess传统瀑布模型(WaterfallModel)软件定义可行性研究与计划需求分析设计编码测试运行和维护软件过程模型SoftwareProcessModel特点•阶段间具有顺序性和依赖性。(两重含义)•推迟程序的物理实现。(重要指导思想)•质量保证:每个阶段必须完成规定的文档;每个阶段结束前完成文档审查,及早改正错误。(两个重要做法)•易于组织,易于管理:因为你可以预先完成所有计划。•是一种严格线性的、按阶段顺序的、逐步细化的过程模型(开发模式)。缺点•在项目开始的时候,用户常常难以清楚地给出所有需求;用户与开发人员对需求理解存在差异。•缺乏灵活性:因为瀑布模型确定了需求分析的绝x对重要性,但是在实践中要想获得完善的需求说明是非常困难的,导致“阻塞状态”。反馈信息慢,开发周期长。•实际的项目很少按照顺序模型进行。软件定义可行性研究与计划需求分析设计编码测试运行和维护SoftwareProcessModel实际瀑布模型软件过程模型瀑布模型变种:V型模型•该方法是对瀑布模型的修正,强调了验证活动SoftwareProcessModel软件过程模型快速原型模型(RapidPrototypingModel)SoftwareProcessModel软件过程模型需求分析原型评价最终系统设计最终系统实现原型开发规格说明可运行原型18快速原型模型的基本思想:快速分析,快速实现,及时反馈,反复评价和改进,适应变化,最终实现系统。需求明确,需求得到验证原型一般被抛弃快速原型模型(RapidPrototypingModel)SoftwareProcessModel软件过程模型19沟通快速策划建模快速设计部署交付及反馈构建原型Step1:双方通过沟通,明确已知的需求。Step2:迅速策划一个原型并进行建模,主要集中于那些最终用户所能够看到的方面,如人机接口布局或者输出显示格式等。Step3:快速设计产生原型,对原型进行部署,由客户和用户进行评价;Step4:根据反馈,进一步细化需求并调整原型;Step5:原型系统不断调整以逼近用户需求。SoftwareProcessModel快速原型模型(RapidPrototypingModel)软件过程模型缺点•用户有时误解了原型的角色,例如他们可能误解原型应该和真实系统一样可靠。•缺少控制,由于用户可能不断提出新要求,因而原型迭代的周期很难控制。•额外的花费:研究结果表明构造一个原型可能需要10%额外花费。•为了尽快实现原型,采用了不合适的技术,运行效率可能会受影响。•原型法要求开发者与用户密切接触,有时这是不可能的。例如外包软件。优点•从实践中学习(Learningbydoing)•用户参与•使部分已知需求逐渐清晰化•提高系统的实用性、可维护性•节省开发的投入、缩短整个软件的开发周期适用于用户驱动的系统(即需求模糊或随时间变化的系统)。SoftwareProcessModel软件过程模型可行性研究与计划需求分析概要设计维护针对每个构件,完成详细设计、编码和集成,经测试后交付给用户增量模型(IncrementalModel)特点•以功能递增的方式进行软件开发;•能较快地产生可操作的系统;•在每一步递增中,均发布一个新的增量版本,把用户/开发者的经验结合到不断求精的产品中。缺点•很难把用户的需求映射到适当规模的增量上。•大多数系统需要一组在系统许多部分都会用到的基本服务。但由于增量实现前,需求不能被详细定义,所以,明确所有增量都会用到的基本服务就比较困难。•每个附加的增量并入现有的软件时,必须不破坏原来已构造好的东西。•管理人员须有足够的技术能力来协调好各增量之间的关系。SoftwareProcessModel•综合了快速原型模型的迭代特征和瀑布模型的控制和系统化的优点。•增加了风险分析,是以风险为导向的生命期模型。•从一个小范围的关键中心地带开始寻找风险因素,制定风险控制计划,并交付给下一步骤,如此迭代,每次迭代将项目扩展到一个更大的规模。软件过程模型SoftwareProcessModel螺旋模型(SpiralModel)ReviewCommitmentPartition风险分析原型1建模模拟评价需求计划生存期计划原型2风险分析软件需求需求确认开发计划风险分析原型3软件产品设计设计确认和验证集成与测试计划风险分析可运行原型详细设计单元测试编码集成测试验收测试实现计划下一个阶段开发,确认以及下一级产品确定目标选择方案设定约束条件评估方案,识别并排除风险累计成本各步骤的进度Thespiralmodel特点•对于大型内部软件系统的开发,螺旋模型是一个很现实的方法。•优势:随着迭代的增加(成本的增加),风险程度随之降低。•缺陷:比较复杂,需要相当的风险评估技术,且成功依赖于这种技术。维护确认实现设计分析演化•是典型的面向对象生命周期模型•“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性•应该把线性过程作为总目标SoftwareProcessModel软件过程模型喷泉模型(FountainModel)统一过程(UnifiedProcessModel)Asoftwareprocessthatis:use-casedrivenarchitecture-centriciterativeandincrementalCloselyalignedwiththeUnifiedModelingLanguage(UML)创始人:Jacobson、Booch、Rumbaugh[JAC99]软件过程模型软件过程模型统一过程(UnifiedProcessModel)UP过程模型UnifiedProcessModel敏捷开发者宣言2001年,KentBeck和其他16位知名软件专家共同签署了“敏捷软件开发宣言”[BEC01a]个体和交互胜过过程和工具可工作软件胜过宽泛的文档客户合作胜过合同谈判响应变化胜过遵循计划软件过程模型敏捷过程(AgileProcessModel)共赢、共输人是第一位的,过程是第二位变化不可避免适应性?预设性?敏捷的来源市场情况飞速变化最终用户需求不断变更新的竞争威胁毫无征兆地出现必须敏捷地响应变化、无法确定的商务环境Cockburn在敏捷软件开发著作中,论证了惯例过程模型的主要缺陷:忘记了开发软件的人员的特点高度纪律性的方法学非常脆弱严格的纪律和宽容实践必须考虑平衡软件过程模型敏捷过程(AgileProcessModel)敏捷过程是什么敏捷过程是轻量级或者精简的软件开发过程尽早、持续交付有价值的软件欢迎变更,快速响应变化鼓励共利益者特别是客户参与协同工作强调人的因素,“构造可以满足人员及团队需求的过程模型”软件过程模型敏捷过程(AgileProcessModel)作为一个整体工作;按短迭代周期工作;每次迭代交付一些成果;关注业务优先级;检查与调整。极限编程(eXtremeProgramming,XP)用户故事权值验收测试准则迭代计划简单设计CRC卡重构结对编程连续集成单元测试集成测试验收测试发布软件增量项目速度估算软件过程模型敏捷过程(AgileProcessModel)实例讨论SoftwareProcessModel实例讨论SoftwareProcessModel实例讨论SoftwareProcessModel实例讨论SoftwareProcessModel回顾•软件的概念、特征•软件的发展和软件危机•软件工程概念•软件过程及过程模型“兵无常势,水无常形”E