软件工程软件工程主要研究内容:1.一个目标:如何经济的、高质量的开发与维护一个软件系统2.三个方面:过程、方法、工具可行性分析需求分析概要设计详细设计编程实现测试部署维护可行性分析方法软件工程方法软件工程工具需求分析方法概要设计方法详细设计方法编程实现方法测试方法维护方法支持方法的工具第二次课:1)软件生命周期和过程模型2)问题定义和可行性研究软件生命周期软件生命周期的定义:软件产品从考虑其概念开始到交付使用,直至最终退役为止的整个过程5可行性分析问题定义设计编码测试用户描述软件定义阶段软件开发阶段运行维护阶段需求分析维护软件生命周期各个阶段的基本任务1.问题定义“要解决的问题是什么?”2.可行性研究“对于上一阶段定义的问题有行得通的解决办法吗?”—可行性研究报告3.需求分析“目标系统必须做什么?”—需求规格说明书4.总体设计(概要设计)“概括的说,应该怎么实现目标系统?”—概要设计说明书各个阶段的基本任务5.详细设计(模块设计)“应该怎么具体地实现这个系统呢?”—详细设计说明书6.编码和单元测试7.综合测试(集成测试,验收测试)8.软件维护(改正性维护,适应性维护,完善性维护,防御性维护)软件过程模型什么是模型?模型:对现实世界的抽象,是对现实世界的物、或者现象的抽象抽象:提取所关注的信息,而忽略不重要、次要的信息模型的作用:有助于人们对现实世界的认识模型的表示:任何形式(数学公式、图像、文本)软件过程模型什么是软件过程模型?软件过程模型:对软件开发全部过程的抽象,是对软件全部开发过程中所涉及的活动(或者任务)、以及活动之间的关系的抽象软件过程模型的作用:告诉人们应该去遵循一个什么样的过程去开发软件系统软件过程模型几种常见的软件过程模型瀑布模型原型模型增量模型螺旋模型喷泉模型边写边改(codeandfix)软件过程模型软件过程模型:瀑布模型(1970年提出)生命周期的各项活动自上而下,有固定次序,相互衔接,如同瀑布流水,逐级下落各个活动之间具有顺序性和依赖性软件过程模型软件过程模型:瀑布模型特点:1)强调了每一阶段的严格性,强调推迟实现2)强调质量保证:每个阶段通过严格的阶段评审与确认,得到一致、完整、准确、无二义性的文档,并“冻结”文档为该阶段结束的标志;3)是一种整体开发模型软件过程模型软件过程模型:瀑布模型局限性:1)在软件开发的初期阶段获取正确、完整的需求很困难2)理想的线性开发模式,缺乏灵活性3)阶段划分完全固定,产生大量文档,极大地增加了工作量软件过程模型几种常见的软件过程模型瀑布模型原型模型增量模型螺旋模型喷泉模型软件过程模型软件过程模型:原型模型原型:软件的一个早期可运行的版本,它反映最终系统的部分重要功能和性能原型的作用:准确地确定用户需求主要使用领域:1.系统不是特别大2.系统需求不明确建造/修改原型用户测试运行原型听取用户意见软件过程模型软件过程模型:原型模型优点:用户参与,尽早揭示软件中可能存在的风险及不确定因素,尤其是关于用户需求一致性方面的风险。建造/修改原型用户测试运行原型听取用户意见软件过程模型软件过程模型:原型模型局限性:1)对大型项目,不经过系统分析,一开始构造原型比较困难2)对于那些不是与用户密切交互的软件(比如大规模计算、批处理等软件),应用原型模型有一定的困难,因为比较难获取用户的评价3)文档容易被忽略4)原型构建过程的进展容易被浪费建造/修改原型用户测试运行原型听取用户意见软件过程模型软件过程模型:原型模型原型开发工具:axure、BalsamiqMockups、justinmind,还有国产的墨刀、mockplus等软件过程模型几种常见的软件过程模型瀑布模型原型模型增量模型螺旋模型喷泉模型软件过程模型软件过程模型:增量模型非整体的、搭积木的开发的思想:1)把软件产品作为系统的增量构件来设计、编码、集成和测试2)每开发一部分,向用户展示一部分。需求分析验证规格说明验证设计验证维护针对每个构件完成详细设计、编码和集成,经测试后交付给用户增量模型的第一种变体:先总体分析设计,开发时采用增量方式软件过程模型软件过程模型:增量模型分析分析分析设计设计设计编码编码编码测试测试测试构件1构件2构件3增量模型的第二种变体:完全的增量式分析、设计与开发,加快了形成产品的速度,但增加了不同构件不能组装一起的风险非整体的、搭积木的开发的思想:1)把软件产品作为系统的增量构件来设计、编码、集成和测试2)每开发一部分,向用户展示一部分。软件过程模型软件过程模型:增量模型优点:短时间内提交部分产品,降低开发风险适用范围:1)开发过程中,需求可能发生变化,用户接受分阶段地提交产品2)分析设计人员对应用领域不熟悉,难以一步到位3)项目风险较高4)用户可以参与到整个软件开发过程软件过程模型软件过程模型:增量模型缺点1)构建集成问题2)增量粒度选择很难把握软件过程模型几种常见的软件过程模型瀑布模型原型模型增量模型螺旋模型喷泉模型软件过程模型软件过程模型:螺旋模型Boehm1988年提出基本思想:使用原型及其他方法来尽量降低风险增加了风险分析过程的快速原型模型强调版本和版本升级软件过程模型软件过程模型:螺旋模型优点:1)将瀑布模型、原型模型和增量模型结合起来,加入了风险分析,弥补了不足之处2)风险驱动,方便项目管理人员及时调整管理决策,进而可降低开发风险3)支持用户需求的动态变化软件过程模型软件过程模型:螺旋模型局限性:1)需要有丰富的风险评估专家2)如果每次迭代的效率不高,致使迭代次数过多,将会增加成本并推迟提交时间适用领域:需求不明确的大型软件系统的开发软件过程模型几种常见的软件过程模型瀑布模型原型模型增量模型螺旋模型喷泉模型软件过程模型软件过程模型:喷泉模型以用户需求为动力以对象为驱动主要用于描述面向对象的软件开发过程软件过程模型软件过程模型:喷泉模型基本思想:1)软件开发过程自下而上周期的各阶段是相互重叠和多次反复的(迭代性),就像水喷上去又可以落下来,类似一个喷泉2)各个开发阶段没有特定的次序要求(无间隙性),并且可以交互进行,可以在某个开发阶段中随时补充其他任何开发阶段中的遗漏软件过程模型软件过程模型:喷泉模型优点:提高效率,节省开发时间缺点:没有严格的阶段区分,不便于管理软件过程模型各个模型的比较:过程模型优点缺点瀑布模型规范,文档驱动不能对需求变更即时作出响应,不灵活,产生大量文档原型模型尽早发现需求,揭示风险对于不是与用户密切交互的系统,较难获取用户评价;容易忽视文档增量模型快速提交产品,控制风险增加了不同构件集成的风险螺旋模型将瀑布、原型、增量三种模型结合起来,增加了风险分析,弥补他们的缺点要求具有丰富经验的风险分析专家喷泉模型提高效率,节省开发时间不严格区分开发阶段,不便于管理软件过程模型讨论:下列场景下选择哪种模型?场景一:外包项目,需要阶段验收场景二:项目风险高,随时可能会中断场景三:山寨一款软件产品,希望能快速上线发布场景四:如果一个项目,需求不明确,后期可能会有比较大的变化课程进度可行性分析问题定义设计编码测试用户称述软件定义阶段软件开发阶段运行维护阶段需求分析维护我们现在的位置问题定义目的:弄清“要解决的问题是什么?”任务:开发者和用户一起,讨论待开发软件项目的类型(应用软件、系统软件、通用软件还是专用软件)待开发软件项目的性质(新开发还是原有升级)待开发软件的目标(软件最主要的使用功能)待开发软件的大致规模以及开发软件项目的负责人等信息形成文档,并签字确认问题定义用户单位xxx水利局、地震局负责人xxx开发单位xxxx开发单位负责人xxxx项目名称三防决策系统问题描述手工无法完成防风、防汛、防震的事物,也无法预测某些地区在某些时间段内三防的具体情况……项目目标开发一个效率较高的三防决策系统,便于相关部门能及时地掌握三防实时动态,…..项目规模项目的开发预投入约xxx元可行性研究建议进行3个月,费用不超过xxx元xxx年xx月xx日签字:xxxx可行性研究的目的用最小的代价在尽可能短的时间内研究并确定客户提出的问题是否有行得通的解决办法系统分析师的工作!!!可行性研究的任务GB8566-88《计算机软件开发规范》中指出:可行性研究的主要任务是(4个方面)“了解客户的要求及现实环境,从技术、经济、操作和社会因素等方面研究并论证本软件项目的可行性,编写可行性研究报告,制定初步项目开发计划。”可行性研究的内容技术可行性经济可行性操作可行性社会可行性可行性研究的过程1:确定系统的规模和目标2:研究目前正在使用的系统3:导出新系统的高层逻辑模型4:重新定义问题5:导出和评价选择的解决方案6:推荐行动方针7:草拟开发计划8:书写文档提交审查成本-效益分析技术目的:从经济角度分析开发一个特定的新系统是否划算,从而帮助客户组织的负责人正确地做出是否投资于这项开发工程的决定。两方面内容:成本估算技术、效益估算方法成本估算技术任务分解(自上向下)单个任务的成本=人力(人月数)*每人每月平均工资代码行技术(自底向上)软件功能成本=源代码行数*每行代码的平均成本差别估算效益估算技术货币的时间价值投资回收期纯收入投资回收率几个度量指标货币的时间价值同样数量的货币随时间的不同具有不同的价值货币在不同时间的价值可用年利率(i)来折算初始投资P,n年后的收益:n年后的能收益F元,那这些钱的现在价值P为:nPF)1(inFP)1(i例子:货币的时间价值背景:假设某软件生命周期为5年。现在投资20万元,平均年利率3%。从第一年起,每年年底收入4.2万元。P=20万4.2万4.2万4.2万4.2万4.2万012345初始投资5年后的价值:231855)03.01(*205F222984]1)03.01()03.01()03.01()03.01[(*420001234F投资5年后的回报:纯收入整个生命周期之内系统的累计经济效益(折合成现值)与投资之差例子:纯收入背景:假设某软件生命周期为5年。现在投资20万元,平均年利率3%。从第一年起,每年年底收入4.2万元。P=20万4.2万4.2万4.2万4.2万4.2万012345投资5年的纯收入:7652-200000-])03.01(1)03.01(1)03.01(1)03.01(1)03.01(1[*42000当前投资额-折合现价的总收入12345F投资回收期工程累计经济效益(折现之后)等于最初投资所需的时间例子:投资回收期(1/4)背景:假设某软件生命周期为5年。现在投资20万元,平均年利率3%。从第一年起,每年年底收入4.2万元。初始投资5年后的价值:投资5年后的回报:231855)03.01(*2051F222984]1)03.01()03.01()03.01()03.01[(*4200012342F例子:投资回收期(2/4)投资5年的纯收入:7652-200000-])03.01(1)03.01(1)03.01(1)03.01(1)03.01(1[*42000当前投资额-折合现价的总收入123453F例子:投资回收期(3/4)投资6年后的纯收入(折现之后):27520200000-])03.01(1)03.01(1)03.01(1)03.01(1)03.01(1)03.01(1[*42000当前投资额-折合现价的总收入1234564F6年肯定收回投资!!!例子:投资回收期(4/4)收回投资的大致时期:35174)03.01(1*42000年收益折现之后的价值第6622.0351747652间年中收入亏损的大致时第622.522.05收回投资的大致时间