0软件工程基本概述1本讲核心一、软件工程过程二、软件生存期模型三、软件开发方法四、软件工具与软件开发环境五、路线图2软件项目过程顾客顾客需求满意产品输入输出产品实现3软件工程三段论软件开发项目管理过程改进4软件开发开发过程是软件人员生产软件的过程,例如需求分析、设计、编码、测试等,相当于生产线上的生产过程。5软件开发路线图维护产品提交测试编码详细设计概要设计需求分析6软件项目管理管理过程是项目管理者规划软件开发、控制软件开发的过程,相当于生产线上的管理过程,管理过程是伴随开发过程进行的过程。7软件项目管理路线图合同管理生存期需求管理任务分解项目进度项目估算质量计划配置计划风险计划团队管理项目度量集成项目跟踪控制项目结束8软件过程改进过程改进相当于对软件开发过程和软件管理过程的“工艺流程”进行管理和改进,如果没有好的工艺生产不出好的产品,它包括对开发过程和管理过程的定义和改进。9软件过程改进路线图启动诊断建立实施评估10软件工程过程(Softwareengineeringprocess):指在软件工具的支持下,所进行的一系列软件工程活动。通常包括以下四类基本过程:1.软件规格说明:规定软件的功能及其运行环境。2.软件开发:产生满足规格说明的软件。3.软件确认:确认软件能够完成客户提出的要求。4.软件演进:为满足客户的变更要求,软件必须在使用的过程中演进。11本讲核心一、软件工程过程二、软件生存期模型三、软件开发方法四、软件工具与软件开发环境五、路线图12软件生命周期(Softwarelifecycle)是指从软件开始开发到报废的全过程,亦称软件生存期。软件生命周期可分为7个阶段:1.可行性研究和项目开发计划2.需求分析3.概要设计4.详细设计5.编码6.测试7.维护软件生存期一般用经典的瀑布模型来描述。13瀑布模型(waterfallmodel)14在大部分文献中将生存周期划分为5个阶段,即需求定义、设计、编码、测试及维护。其中需求定义阶段包括可行性研究和项目开发计划、需求分析,设计阶段包括概要设计和详细设计。为了描述软件生存期的活动,提出了多种生存期模型(也叫软件过程模型),例如:瀑布模型、V模型、原型化模型、螺旋模型等。15常用生存期模型瀑布WaterfallV模型V-shaped原型Prototyping增量Incremental螺旋式Spiral…….16Figure2.1Thewaterfallmodel.REQUIREMENTSANALYSISSYSTEMDESIGNPROGRAMDESIGNCODINGUNIT&INTE-GRATIONTESTINGSYSTEMTESTINGACCEPTANCETESTINGOPERATION&MAINTENANCE17瀑布模型是研究人员提出的第一个模型,它将开发阶段从一个阶段瀑布般转换到另一个阶段。该图暗示,一个开发阶段必须在另一个开发阶段开始之前完成。问题:并不能反映实际的代码开发方式,实际上软件是通过大量的迭代进行开发的。若不对实际的软件开发过程加以控制,开发过程可能看起来会像图2.2。18Figure2.2ThesoftwaredevelopmentprocessinrealityREQUIREMENTSANALYSISSYSTEMDESIGNPROGRAMDESIGNPROGRAMIMPLEMENTATIONUNITTESTINGINTEGRATIONTESTINGSYSTEMTESTINGDELIVERYMAINTENANCE19n瀑布模型的主要缺点是没有把软件看做一个问题求解的过程。n通过引入加强理解的活动和子活动,软件开发过程有助于控制活动之间的反反复复。n原型(prototype)就是这样的一个子过程,它使客户和开发人员能够对计划开发的系统的相关方面进行检查,以决定它对最终产品是否合适或恰当。n确认(validation)确保系统实现了所有的需求。n验证(verification)确保每项功能都是正确的。20Figure2.3ThewaterfallmodelwithprototypingREQUIREMENTSANALYSISSYSTEMDESIGNPROGRAMDESIGNCODINGUNIT&INTE-GRATIONTESTINGSYSTEMTESTINGACCEPTANCETESTINGOPERATION&MAINTENANCEPrototyping21WaterFallmodel适合的项目在项目开始前,项目的需求很明确在项目开始前,解决方案也很明确类似的项目如:公司的财务系统库存管理系统短期项目22Figure2.4TheVmodel.REQUIREMENTSANALYSISSYSTEMDESIGNPROGRAMDESIGNCODINGUNIT&INTE-GRATIONTESTINGSYSTEMTESTINGACCEPTANCETESTINGOPERATION&MAINTENANCEVerifydesignValidaterequirements23V模型接收测试集成测试系统测试项目规化需求分析总体设计详细设计编码和调试集成测试单元测试24V模型nV模型使得隐藏在瀑布模型中的迭代和重做更加明确n瀑布模型关注的通常是文档和制品nV模型关注的是活动和正确性n大家误认为测试是开发周期的最后一个阶段,其实早期的测试对提高产品的质量,缩短开发周期起着重要作用。nV模型正好说明的测试的重要性,它与开发是并行的。V模型体现了全过程的质量意识。25V模型适合的项目在项目开始前,项目的需求很明确在项目开始前,解决方案也很明确对系统的性能安全很严格的项目类似的项目如:航天飞机等公司的财务系统实例26Figure2.5TheprototypingmodelLISTOFREVISIONSLISTOFREVISIONSLISTOFREVISIONSPROTOTYPEREQUIREMENTSPROTOTYPEDESIGNPROTOTYPESYSTEMTESTDELIVEREDSYSTEMSYSTEMREQUIREMENTS(sometimesinformalorincomplete)Reviseprototypeuser/Customerreview27Prototype28Prototype模型适合的项目在项目开始前,项目的需求不明确需要减少项目需求的不确定性类似的项目如:确定显示界面第一次开发的产品,验证可行性29Figure2.9theincrementalanditerativemodels.INCREMENTALDEVELOPMENTITERATIVEDEVELOPMENT30阶段性开发n增量开发(incrementaldevelopment)l在增量开发中,需求文档中指定的系统按功能划分为子系统。定义发布时首先定义一个小的功能子系统,然后在每个新的发布中增加新功能。n迭代开发(iterativedevelopment)l迭代开发是在一开始就提交一个完整的系统,然后在每个新的发布中改变每个子系统的功能。31IncrementalModel核心功能核心功能112123第一增量第二增量第三增量核心功能112123……32IncrementalModel适合的项目项目开始,明确了需求的大部分,但是需求可能会发生变化对于市场和用户把握不是很准,需要逐步了解对于有庞大和复杂功能的系统进行功能改进,就需要一步一步实施的。增量模型实例33PLANDEVELOPANDTESTDETERMINEGOALS,ALTERNATIVES,CONSTRAINTSEVALUATEALTERNATIVESANDRISKSstartRequirements,life-cycleplanBudget1Budget2Budget3Budget4ConceptofoperationDetaileddesignCodeUnittestSystemtestAcceptancetestImplementationplanFigure2.10thespiralmodel.34螺旋模型(SpiralModel)n对于大型软件,只开发一个原型往往达不到要求。螺旋模型将瀑布模型和增量模型结合起来,并加入了风险分析。n第一次迭代的产品是操作概念n第二次迭代的主要产品是需求n在第三次迭代中,系统开发产生设计n第四次迭代能够进行测试35SpiralModel36SpiralModel螺旋模型沿着螺线旋转,在四个象限上分别表达了四个方面的活动,即:制定计划──确定软件目标,需求和选定实施方案,弄清项目开发的限制条件风险分析──评估所选方案,考虑如何识别和消除风险实施工程──实施软件开发,编码,测试等客户评估──评价开发工作,提出修正建议,规划下期任务37n螺旋模型的每次迭代都根据需求和约束进行风险分析,以权衡不同的选择,并且在确定某一特定选择之前,通过原型化验证可行性或期望度。n当风险确认之后,项目经理必须决定如何消除或最小化风险。38SpiralModel适合的项目风险是主要的制约因素不确定因素和风险限制了项目进度用户对自己的需求也不是很明确需要对一些基本的概念进行验证可能发生一些重大的变更项目规模很大项目中采用了新技术实例39敏捷方法(AgileSoftwareDevelopment)n目的:通过过程和工具理解个人和交流的作用;通过全面的文档理解运行的软件;通过合同和谈判得到客户的协作;在计划的执行中做出对变更的响应。n极限编程(XP)n水晶法(Crystal)n并列争球法(Scrum)n自适应软件开发(ASD)n敏捷方法的4个特性n交流n简单性n勇气n反馈41XP的12个实践操作n计划游戏n小的发布n隐喻n简单设计n测试驱动n重构n结对编程n集体所有权n持续集成n在现场的客户n代码标准42本讲核心一、软件工程过程二、软件生存期模型三、软件开发方法四、软件工具与软件开发环境五、路线图43软件开发方法软件开发的目标是要在规定的投资和时间内,开发出符合用户的需求,高质量的软件,为此需要有成功的开发方法。为了克服软件危机,从20世纪60年代末开始,一直在进行软件方法的研究与实践,提出了多种软件开发方法和技术,对软件产业的发展起着不可估量的作用。44软件开发方法可分为几大类:面向过程的开发方法(传统的)面向对象的开发方法基于构件的开发方法特别要注意:由于软件与程序是不同的概念,软件开发方法与程序设计方法是两个不同的概念。软件开发方法可以是针对局部的,也可以是针对全局的。软件工程方法,更加强调和重点研究的是需求分析与软件设计的开发方法。45面向过程的开发方法结构化开发方法、JACKSON方法、原型化开发方法、IDEF法等。面向对象的开发方法Coad/Yourdon方法、Booch方法、OMT方法以及UML等。软件开发方法分类46结构化开发方法(StructuredDevelopingMethod)是现有的软件开发方法中最成熟,应用最广泛的方法,主要特点是快速、自然和方便。结构化开发方法是一种面向数据流的开发方法,它的基本原则是功能的分解与抽象。结构化开发方法总的指导思想是自顶向下、逐步求精。结构化开发方法4720世纪70年代初结构化程序设计方法(StructuredProgram,SP)20世纪70年代中结构化设计方法(StructuredDesign,SD)20世纪70年代末结构化分析方法(StructuredAnalysis,SA)SA,SD,SP法相互衔接,形成了一整套开发方法。若将SA,SD法结合起来,又称为结构化分析与设计技术(SADT技术)。一、结构化开发方法的组成48二、结构化方法的工作模型问题定义编程需求分析设计可行性研究运行与维护测试开发时期运行时期计划时期(目标与范围说