软件工程第二章软件过程
软件工程第二章-软件过程
编码
运行 时期
1. 瀑布模型
瀑布模型(waterfall model)是软件工程最早的范例,
也称经典生命周期,它提出了一个系统的、顺序的软 件开发方法,从用户需求规格说明开始,通过计划、 建模、构建和部署的过程,最终提供一个完整的软件 并提供持续的技术支持。
沟通 项目启动 需求获取 策划 项目估算 进度计划 项目跟踪
… 框架活动 # n 动作 # n.1 任务集 …… 动作 # n.m 任务集 工作任务、工作产品、 质量保证点、项目里程碑
工作任务、工作产品、 质量保证点、项目里程碑
只有一种软件过程吗?
软件过程的种类很多,区别主要体现在几个方面: 组成过程的各个活动(包括普适性活动)、动作和任务,及其相互依 赖的关系都可能不同; 动作和任务的细化程度可能不同; 工作产品的定义和要求可能不同; 质量保证活动的应用方式可能不同; 项目跟踪和控制活动的应用方式可能不同; 过程描述的详细程度和严谨程度可能不同; 客户和利益相关者对项目参与的程度可能不同; 软件团队所赋予的自主权可能不同; 队伍组织和角色的明确程度可能不同。
下优先级进行增量开发:
第一个增量实现基本的文件管理、编辑和文档生成功能
; 第二个增量实现更加完善的编辑和文档生成功能; 第三个增量实现拼写和文法检查功能; 第四个增量完成高级的页面布局功能; ……
增量模型的特点
增量过程模型综合了线性、并行、演化三种过程流的
特征。
对于每个增量,使用的是线性过程流;
过程流
过程流(process flow):描述了在执行顺序和执行时
间上,如何组织框架中的活动、动作和任务。 大致有四大类不同的过程流:
第2章 软件过程
Plan 软件规格说明 Do 软件开发 Check 软件确认 Action 软件演进
80年代后,软件能力成熟度模型已成为软件 过程改进的标准。
软件工程框架
目标 用 性 确 性 合 基 本 过 程 算 性 支 持 过 程
可
正
选取适宜的开发范型 原 采用合适的设计方法 则 提供高质量的工程支持
统一过程模型
• 统一过程模型(Rational Unified Process) 是种软件工程过程,它提供了如何在开发组织中 严格分配任务和职责的方法;统一过程模型是一 个过程产品,有自己的过程框架,捕获了现代软 件开发中的最佳实践。统一过程模型具有三大特 点:用例驱动,以架构为中心,迭代和增量开发。
(2) 需求分析
本阶段要回答的关键问题是“目标系统应当做什么?”
(3) 软件设计
设计是软件工程的技术核心。本阶段要回答的关键问题 是“如何实现目标系统?”
软件生存周期
各个阶段所要完成的基本任务
(4) 程序编码和单元测试
本阶段要解决的问题是“正确地实现已做的设计”,即 “如何编写正确的、可维护的程序代码?”
第二章 软件过程
2.1 软件过程概述
ISO 9000定义:软件工程过程是把输入转 化为输出的一组彼此相关的资源和活动。
从软件开发的观点看,它就是使用适当的 资源(包括人员、硬软件工具、时间等), 为开发软件进行的一组开发活动,在过程 结束时将输入(用户要求)转化为输出 (软件产品)。
软件工程过程定义了: 方法使用的顺序、 要求交付的 文档资料、为保证质量和适应变化所需要的管理、 软件开发各个阶段完成的里程碑。 软件工程过程包含四种基本的过程活动:
软件工程课件-第2章-过程模型
31
螺旋模型
大型软件开发面临的重要问题:软件风险 如:产品交付给用户之后,用户不满意 开发进度落后,开发成本超出预算
产品完成前关键的技术人员跳槽
32
螺旋模型
•螺旋模型
累计成本 通过步骤进展 评价方案 识别和消除风险 决定目标、 方案和限制 风险 分析 评审 提交 风险 分析
难性的。 3、线性顺序模型每一步的工作都必须以前一阶段的输出为输入,这种 特征会导致工作中发生“阻塞”状态。
18
瀑布模型(Waterfall model)
虽然存在着上述的种种问题,但是线性顺序模型仍然有其值得肯定之处。 1、它提供了一个模板,使得分析、设计、编码、测试与维护工作可以在
该模板的指导下有序地展开,避免了软件开发、维护过程中的随意状态。
一个螺旋式周期
– – – –
协同模型
• 协同开发模型 Concurrent Development Model
13
瀑布模型
沟通
• 项目启动 • 需求获取
实际项目很少严格遵守该顺序. 客户通常难以清楚描述所有需求.
策划
• 项目估算 • 进度计划和项目跟踪
只有到项目接近尾声时,
才有可执行程序.
建模
• 分析和设计
经典
构建
• 编码和测试
生命周期
部署
• 交付 •支持和反馈
14
瀑布模型(Waterfall model)
作为一个连续的模型:从两个维度描述过程,每个过程域都根 据特定的目标和实践要求,进行严格的评估,并根据能力水平 评定为不完全级、已执行级、已管理级、已定义级、已定量管 理级、优化级。 作为一个阶段的模型:定义了五个成熟度等级:初始级、可重 复级、定义级、管理级、优化级 。
《软件工程与项目管理》2-2-软件过程(2)
初始阶段 为系统建立商业案例和确定项目的边界。 精化阶段 分析问题领域,建立健全的体系结构基础,编制项目计划,
淘汰项目中最高风险的元素。 构建阶段 管理资源和控制运作以优化成本、日程、质量的生产过程。 交付阶段 将软件产品交付给用户。
2.2 软件过程模型
专用过程模型
基于构件的开发模型:复用已有构件库中的软构件,逐步完 成系统设计及实现。
形式化系统开发模型:基于形式化数学变换的软件开发方法。 面向方面的开发模型:将系统的横切关注点和核心关注点分
开,避免横切关注点散乱分布在系统的多个类中。
2.2 软件过程模型
Rational统一过程
2.2 软件过程模型
软件过程模型
瀑布模型 演化过程模型 增量过程模型 专用过程模型 Rational统一过程
敏捷过程与极限编程 微软软件过程
2.2 软件过程模型
瀑布模型
瀑布模型(Waterfall Model)也称软件生存周期模型或线性顺序 过程模型。瀑布模型是一种线性模型。
2.2 软件过程模型
螺旋模型:将瀑布模型和快速原型模型结合,强调其他模型所忽视 的风险分析,吸收了“演化”的概念,可使开发人员和客户对每个 演化层的风险有所了解,继而做出应有反应。
将开发过程划分为制定计划、 风险分析、实施工程和客户评 估四类活动。将沿着螺旋线继 续进行,自内向外逐步延伸, 最终得到满意的软件产品。
加强开发者与用户的沟通需求,让客户全面参与软件的开发设计, 保证变化的需求及时得到修正。
主要目标在于降低因需求变更而带来的成本。 把软件开发过程重新定义为聆听、测试、编码、设计的迭代循环过
程。
软件工程 第2章过程模型
• 缺点:
– 软件必须具备开放式体系结构(困难) – 易退化成边做边改的方式,使软件过程控制失去整体性
31
增量模型的适用场合
适用场合 适用于软件开发中需求可能发生变 化、具有较大风险、或者希望尽早 进入市场的项目。
32
原型化模型(Prototype model)
沟通
策划
部署
建模
构建
策划
建模
时间
构建
部署
13
软件过程模型
• 传统软件过程模型
– 瀑布模型 – 增量模型 – 原型模型 – 螺旋模型 – 协同模型 – 喷泉模型
• 现代软件过程模型
– 基于构件的开发模型 – 形式化方法模型 – 面向方面的软件开发 – Rational统一过程 – 敏捷软件开发
14
传统软件过程模型
运行 计算机:我做了什么
6
软件生命周期
• Software life cycle • 软件生命周期/软件生存期:指软件产品或软件系
统从定义、设计、投入使用到被淘汰的全过程。
• 软件定义:做什么 • 软件开发:怎么做 • 软件维护
• 问题定义 • 可行性研究 • 需求分析
• 总体设计 • 详细设计 • 编码 • 测试
开发进度 顺时针为进展方向
评估方案 风险分析 构造原型
风险分析
风险分析
预算、方案、约束
风险分析
风险分析 原型1
原型2
生命周期计划 需求计划 开发计划
操作概念 需求确认
软件需求
集成和测试计划
设计验证与确认
评价本阶段 计划下一阶段
第二章 软件过程
2.3快速原型模型 快速原型模型
开始
停止
需求的采集和细化
产品样品 (需求确认 需求确认) 需求确认
快速设计
对原型加工 (需求精确化 需求精确化) 需求精确化
建造原型
用户评价原型
使用原型确定需求的过程
快速原型的本质是“快速”。开发人员 快速原型的本质是“快速” 应该尽可能快地建造出原型系统, 应该尽可能快地建造出原型系统,以加速软 件开发过程,节约软件开发成本。 件开发过程,节约软件开发成本。原型的用 途是获知用户的真正需求,一旦需求确定了, 途是获知用户的真正需求,一旦需求确定了, 原型将被抛弃。 原型将被抛弃。
增量模型(Incremental model) 1.4.3 增量模型
增量模型也称为渐增模型。 增量模型也称为渐增模型。 使用增量模型开发软件时, 使用增量模型开发软件时,把软件产品作为一系列的增 量构件来设计、编码、集成和测试。 量构件来设计、编码、集成和测试。每个构件由多个相互作 用的模块构成,并且能够完成特定的功能。使用增量模型时, 用的模块构成,并且能够完成特定的功能。使用增量模型时, 第一个增量构件往往实现软件的基本需求,提供最核心的功 第一个增量构件往往实现软件的基本需求,提供最核心的功 能。
原型模型的适应场合
原型模型比瀑布模型更符合人们认识事 物的过程和规律, 物的过程和规律,是一种较实用的开发 框架。 框架。 它适合于那些不能预先确切定义需求的 软件系统的开发, 软件系统的开发,更适合于那些项目组 成员(包括分析员、设计员、 成员(包括分析员、设计员、程序员和 用户) 用户)不能很好交流或通信有困难的情 况。
6.编码和单元测试 6.编码和单元测试 编码和单元测试 这个阶段的关键任务是写出正确的容易理解、 这个阶段的关键任务是写出正确的容易理解、 容易维护的程序模块。 容易维护的程序模块。 7.综合测试 7.综合测试 综合测试 这个阶段的关键任务是通过各种类型的测试 (及相应的调试 使软件达到预定的要求。 及相应的调试)使软件达到预定的要求 及相应的调试 使软件达到预定的要求。
02第二章:软件过程
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9
软件生命周期的基本任务 瀑布模型 快速原型模型 增量模型 螺旋模型 喷泉模型 Rational统一过程 敏捷过程与极限编程 能力成熟度模型
基本思想
使用原型及其他方法来尽量降低风险。 理解这种模型的一个简便方法,是把它 看做在每个阶段之前都增加了风险分析 过程的快速原型模型,如图2.5所示。图 中带箭头的点画线的长度代表当前累计 的开发费用,螺线旋过的角度值代表开 发进度。
图2.6 喷泉模型
为避免使用喷泉模型开发软件时开发过 程过分无序,应该把一个线性过程(例 如,快速原型模型或螺旋模型中的中心 垂线)作为总目标。但是,同时也应该 记住,面向对象范型本身要求经常对开 发活动进行迭代或求精。
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9
第二章:软件过程
软件工程过程是为了获得高质量软件 所需要完成的一系列任务的框架,它规定 了完成各项任务的工作步骤。 本章讲述在软件生命周期全过程中应 该完成的基本任务,并介绍各种常用的过 程模型。
第二章:软件过程
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9
图2.2 加入迭代过程的瀑布模型
瀑布模型的优点
可强迫开发人员采用规范的方法 严格地规定了每个阶段必须提交的文档 要求每个阶段交出的所有产品都必须经 过质量保证小组的仔细验证
瀑布模型的缺点
瀑布模型是由文档驱动的”:在可运行 的软件产品交付给用户之前,用户只能 通过文档来了解产品是什么样的。
RUP核心元素
软件工程讲义_第02章 过程综述
任务集
任务集定义了为达到一个软件工程动 作的目标所需要完成的工作。每一个 软件工程动作都由若干个任务集构成, 而每一个任务集都由工作任务、工作 产品、质量保证点和项目里程碑等组 成。通常选择最满足项目需要和适合 开发组特点的任务集。
普适性活动
软件项目跟踪和控制 风险管理 软件质量保证 正式技术评审 测量 软件配臵管理 可复用管理 工作产品的准备和生产
现代软件工程
第2章 过程综述
软件过程
软件同其他资产一样,是知识的具体体现,而 知识最初都是以分散的、不明确的、隐蔽的且不 完整的形式广泛存在的,因此,软件开发是一个 社会学习的过程。软件过程是一个对话,在对话 中,软件所必需的知识被收集在一起并在软件中 实现。过程提供了用户与设计人员之间、用户与 不断演化的工具之间以及设计人员与不断演化的 工具(技术)之间的交互途径。软件开发是一个 迭代的过程,在这个过程中,演化的工具本身就 作为沟通的媒介,每新一轮对话都可以从参与的 人员中获得更有用的知识。[BAE98]
过程技术
过程技术工具可以帮助软件开发组织对通 用过程框架、任务集和普适性活动建造自 动化的模型。 一旦创建了可接受的过程,其他过程技术 工具可用来分配、监测、甚至控制所有过 程模型中的软件工程任务。
产品与过程
如果过程很薄弱,最终产品必将受到影响。 但是对过程的过于依赖也是很危险的。
小结
软件工程是一门涉及软件开发过程、方法、 工具的学科。尽管有多种不同的软件工程 过程模型,但它们都定义了:一组框架活 动,完成每个活动的所包含的任务集,任 务完成所形成的工作产品,以及一组可应 用于整个过程的普适性活动。过程模式可 以用来定义过程的特征。 CMMI是一个全面的过程元模型,它描述 了成熟软件过程应该具备的特定目标、实 践和能力。
高级软件工程(第2章:软件过程)
(3)开发阶段
开发人员根据产品功能或特性规格说明书,完成软件的开发工作
(4)稳定阶段
稳定阶段着重于对产品的测试与调试,项目在此阶段尽量不再 增加新的功能。测试人员根据产品规格说明书,对开发人员提交的 软件产品进行功能和性能测试
(5)发布阶段
在确认产品质量符合发布标准之后,将产品的最终发布版本发布
四、现代软件过程模型 1. 形式化方法模型--变换模型 形式化方法是指“基于数学的和/或能被算法识别且进 行转换的软件开发方法” 其变换模型为:
说明:每个阶段都是由一次或多次迭代所组成,即重复 工作流的过程。
RUP模型的展开直观迭代示意图:
其中:RUP对每一个工作流均给出了定义。 即详细说明每一工作 流重点做什么,使用UML视图来描述,及描述过程的局部 过程模型等。
说明: ⑴ RUP用二维坐标来描述:(自己看) 纵轴以内容来组织,是自然的逻辑活动,体现开发过 程的静态结构。它表示软件开发生命周期的几个部分是 相互交错、反复迭代的,而不是一遍就可以完 成的; 横轴通过时间组织,是过程展开的生命周期特征,体 现开发过程的动态结构。它表示通过核心工作流的每一 个阶段的积累才可以完成一个完整的软件开发过程。 ⑵ RUP有三大特点: ① 软件开发是一个叠代过程 ② 软件开发是由Use Case驱动的 ③ 软件开发是以构架设计(Architectural Design)为 中心的 ⑶ RUP通常同UML( Unified Modeling Language—统 一建模语言)配套使用。
• • • • • •
• •
• • • •
我们的首要任务是通过尽早并且持续提供有价值的软件满足客户的需要。 即使在开发后期,也欢迎需求变更。敏捷过程驾驭变更,使客户获得竞争优 势。 频繁提供能够发挥作用的软件,间隔时间从几周到几个月,时间间隔越短越 好。 在整个项目期间,业务人员和开发人员每天都必须在一起工作。 围绕士气旺盛的人进行软件开发,向他们提供所需的环境和支持,相信他们 能够完成任务。 向开发团队和在开发团队内部传递信息最高效、最有效的方法,就是面对面 的交流。 能够发挥作用的软件是工作进展的主要度量标准。 敏捷过程提倡可持续开发。出资方、开发方和用户都应该能够保持一种长期、 稳定的开发速度。 对卓越技术和良好设计的不断追求可提高敏捷性。 简单--尽可能少的工作量是至关重要的。 最好的体系结构、需求和设计都来自于自组织团队。 团队定期反思如何提高有效性,并相应地调整自己的行为。
软件工程——2.软件过程模型
Describe how the system should perform the required tasks.
回顾: Software Life Cycle
(4) Implementation: Program various modules of the system. (5) Integration: Combine the modules and verify that the whole system works correctly. (6) Maintenance: Maintain the operation of the system, remove bugs as they are discovered. (7) Retirement: Migrate to a new system.
(可行性论证论告)
(需求说明书) (设计文档) (程序) (测试报告) (维护报告)
需求分析
开发 时期
设 计
编 码 测 试
运行时期
运行与维护
回顾:Software Life Cycle
(1) Requirements:
Identify the needs of the users by interviewing them. (2) Specification or Analysis: Describe what the software system should do to meet the requirements. (3) Design:
软件工程三要素:方法、工具、过程
2.1 软件过程
软件过程是“为了获得软件所需要完成的 一系列任务的工作步骤”。 软件过程定义了运用方法的顺序、各阶段 应交付的文档资料、为保证软件质量所要 采取的管理措施,以及标志软件开发各个 阶段任务完成的结果形式。
软件工程教案--第2章软件过程PPT资料82页
什么是软件工程?
什么是工程化思想?
什么是软件E过v程alu?a有tio哪n些on过ly程. 模型? ated with如A何sp建os立e.过Sli程de模s 型fo?r .NET 3.5 Client Profile 5.2
Copyright 2019-2019 Aspose Pty Ltd.
✓ 技术及工具框架:实现过程活动的自动化及需要的设备与 工具
14:58:49
重庆理工大学计算机科学与工程学院 李梁(liliang@)
5
2.1 软件过程-软件工程目标
目标 可修改性 有效性
•基本目标: 付出较低的开发成本达到要求的软件 功能取得较好的软件性能 开发的软件易于移植需要较低的维护
Copyright 2019-2019 Aspose P工t具y Ltd.
方法 过程
层次
质量焦点
✓ 软件工程是一门建立在以质量焦点为基础,分过程、方法和 工具三个层次的综合技术(三要素)
14:58:49
重庆理工大学计算机科学与工程学院 李梁(liliang@)
3
2.1 软件过程
Copyright 2019-2019 Aspose Pty Ltd.
任务明确、组织有序、纪律严明、整体优化
14:58:49
重庆理工大学计算机科学与工程学院 李梁(liliang@)
8
2.1 软件过程-软件过程模型
✓ 软件过程模型:就是把软件生命周期中各项开发活动的流程 用一个合理的框架(开发模型)来规范描述。
可适应性 可移植性 可追踪性
➢从短期效益看,追求高质量会延长软件开 发时间并且增大费用,似乎降低了生产率。
➢对开发人员而言,如果非得在质量与生产 率之间分个主次不可,那么应该是质量第一,
第2章软件过程
在维护和开发之间并没有本质区别。
2.2 传统软件过程模型
• 螺旋模型的缺点
➢ 螺旋模型是风险驱动的,因此要求软件开发人员 必须具有丰富的风险评估经验和这方面的专门知 识,否则将出现真正的风险:当项目实际上正在 走向灾难时,开发人员可能还以为一切正常。
• 通用过程框架
(4) 构造。构造活动包括一系列构件组装、编码和 测试任务,从而为向客户和最终用户交付可运行 软件做好准备。
(5) 部署。部署活动是将软件(全部或者完成的部 分)交付给用户,用户对其进行评测并给出反馈 意见。 部署活动包括三个动作:交付、支持和反馈。
2.1 软件过程框架
• 典型的普适性活动
2.2 传统软件过程模型
• 采用增量模型需注意的问题
(1)在把每个新的增量构件集成到现有软件体系结构 中时,必须不破坏原来已经开发出的产品。
(2)软件体系结构必须是开放的,即向现有产品中加 入新构件的过程必须简单、方便。 因此,采用增量模型比采用瀑布模型和快速原型模 型更需要精心的设计。
2.2 传统软件过程模型
• 螺旋模型
➢ 螺旋模型最初是Boehm于1988年提出来的。 ➢ 该模型将瀑布模型与快速原型模型结合起来,并
且加入两种模型均忽略了的风险分析。 ➢ 螺旋模型的基本思想是,使用原型及其他方法来
尽量降低风险。
2.2 传统软件过程模型
• 螺旋模型
➢ 理解这种模型的一 个简便方法,是把 它看做在每个阶段 之前都增加了风险 分析过程的快速原 型模型。
2.1 软件过程框架
• 通用过程框架
(3) 建模。建模的目的是为了更好地理解需要构建 的实体。
第2章 软件过程
图2.8 喷泉模型
小结 软件过程是为了获得高质量软件 产品所需要完成的一系列任务的框架, 它规定了完成各项任务的工作步骤。 软件过程必须科学、合理,才能开 发出高质量的软件产品。
软件生命周期在概念上划分成问 题定义、可行性研究、需求分析、概 要设计、详细设计、编码和单元测试、 综合测试、维护等八个阶段。 实际从事软件开发工作时,软件 规模、种类、开发环境、使用的技术 方法等因素,都影响阶段的划分。因 此,一个科学、有效的软件过程应该 定义一组适合于所承担的项目特点的 任务集合。
图2.2 实际的瀑布模型
演化模型 许多软件项目在开发早期对软件需求 的认识是模糊的、不确定的,因此软件很 难一次开发成功。 1、获取一组基本的需求后,通过快 速分析构造出该软件的一个初始可运行版 本原型(prototype) 2、根据用户在试用原型过程中提出 的意见和建议、或者增加新的需求,对原 型进行改造,获得原型的新版本,重复这 一过程,最终得到令客户满意的软件产品。
时,软件生命周期必须是循环的,
也就是说,软件过程必须支持反馈
和迭代。喷泉模型是一种典型的适
合于面向对象范型的过程模型。
每个软件开发组织都应该选择适 合于本组织及所要开发的软件特点的 软件生命周期模型。这样的模型应该 把各种生命周期模型的合适特性有机 地结合起来,以便尽量减少它们的缺
5.详细设计 具体任务是把解法具体化,即回答 “应该怎样具体地实现这个系统”。设 计出程序的详细规格说明。 6.编码和单元测试 关键任务是写出正确的容易理解、 容易维护的程序模块。 7.综合测试 通过各种类型的测试(及相应的调试) 使软件达到预定的要求。
6.编码 用某种程序设计语言,将设计 的结果转换为可执行的程序代码。 7.测试 发现并纠正软件中的错误和缺 陷。测试主要包括单元测试、集成 测试、确认测试和系统测试。
高级软件工程 第2章 软件过程
2.2 传统软件过程模型
➢ 最早提出传统过程模型是为了改变软件开发的混 乱状况,使软件开发更加有序。历史证明这些传 统模型为软件工程工作增加了大量有用的结构化 设计,并为软件团队提供了有效的路线图。
➢ 不管采用了何种过程模型,软件工程师通常都会 选择一个通用的过程框架,这个框架包含以下一 些框架活动:沟通、策划、建模、构建、部署。
第2章 软件过程
• 软件过程提高了软件工程活动的稳定性、可控性 和有组织性,如果没有过程约束,软件活动将失 控并变得混乱。
• 软件过程不是对如何构建计算机软件的严格的规 定,而是一种可进行适应性调整的方法,以便于 工作人员(软件团队)可以挑选适合的动作和任 务集合。
2.1 软件过程框架
• 过程框架
第2章 软件过程
• 软件过程框架 • 传统过程模型 • 专用过程模型 • 统一过程模型 • 敏捷过程模型
第2章 软件过程
• 当开发产品或构建系统时,遵循一系列可预测的 步骤(即路线图)是非常重要的,它有助于及时 交付高质量的产品。
• 软件开发中所遵循的路线图就称为“软件过程”。
第2章 软件过程
• 软件过程是工作产品构建时所执行的一系列活动、 动作和任务的集合。
• 通用过程框架
(2) 策划。策划活动协助软件开发团队定义全局目 标,并为后续的软件工程工作制定计划。策划活 动包括一系列管理和技术实践,如描述需要执行 的技术任务、可能的风险、资源需求、工作产品 和工作进度计划等。
2.1 软件过程框架
• 通用过程框架
(3) 建模。建模的目的是为了更好地理解需要构建 的实体。
(8)工作产品的准备和生产:包括创建产品所必须的 活动,如建模、文档、日志、表格和列表等。
软件工程 02_软件开发过程
• 尽可能的理解和掌握系统需求, • 清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理
实现。
2020/1/8
13
– 质量保证的观点
• 每个阶段都必须完成规定的文档,没有交出合格的 文档就是没有完成该阶段的任务。
• 每个阶段结束前都要对所完成的文档进行评审,以 便尽早发现问题,改正错误。
ownership) • 系统隐喻(System metaphor)
2020/1/8
33
SCRUM过程
• Scrum注重过程, XP注重实践
• 需求被定义为产 品需求积压 (product backlogs)
• 开发过程分为多 个冲刺(Sprint) 周期
• 燃尽图(burn down)是一个公开展示的图表, 显示当前冲刺中未完成的数目
3. 每种解决方法都要从三方面研究它的可行性:技术可行 性、经济可行性和社会可行性。
4. 描述所提出的解决方案和方案的可行性,并拟定开发计 划,包括对费用、时间、进度、人员组织、硬件配置、 软件开发环境和运行环境配置等进行说明和规划。
2020/1/8
6
需求分析
1. 在确定软件开发可行的情况下,对目标软件未来需要 完成的功能进行的详细分析。
软件定义
• 传统的生命周期模型,其 中具有代表性的包括瀑布 模型、原型模型、增量模 型等。
软件开发 软件维护
• 最基本和有效的可供选择 的软件开发模型。
2020/1/8
12
瀑布模型
• 在20世纪80年代之前,瀑布模型一直是唯一被广泛 采用的生命周期模型,现在仍然是应用得最广泛的 过程模型。
• 按照传统的瀑布模型来开发软件,有如下特点。
软件与软件工程-软件过程
2.3 软件过程模型
3.瀑布模型与快速原型模型之间地关系
2.3 软件过程模型
2.3 软件过程模型
• 2.3.5 喷泉模型
喷泉模型是一种过程模型,同时也支持面向对象开发。在面向对 象地方法中,分析模型与设计模型采用相同地符号标示体系,各阶 段之间没有明显地界限,而且常常重复,迭代地进行。
“喷泉”一词体现了面向对象方法地迭代与无间隙性。迭代是 指各阶段需求多次重复,例如,分析与设计阶段常常需求多次,重 复进行,以更好地实现需求。无间隙性是指各个阶段之间没有明 显地界限,并常常在时间上互相交叉,并行进行。
2.3 软件过程模型
2.瀑布模型与增量模型之间地关系
增量模型是把待开发地软件系统模块化,将每个模块作为一个 增量组件,一个模块接着一个模块地进行开发,直到开发完所 有地模块。
在开发每个模块时,通常都是采用瀑布模型,从分析,设计,编码 与测试这几个阶段进行开发。所以,增量模型中有瀑布模型, 即宏观上是增量模型,微观上是瀑布模型。
增量模型地缺点是要求待开发地软件系统可以被模块化。如果待开
2.3 软件过程模型
增量模型适用于具有以下特征地软件开发项目。 软件产品可以分批次地进行交付 待开发地软件系统可以被模块化 软件开发人员对应用领域不熟悉,难以一次性地进行系统开发 项目管理人员把握全局地水平较高
2.3 软件过程模型
• 2.3.4 螺旋模型 • 螺旋模型是一种用于风险较大地大型软件项目开发地过程
2.3 软件过程模型
• 2.3.1 瀑布模型
瀑布模型是一种线性地开发模型,具有不可 回溯性。开发人员必须前一阶段地任务完成 后,才能开始进行后一阶段地工作,并且前一 阶段地输出往往就是后一阶段地输入。由于 其不可回溯性,如果在软件生命周期地后期 发现并要改正前期地错误,那么需求付出很 高地代价。传统地瀑布模型是文档驱动地。 如图所示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章:软件过程目标:软件工程和软件过程模型的概念;了解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.系统原型:快速开发一个系统版本或者是系统的一个部分,以检验客户需求和某些设计决定的可行性。
它支持变更避免,因为它允许客户试用正式交付之前的系统,并重新审视和定义需求。
因此在交付正式系统之后,客户提出的需求变更的数目将会降低。