1、第一章(第二讲),软件工程过程,上节回顾,1.什么是软件危机?它有哪些具体表现?软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 表现:对开发成本和进度的估计常常不准确。开发成本超出预算和不能按时交付一再拖延的现象并不罕见。用户对“已完成”系统不满意的现象经常发生。软件质量往往靠不住。Bug一大堆,Patch一个接一个。软件的可维护程度非常之低,即“维护墙”问题。软件通常没有适当的文档资料。软件成本在整个系统中比重逐年提高。软件开发生产率的提高赶不上硬件发展和需求增长。,2.什么是软件工程?它有哪些本质特征? 软件工程是一门研究如何用系统化、规范化、数量化等工程原则和方法进行
2、软件开发和维护的学科。 关注大型程序的构造 软件工程的中心课题是控制复杂性 软件需求不断变化 旨在提高软件开发的效率 团队合作是软件工程顺利实施的关键 软件必须有效支持它的用户 由一种文化背景的人替另一种文化背景的人创造产品,本讲的主要内容,软件工程方法学 软件生命周期 软件过程 软件过程模型,1、软件工程方法学,通常把软件生命周期全过程中使用的一整套技术方法的集合成为软件工程方法学(methodology),也成为范型(paradigm) 软件工程方法学的3个要素 方法 工具 过程,传统的软件工程方法学,结构化范型或生命周期方法学 要么面向行为以功能分解为主(基于数据流图的结构化分析与设计方
3、法 ),要么面向数据(Jackson方法),面向对象方法学,以数据为中心,把数据和对数据的操作紧密地结合起来,用对象分解代替传统的功能分解。 面向对象方法学的4个要点 把对象作为融合数据和操作的统一的构件 把所有对象都划分成类 子类自动拥有父类中定义的数据和操作,即继承 对象间仅能通过发送消息互相联系,Return,2、软件生存周期,软件生存周期(Life Cycle)是指一个软件从提出开发要求开始直到该软件报废为止的整个时期。 把整个生存周期划分为若干阶段,使得每个阶段有明确的任务,使规模大、结构复杂和管理复杂的软件开发变得容易控制和管理。 软件生存周期各阶段的划分应遵循的基本原则: 各阶段
4、的任务应尽可能相对独立,同一阶段各项任务的性质尽可能相同,从而降低每个阶段任务的复杂程度,简化不同阶段之间的联系,有利于软件项目开发的组织管理。,软件生命周期的阶段划分,软件定义阶段 问题定义 可行性研究 需求分析 软件开发阶段 总体设计 详细设计 编码和单元测试 综合测试 运行阶段 软件维护,软件定义阶段,问题定义: 关于问题性质、工程目标和工程规模的扼要描述 可行性研究,即高层的分析和设计过程,以回答是否存在可行的解决方法。 需求分析:准确的“做什么”的描述。,软件开发阶段,概要设计 结构设计,系统设计 建立软件的总体结构,即模块结构 详细设计 算法设计,过程设计 设计每个模块的结构,IP
5、O图或PDL语言 编码与单元测试 生成源程序代码和单元测试方案、数据和结果,由编程人员进行 综合测试 通过各种测试和调试,是软件达到预订的要求,软件运行阶段,维护 通过各种必要的维护活动使系统持久地满足用户的需要 四种类型的维护 改正性维护 适应性维护 完善性维护 预防性维护,Return,软件开发的四个要素,人员 项目 产品 过程,过程,产品,项目,人员,工具,参与者,结果,自动化,模板,3、软件工程过程,一个过程定义了为达到每个确定的目标,需要什么人在什么时间以何种方式做何种工作(Goal,Who,When,How,What)。 软件工程过程规定了获取、供应、开发、操作和维护软件时,要实施
6、的过程、活动和任务。其目的是为各种人员提供一个公共的框架,以便用相同的语言进行交流。,Cont.,一个开发机构为开发特定的软件需要制订一系列的工作步骤(软件工程过程),其中包含和涉及软件工程所有参与者的各种活动、任务。 基本的软件过程活动包括:规格说明、开发、确认和演进。 CMM的软件工程过程包含获取、供应、开发、操作、维护、管理、支持七个过程。,软件过程因素包括四个方面,技术 工具 人员 组织模式,过程定义的作用,用于对 Customer, User, Developer, Manager的指导,一个广泛适用的过程使得所有参与人员更好地理解自己所扮演的角色、他人做什么。 促使过程的有机结合和
7、改善,获得“最好过程” 可以使公司内部的培训标准化。 由于过程的可重复性,利于开发进度的安排,利于成本估算。,统一过程(RUP),RUP的突出特点 用况驱动(系统功能) 以构架为中心(表现形式) 迭代和增量开发(过程实施),Return,UML(Unified Modeling Language ),1994,OO思想已经贯穿整个软件生存期,具有影响的OOA&D方法达50余种。 UML是一种对软件密集型系统进行可视化、详述、构造和文档化的建模语言,主要用于分析和设计阶段的系统建模。,UML 2.0,1994 Booch方法 Rumbaugh OMT Coad/Yourdon Fire Smit
8、h 方法 Jacobson OOSE ,1995.10发布 Unified Method 0.8,1996.6发布UML 0.9 不包含过程指导,Rational联合12家公司成立UML组织,形成UML 1.0,1997.1提交给OMG,1997.11.4, OMG 采纳UML 1.1,2002发布UML 2.0,4、软件过程模型,模型 所谓模型是为了理解事物而对事物做出的一种抽象,它忽略不必要的细节,是事物的一种抽象形式、一个规划、一个程式。 软件开发模型 软件开发全部过程、活动和任务的结构框架。,软件过程模型的种类,瀑布模型 快速原型模型 针对事先不能完成定义需求的软件开发 原型系统重在“
9、快速” 周期开发模型(增量和迭代模型) 完整的体系结构的实现确定 多次迭代 螺旋模型 考虑风险因素,由Boehm提出 喷泉模型 多次重复,无间隙 适用于面向对象技术(复用技术),瀑布模型,瀑布模型(Waterfall Model) 软件生存周期模型 (Classic Life Cycle Model) 线性顺序模型(Linear Sequential Model),瀑布模型的三个特点,阶段间具有顺序性和依赖性 推迟实现的观点 质量保证的观点,Cost to change,After release,图1.3 The impact of change,Definition,Development
10、,1.56x,1x,60100x,The Waterfall Model With Maintenance Circle,The Waterfall Model With Prototyping,瀑布模型的优点,开发过程基本上是线性顺序的,便于管理 基于“明确、完备的需求”,可以获得好的开发效果,运行、维护,需求分析,概要设计,详细设计,编码,单元集成测试,验收测试,系统测试,Validate Requirements,Verify Design,The V Model,Operational Specification Model,Transformational Model,The Pha
11、sed Development Model,Build Release 2,Build Release 1,Build Release 3,Time,Production system,Development system,Developers,Users,The Incremental and Iterative Model,Incremental Development,Iterative Development,增量模型,增量开发的优点,能在较短的时间内向用户提交可以完成主要功能的产品 逐步增加产品的功能,使用户有充裕的时间学习和适应新产品,减少一个全新的产品给客户组织带来的冲击,The
12、 Spiral Model,螺旋模型的优点,有利于已有软件的重用 有助于把软件质量作为软件开发的一个重要目标 减少了过多测试或测试不足所带来的风险 软件维护与软件开发没有本质区别,The Software Development Process in Reality,示例分析一,假设你开发一软件,其功能是把读入的浮点数开平方,所得到的结果精确到小数点后4位。一旦实现并测试完成后,该产品将被抛弃。你打算选用哪种过程模型?,示例分析,1、需求很明确 2、实现浮点数开平方的算法也很成熟,不需要原型过程模型,3、一旦实现并测试完成后,该产品将被抛弃,可以不考虑产品的进化问题 4、规模相对较小,功能比较
13、单一,不需要增量模型或螺旋过程模型,总之,使用瀑布模型即可,示例分析二,你负责 一个项目,其工作是管理公司已被广泛应用的字处理软件的新版本开发。由于市场竞争激烈,公司规定了严格的完成期限并且已经对外公布。你打算采用哪种过程模型?为什么?,示例分析,旧版本相当于一个原型,没必要再专门开发一个原型系统 公司软件工程师对该软件很熟悉,有开发字处理软件的丰富经验,具备采用增量模型开发字处理软件的技术水平 该软件广泛使用,需要进一步的改进和扩充,以形成更新的版本 结论:增量模型,Return,技术审查和管理复审,任务:在软件生存周期的每个重要的里程碑(一般是每个阶段结束时),对工程项目的成本,实际花费的
14、经费,投资回收的前景,项目的进度等经济因素从管理角度进行审查。 目的:不让错误进入下一个阶段 技术审查也是降低软件成本的一个重要措施 在技术审查合格之后再进行管理复审,软件开发工具,软件工具一般是指为了支持软件人员开发和维护活动而使用的软件。 软件工具发展的三个阶段 工具箱 软件开发环境SDE 计算机辅助软件工程CASE (Computer Aided Software Engineering) 工具应该支持软件生命周期的各个阶段 Requirements Management Visual Modeling Programming Tool Quality Assurance,Return,
15、什么是软件过程?它与软件工程方法学有何关系? 试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明各种模型的使用范围。,作业一,第二章(第三讲),可行性研究与成本效益分析,本讲的主要内容,问题定义与可行性研究 可行性研究的任务 可行性研究的步骤 系统流程图 成本/效益分析,GO,1、问题定义,问题是什么? 问题性质 工程目标或前景( vision ) 工程规模和范围( scope ) 问题定义阶段结束的标准 提交有关规模和目标的报告书,软件可行性研究,软件可行性研究的目的 用最小的代价在尽可能短的时间内确定该软件项目是否能够开发,是否值得去开发。 结束标准 描述系统的高层逻辑模型 成
16、本效益分析 关于“是否可行”的明确回答,Return,2、软件可行性研究的任务,技术可行性 经济可行性 社会可行性 操作可行性,Return,3、软件可行性研究的步骤,(1) 确定项目规模和目标 (2) 研究正在运行的系统 (3) 建立新系统的高层逻辑模型 (4) 导出和评价各种方案 (5) 推荐可行的方案 (6) 编写可行性研究报告,Return,可行性研究是高层的分析和设计,可行性研究报告,(1)引言 (2)可行性研究前提 (3)对现有系统的分析 (4)所建议系统的技术可行性分析 (5)所建议系统的经济可行性分析 (6)社会因素可行性分析 (7)其它可供选择方案 (8)结论意见,4、系统流
17、程图,系统流程图是描绘物理系统中各个元素的图形符号的集合,它表达了系统中各个元素之间的信息流动的情况。 可行性研究要根据项目的概要范围、功能、性能等需求,以概括的形式描述现有系统的高层的逻辑模型,并通过概要的设计得到所建议的系统物理模型。 常用符号见P29图2.1和图2.2,Return,一个库存管理系统的系统流程图,订货信息,库存管理模块,报告生成模块,订货报告,库存文件,输入变更记录,I/O显示,磁盘,联机存储,处理,文档,5、成本/效益分析,目的:将开发成本与可能取得的效益比较和权衡,从经济角度评价开发一个新的软件项目是否可行。 效益分为有形效益和无形效益 有形效益可以用货币的时间价值、
18、投资回收期、纯收人等指标进行度量 无形效益主要从性质上、心理上进行衡量,很难直接进行量的比较。,成本估计技术,代码行技术 任务分解技术 自动估计成本技术,成本/效益分析的方法,货币的时间价值 (示例见P41)F = P(1+i)n P = F(1+i)n 投资回收期 纯收入 投资回收率P=F1(1+i)+F2(1+i)2+.+Fn(1+i)n,Return,项目开发计划,项目概述:主要工作;软件功能、性能;条件;用户及合同承包者承担的工作、完成期限及其它条件限制;应交付的程序名称,所使用的语言及存储形式;应交付的文档。 实施计划:任务的划分,各项任务的责任人;开发进度,按计划应完成的任务,用图
19、表说明每项任务的开始时间和完成时间;说明项目的预算,各阶段的费用支出预算。 人员组织及分工 交付期限,什么是软件危机?它有哪些具体表现? 什么是软件工程?它有哪些本质特征? 什么是软件过程?它与软件工程方法学有何关系? 试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明各种模型的使用范围。 什么是基线?应有哪些基本特征? 什么是里程碑?应有哪些基本特征?,作业一,什么是软件过程?它与软件工程方法学有何关系?,软件过程是为了开发出高质量的软件产品所需完成的一系列任务的框架,它规定了完成各项任务的工作步骤。 软件过程定义了运用技术方法的顺序、应该交付的文档资料、为保证软件质量和协调软件
20、变化必须采取的管理措施,以及标记完成了相应开发活动的里程碑。 软件过程是软件工程方法学的3个重要组成部分之一(方法、工具、过程)。,Return,各种过程模型的特点及使用范围,瀑布模型 三个特点 文档驱动 适应需求比较明确和稳定的项目 快速原型模型 目标系统通常能够满足用户的真实需求 能够有效避免在软件开发后期的较大返工,从而有效降低软件开发成本 开发过程基本上是线性顺序的 适应规模大、复杂性高的项目,CONT.,增量模型 能在较短的时间内向用户提交可以完成主要功能的产品 逐步增加产品的功能,使用户有充裕的时间学习和适应新产品,减少一个全新的产品给客户组织带来的冲击 开发的产品具有良好的可扩充
21、性 需要首先设计出开放的软件体系结构,故要求软件工程师有较高的技术水平,CONT.,螺旋模型 及时识别和分析风险 构件原型也是降低某种类型风险(如需求不真实的风险,技术方法不当的风险等)的方法 对可选方案和约束条件的强调有利于已有软件的重用 有助于把软件质量作为软件开发的一个重要目标 减少了过多测试或测试不足所带来的风险 软件维护与软件开发没有本质区别 适用于内部开发的大型软件项目,Return,基线(Baseline),基线是通过正式复审的规格说明或中间产品(artifact),可以作为进一步开发的基础,并且只有通过正式的变更控制过程才能改变它。 基线的特征 具有明确的标识 具有明确的内容 经过正式审批 严格控制变更,Return,里程碑(Milestone),里程碑是用来说明项目进展情况的事件,通常把一个开发活动的结束或一项开发任务的完成定义为一个里程碑。 里程碑必须与软件开发工作的进展情况密切相关,里程碑作为任务完成的标志必须非常明显,即里程碑具有很高的可见性。,Return,