软件开发过程大观——软件开发过程改进为什么能帮助软件质量提升?

软件发展的二个典型趋势

1、软件规模日益扩大。类似摩尔定律,功能类似的软件系统的规模大约每18个月翻一番,每5年,功能类似的软件系统的规模扩大为原来系统的10倍。

2、软件在整个系统中的比重日益增加。20世纪60年代,F-4战机中,由软件来完成的功能约占整体功能的8%,21世纪,F-22战机中,由软件来支持的功能则达到了整体功能的80%

以上趋势使得软件软件质量问题越来越突出。

软件规模日益扩大,使得软件越来越难做;软件比重的日益增加,使得软件质量问题的影响越来越广泛和严重。

软件开发项目经常陷入包括软件质量不佳、项目进度延期、成本超支、客户不满……等等的“焦油坑”。

在传统行业,质量管理和企业管理方面的经验和理论表明,产品的质量取决于过程的质量。

用工程化的思想来管理软件开发,借鉴传统行业在质量管理方面的经验,可以在一定程度上缓解上述问题。

软件工程,是研究以一种高效的方式提供高质量软件产品的工程学科。

软件开发过程的发展历史

20世纪50年代,没有成熟的程序设计语言,软件开发需要直接面对硬件环境。

20世纪60年代,软件作坊(Softwarecrafting)诞生。

软件开发的特殊性被发现:

1、软件可以复制。不需要昂贵的生产线就可以复制软件。

2、软件比硬件容易修改。由此形成了“Codeand fix”的开发方法。

但软件随意的修改,也带来了严重的隐患:软件的演化更加随意,跟踪困难,最终形成了类似意大利式面条的局面(“一团糟”)。

此期间也形成了倡导自由精神的黑客文化和牛仔风格的牛仔式程序员(他们采用急速而草率的方式,可以连续通宵达旦的连续工作多天,在截至日期前完成存在很多缺陷的代码)。

20世纪70年代,形式化方法与瀑布过程。

程序编码应该更加精心的组织,在设计之前,需要经过更加仔细的需求工程。

形式化方法,在可伸缩性和易用性方面存在很多困难。

20世纪80年代,生产率和可伸缩性。

在过程标准方面的投入,可以减少软件开发过程的返工,显著提高软件生产率。

美国国防部DoD与CMU联合成立了  SEI来制定过程标准。

20世纪90年代,并发过程和顺序过程。

关注产品上线时间,导致并发过程的兴起,并行工程的风险带来风险驱动的螺旋模型。

1991年,SEI发布CMM1.0; 1993年,SEI发布CMM1.1。

CMM针对组织级的软件过程标准粒度较粗,还需要考虑更小的组织单位,即个人软件过程(PSP)和小组软件过程(TSP)。

SEI在CMM基础上,进一步提炼组织级软件过程改进的一般性理论框架,发布了IDEAL模型。IDEAL模型就像是传统行业质量管理的PDCA模型在软件行业的推广,是一种比较通用的理论框架。

2000年,敏捷方法,基于价值的方法

敏捷方法,如自适应软件开发、Crystal方法、动态系统开发、XP、FDD、Scrum等

基于价值的方法,低风险高动态变化的,适用于轻量级的敏捷开发方法,高风险低变更(固定)的,适用于规范化的计划驱动的方法。

2000年,SEI发布了CMMI1.0,2010年,发布了CMMI1.3.

2010年,DevOps的出现,方法、工具、技术上引发了一些新的变化。

精益方法(lean Development)是支撑DevOps的理论基础。

DevOps的开发工具集和整体解决方案的出现。

虚拟化的平台技术如云计算、容器,微服务架构,自动化技术

PSP(Personal Software Process)

一种个人级用于控制、管理和改进工程师个人工作方式的持续改进过程。

包括数据记录表格、过程操作指南、规程

PSP过程度量包括:

1、度量时间

2、度量缺陷

3、度量规模

过程质量的度量指标包括:

1、Yield,度量每个阶段在消除缺陷方面的效率。

(1)Phase Yield,表示某个阶段缺陷消除的效率。

(2)Process Yield,表示在第一次编译前消除缺陷的效率。

2、A/FR,Appraisal toFailure Ratio,质检失效比。A/FR=质检成本/失效成本。

A/FR用于指导工程师合理安排评审和测试时间。A/FR越高,质量越高,也意味着过多的评审。

3、PQI,Process QualityIndex,过程质量指标。用于度量PSP过程的整体质量。

4、Review Rate,评审的速度。用户指导工程师开展有效评审的指标。

统计表明,代码评审速度小于200代码行(LOC)/小时,文档评审速度小于4页(Page)/小时,就可以保证工程师有效的发现足够多的缺陷。

TSP(Team Software Process)

一种小组级用于控制、管理和改进小组工作方式的持续改进过程。

过程改进参考模型和标准

1、CMM

过程控制和过程管理的方法。可用于软件过程改进、过程评估、软件能力评价。

18个关键过程域。

2、CMMI

整合了三个模型。

25个关键过程域。

3、SPICE(Software ProcessImprovement and Capability Determination),软件过程改进和能力鉴定标准。软件过程评估国际标准。

4、ISO/IEC 15504,软件过程评估标准,是SPICE的演化。

5、ISO/IEC 12207,软件生命周期过程标准。

6、ISO 9000

2017-12-14

--------------------------------------

软件开发过程大观——软件开发过程改进为什么能帮助软件质量提升?相关推荐

  1. 举例说明层次分析的三大原则_20202021企业软件开发流程(3)软件开发过程和软件开发原则...

    知识点 1.软件过程就是软件开发过程中软件活动的集合. 2.软件过程各阶段定义 1)问题定义:人们通过开展技术探索和市场调查等活动,研究系统的可行性和可能的解决方案,确定待开发系统的总体目标和范围. ...

  2. 软件开发质量改进措施_改进可能是软件开发人员面临的最大挑战,因此我们该如何做...

    软件开发质量改进措施 Don't get me wrong I don't hate my profession, in fact, I love to code. Having only the n ...

  3. 《企业软件交付:敏捷与高效管理精要》——3.4 企业软件交付的软件工厂方法...

    3.4 企业软件交付的软件工厂方法 正如我们前面讨论的,今天的机构面对的商业环境正以前所未有的速度发生变化.与此同时,这些机构还要管理和降低整个机构的运营成本.这就直接意味着,他们不仅要最大限度地减少 ...

  4. 软件开发、软件设计培训笔记

    一.代码质量的提高培训笔记(2013.11.29): 部分内容摘自网络: 1.      struct:注意成员排列顺序. 2.      #pragma pack(1) :指定按1字节对齐. 3.  ...

  5. 【软件分析】软件分析、设计与建模迭代式详解

    软件分析.设计与建模迭代式详解 1.introduction 1.1 OOA/D 1.2 Iterative, Evolutionary, and Agile 2.Case Study and Req ...

  6. 2011年软件水平考试软件设计师辅导资料(1)

    2011年软件水平考试软件设计师辅导资料(1) 第一章 绪论 第一节 软件工程的产生 软件:计算机程序及其说明程序的各种文档."程序"是计算任务的处理对象和处理规则的描述. 软件的 ...

  7. 『软件工程6』详解软件项目管理之软件范围与估算

    软件项目管理--软件范围与估算 一.软件项目计划 1.目标 2.步骤 二.软件范围 1.软件范围定义 2.软件范围--引例 三.影响估算的因素 四.软件项目资源 1.软件项目资源构成 2.分析图 3. ...

  8. 中关村在线 测试软件,主观测试软件:ZOL Monitor LCD 简介

    ZOL Monitor LCD简介: 无论采用什么样的显示器测试手段,最终决定一款产品优劣与否的重要一环,依旧还是使用者的眼睛!因为,再精密的仪器有时也无法完全替代人们的主观感受.也正因如此,我们中关 ...

  9. 剖析:从软件加密到软件授权保护

    一直在关注软件授权保护相关的技术内容,发现一些基本概念经常容易被我们混淆,比如软件保护,软件加密,硬件加密,软件授权等,下面就阐述一下我对上述概念的理解,以及它们之间的关系. AD:网+线下沙龙 | ...

最新文章

  1. 洛谷 P3112 [USACO14DEC]后卫马克Guard Mark
  2. JAVA 调用Web Service
  3. UML图系列——UML模型图的构成
  4. 台式无线网卡管理服务器,台式电脑设置wifi上网
  5. 神策数据 VP 张涛:个性化推荐从入门到精通(附推荐产品经理修炼秘籍)
  6. boost::geometry::svg用法的测试程序
  7. Leetcode No.146 ****
  8. vim-录制命令的使用
  9. (四)Netty之Buffer缓冲区
  10. Centos6.x X64 飞信安装
  11. 直接拿来用!Google 新推 AI 模型打破了现有 CNN 技术壁垒
  12. 100个最佳Linux站点
  13. 地震matlab频域分析,基于matlab的地震数据的分析.doc
  14. rs429-HI3282-HI3182笔记
  15. linux 压力测试pps,开发一款集群ddos防火墙压力测试
  16. Kafaka的消息消费方式
  17. 快速学习nodejs系列:微信公众号开发一之环境准备
  18. java获取法定节假日_java 获取n个工作日后的日期(包含法定节假日、双休日、节后补班)...
  19. 推荐机制 协同过滤和基于内容推荐的区别
  20. 通过光盘安装Ubuntu18.04教程

热门文章

  1. golang 如何快速测试代码
  2. 虚拟机、容器和沙箱是什么关系?
  3. 图形学-二维图形的裁剪1.Cohen 2.Liang
  4. SAP携手“大数据之都” 共推大数据创新
  5. 非科班程序员半路出家并成功进入eBay,秘籍在这里
  6. [bzoj3698]XWW的难题 有源汇的上下界最大流
  7. 4.Python数据结构及算法----无序和有序列表:链表
  8. 制造linux安装系统老毛桃u盘
  9. Android 腾讯TUIKIT IM即时通信聊天界面语音问题备忘
  10. CSS学习案例(16):网易云音乐导航栏