第四章 软件开发过程

课程来源: 学堂在线 -- 清华大学 -- 软件工程

重点掌握概念和知识点:

  • 软件过程概念及其组成
  • 传统软件工程模型如:瀑布、原型、增量模型的特点及其适用场合
  • 迭代模型特点及其适用场合

4.1 软件过程

学习目标

  • 过程的含义
  • 过程在软件开发管理中起到的作用
  • 软件过程包含的基本活动

基本概念 

过程是一组将输入转化为输出的相互关联或相互作用的活动

产品质量保证的关键在于对软件开发过程进行有效控制,对最终产品进行质量检验只能验证产品的输出质量而无法保证产品就是符合用户需求的。

过程方法是系统地识别和管理组织内所使用的过程,保证更有效地获得期望的结果。

过程通常包括管理过程、实现过程、支持过程

实现过程:提供有价值产品或服务的关键性活动,负责把输入转化为输出

管理过程:衡量和评价实现过程和支持过程的效能,建立起组织的质量管理体系

支持过程:提供所需要的资源和能力,从而使关键性的实现活动能够顺利进行

软件开发活动 

问题定义:人们通过开展技术探索和市场调查等活动,研究系统的可行性和可能的 解决方案,确定待开发系统的总体目标和范围

需求开发在可行性研究之后,分析、整理和提炼所收集到的用户需求,建立完整的 需求分析模型,编写软件需求规格说明

软件设计根据需求规格说明,确定软件体系结构,进一步设计每个系统部件的实现 算法、数据结构及其接口等

 软件构造(复杂且迭代):概括地说是将软件设计转换成程序代码,这是一个复杂而迭代的过程,要求 根据设计模型进行程序设计以及正确而高效地编写和测试代码

软件测试: 检查和验证所开发的系统是否符合客户期望,主要包括单元测试、子系统 测试、集成测试和验收测试等活动

软件维护(循环往复的过程): 系统投入使用后对其进行改进,以适应不断变化的需求。完全从头开发的 系统很少,将软件系统的开发和维护看成是一个连续过程更有意义

软件开发管理

 软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对成本、 人员、进度、质量和风险进行控制和管理的活动

软件配置管理是通过执行版本控制、变更控制的规程,并且使用合适的配置管理软件, 来保证所有产品配置项的完整性和可跟踪性 

  • 版本管理:跟踪系统中每个组件的多个版本来保证开发者对组件的修改不会产生混乱
  • 系统构建:将不同的组件进行编译、链接,组成一个可执行的系统
  • 变更管理:对开发过程中,来自用户和开发者的变更请求进行分析和评估,做出适当的决策,决定是否变更及何时变更
  • 发布版本管理:准备发布的软件并对用户使用的软件进行持续跟踪

4.2 软件过程模型

基本概念

模型简介

  1. 瀑布模型  将基本的开发活动看成是一系列界限分明的独立阶段,这是 一种计划驱动的软件过程,有利于规范软件开发活动
  2. 原型化模型 原型是一个部分开发的产品,用于加强对系统的理解,有助 于明确需求和选择可行的设计策略
  3. 迭代式开发 将描述、开发和验证等不同活动交织在一起,在开发过程中 建立一系列版本,将系统一部分一部分地逐步交付
  4. 可转换模型 利用自动化的手段,通过一系列转换将需求规格说明转化为 一个可交付使用的系统

 瀑布模型

问题 

  • 瀑布模型是否反映了实际的软件开发过程?
  • 软件开发作为一个问题求解过程,应当具备什么特点?

软件开发的迭代性

 原型化模型

相关视频:http://h p://v.youku.com/v_show/id_XMjcyMTM1OTI=.html

 迭代式开发

  • 更快速地发布产品
  • 追求产品创新
  • 需求不确定性高
  • 需要快速响应用户的变化
  • 关注用户行为

 

增量模型: 在每一个新的发布中逐步增加功能直到构造全部功能

迭代模型:一开始提交一个完整系统,在后续发布中补充完善各子系统功能

 更为形象展示如下

可转换模型 

案例分析 

案例一 汽车制动防抱系统
  • 汽车制动防抱系统(Anti-locked Braking System,简称  ABS)是一种具有防滑、 防锁死等优点的汽车安全控制系统 

  • 该系统通过汽车微电脑控制,以非常快的速度精密地控制制动液压力的收放,从而 达到防止车轮抱死,确保轮胎的最大制动力以及制动过程中的转向能力,使车辆在 紧急制动时具有躲避障碍的能力

实例分析

  •  嵌入式控制系统
  • 该系统对安全性和可靠性要求极高,需要在投入运行前进行验证
  • 适合采用可转换模型
案例二 网络公开课程网站 
  • 某公司准备开发一个大规模在线公开课程网站,支持学校将自己的课程录像、课件 及参考资料等公布在网上,学生可以进行自主学习
  • 该系统将教育、娱乐和社交网络结合在一起,创造了一种新型的网络教育模式,对 传统的高等教育模式带了很大的冲击

实例分析

  •  系统需求会经常发生变化,业务模式存在不确定性
  • 系统应该易于维护和修改
  • 适合采用迭代式模型 

4.3 敏捷开发过程

传统软件开发模式

开发阶段严格按照线性方式进行,每一个阶段具有相关的里程碑和交付产品,且需要确认和验证 

特点

  • 以预测性为原则
  • 以文档驱动开发过程
  • 以过程控制为核心

软件开发之道

 软件项目中难以预知所有的内容和风险!!!

  •  软件开发是一个逐步认知和明晰的活动
  • 软件开发中的变化是实际存在和必然的

软件开发应更关注于交付的价值 

  • 高质量的交付物是最重要的
  • 系统不是一次构建而成,而是迭代演进的
  • 基于完整的场景构建计划,并按优先级执行

互联网时代的软件开发 

  • 快鱼吃慢鱼
  • 版本发布成本很低
  •  追求创新
  • 需要快速响应用户的变化
  • 需求不确定性高
  • 关注用户行为

敏捷开发方法

敏捷开发是一种基于更紧密的团队协作、能够有效应对快速变化需求快速交付高质量软件的迭代增量的新型软件开发方法。   

  • 更关注协作
  • 更关注质量
  • 更关注可工作的产品
  • 更关注全才化的专才
  • 基于实践而非基于理论

敏捷方法: 需求而非预测 

 

 敏捷宣言

  • 我们的最高目标是,通过尽早和持续地交付有价值的软件来满足客户。
  • 欢迎对需求提出变更——即使是在项目开发后期。要善于利用需求变更,帮助客户获得竞争优势。
  •  要不断交付可用的软件,周期从几周到几个月不等,且越短越好
  •  项目过程中,业务人员与开发人员必须在一起工作
  •  要善于激励项目人员,给他们以所需要的环境和支持,并相信他们能够完成任务。
  •  无论是团队内还是团队间,最有效的沟通方法是面对面的交谈
  • 可用的软件衡量进度的主要指标。
  •  敏捷过程提倡可持续的开发速度,项目方、开发人员和用户应该能够保持恒久稳定的进展速度。
  •  坚持不懈地追求技术卓越和良好设计,这将提升敏捷能力。
  •  要做到简单,即尽最大可能减少不必要的工作,这是一门艺术。
  •  最佳的架构、需求和设计出自于自组织的团队
  •  团队要定期反省如何能够做到更有效,并相应地调整团队的行为。

传统开发  vs.  敏捷开发 

 

好的架构(产品)是长出来的,而不是设计出来的 

敏捷开发方法

 

敏捷开发方法是一组轻量级开发方法的总称,包含很多具体的开发过程和方法, 最有影响的两个方法是极限编程(XP)和Scrum开发方法。

 

Scrum方法

Scrum框架

Scrum迭代开发 

迭代开发将整个软件生命周期分成多个小的迭代(一般2~4周),每一次 迭代就是一个小的瀑布模型,包括需求分析、设计、实现和测试等活动, 结束时都要生成一个稳定和被验证过的软件版本。

迭代开发的关键要点

  • 每一次迭代都建立在稳定的质量基础上,并做为下一轮迭代的基线,整个系统的 功能随着迭代稳定地增长和不断完善
  • 每次迭代要邀请用户代表验收,提供需求是否满足的反馈
  • 在一次迭代中,一旦团队作出承诺,就不允许变更交付件和交付日期;如果发生 重大变化,产品负责人可以中止当次迭代
  • 在迭代中可能会出现“分解”和“澄清”,但是不允许添加新工作或者对现有的 工作进行“实质变更”
  • 对于“分解”和“澄清”,如果存在争议,那么将其认定为变更,放到产品订单 中下一次迭代再考虑

敏捷开发应用 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值