软件工程的七条基本原理:经典
软件工程的七条基本原理

(本文从AKA杂志转载)

  自从1968年提出“软件工程”这一术语以来,研究软件工程的专家学者们陆续提出了100多条关于软件工程的准则或信条。 美国著名的软件工程专家 Boehm 综合这些专家的意见,并总结了TRW公司多年的开发软件的经验,于1983年提出了软件工程的七条基本原理。

  Boehm 认为,这七条原理是确保软件产品质量和开发效率的原理的最小集合。它们是相互独立的,是缺一不可的最小集合;同时,它们又是相当完备的。

  人们当然不能用数学方法严格证明它们是一个完备的集合,但是可以证明,在此之前已经提出的100多条软件工程准则都可以有这七条原理的任意组合蕴含或派生。

  下面简要介绍软件工程的七条原理:

1 用分阶段的生命周期计划严格管理

  这一条是吸取前人的教训而提出来的。统计表明,50%以上的失败项目是由于计划不周而造成的。在软件开发与维护的漫长生命周期中,需要完成许多性质各异的工作。这条原理意味着,应该把软件生命周期分成若干阶段,并相应制定出切实可行的计划,然后严格按照计划对软件的开发和维护进行管理。 Boehm 认为,在整个软件生命周期中应指定并严格执行6类计划:项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划、运行维护计划。

2 坚持进行阶段评审

  统计结果显示: 大部分错误是在编码之前造成的,大约占63%; <2> 错误发现的越晚,改正它要付出的代价就越大,要差2到3个数量级。 因此,软件的质量保证工作不能等到编码结束之后再进行,应坚持进行严格的阶段评审,以便尽早发现错误。

3 实行严格的产品控制

  开发人员最痛恨的事情之一就是改动需求。但是实践告诉我们,需求的改动往往是不可避免的。这就要求我们要采用科学的产品控制技术来顺应这种要求。也就是要采用变动控制,又叫基准配置管理。当需求变动时,其它各个阶段的文档或代码随之相应变动,以保证软件的一致性。

4 采纳现代程序设计技术

  从六、七时年代的结构化软件开发技术,到最近的面向对象技术,从第一、第二代语言,到第四代语言,人们已经充分认识到:方法大似气力。采用先进的技术即可以提高软件开发的效率,又可以减少软件维护的成本。

5 结果应能清楚地审查

  软件是一种看不见、摸不着的逻辑产品。软件开发小组的工作进展情况可见性差,难于评价和管理。为更好地进行管理,应根据软件开发的总目标及完成期限,尽量明确地规定开发小组的责任和产品标准,从而使所得到的标准能清楚地审查。

6 开发小组的人员应少而精

  开发人员的素质和数量是影响软件质量和开发效率的重要因素,应该少而精。这一条基于两点原因:高素质开发人员的效率比低素质开发人员的效率要高几倍到几十倍,开发工作中犯的错误也要少的多; 当开发小组为N人时,可能的通讯信道为N(N-1)/2, 可见随着人数N的增大,通讯开销将急剧增大。

7 承认不断改进软件工程实践的必要性

  遵从上述六条基本原理,就能够较好地实现软件的工程化生产。但是,它们只是对现有的经验的总结和归纳,并不能保证赶上技术不断前进发展的步伐。因此,Boehm提出应把承认不断改进软件工程实践的必要性作为软件工程的第七条原理。根据这条原理,不仅要积极采纳新的软件开发技术,还要注意不断总结经验,收集进度和消耗等数据,进行出错类型和问题报告统计。这些数据既可以用来评估新的软件技术的效果,也可以用来指明必须着重注意的问题和应该优先进行研究的工具和技术。

软件工程的七条基本原理:经典相关推荐

  1. 华院计算 | 简单的七条小桥引出了复杂的网络科学

    [摘要] 本文简略地介绍了网络科学的前世今生.从有趣的哥尼斯堡七桥问题谈起,引出了数学图论的诞生,介绍了随机图网络.小世界网络和无标度网络等三个经典代表性复杂网络模型,包括它们的生成机制和基本特性,并 ...

  2. Unobtrusive JavaScript 不唐突的JavaScript的七条准则

    Unobtrusive JavaScript是一种将Javascript从HTML结构抽离的设计概念,避免在HTML标签中夹杂一堆onchange.onclick--等属性去挂载Javascript事 ...

  3. JavaScript七种非常经典的创建对象方式

    JavaScript创建对象的方式有很多,通过Object构造函数或对象字面量的方式也可以创建单个对象,显然这两种方式会产生大量的重复代码,并不适合量产.接下来介绍七种非常经典的创建对象的方式,他们也 ...

  4. Effective Java第七条:避免使用终结方法

    第七条:避免使用终结方法 1,  终结方法(finalizer)会让程序不稳定,性能降低,出现可移植性的问题. 2,  Finalizer在c++中师析构器(destructors)的一部分,用作回收 ...

  5. 从创业失败中学到的七条教训

    摘要:每个创业者不可能首次创业就能成功.他们的失败经验,或许可以指导其他创业者获得迅速成功.Joshua Hays在文章<7 things I learned from failing that ...

  6. java script创建对象_JavaScript七种非常经典的创建对象方式

    JavaScript创建对象的方式有很多,通过Object构造函数或对象字面量的方式也可以创建单个对象,显然这两种方式会产生大量的重复代码,并不适合量产.接下来介绍七种非常经典的创建对象的方式,他们也 ...

  7. 动画设计的12条基本原理

    动画设计的12条基本原理 1.      Squash and Stretch 挤压和拉伸 l  定义: 这个操作产生了对重量和体积的一个假象.同时挤压和拉伸在面部表情和动画的对话框处理也有用到. l ...

  8. 让你心静的七十五条经典修心格言(转)

    转发一篇好文,闲来无事看看聊以自慰,修身养性! 让你心静的七十五条经典修心格言 1.心外无物,闲看庭前花开花落:去留无意,漫随天外云卷云舒. 2.静以修身,俭以养德,非淡泊无以明志,非宁静无以致远. ...

  9. 负载大逃亡:四十二路怪兽联军及七条逃生法则(很喜欢)

    负载大逃亡:四十二路怪兽联军及七条逃生法则 摘要:横向扩展与纵向扩展帮助我们处理了大量的高负载问题,然而优秀的程序设计仍然是不可忽视的.一个有设计缺陷的应用程序在低负载情况下可能表现不出来,然而随着负 ...

最新文章

  1. mxnet中ndarray*ndarray用来作为掩码进行与运算的用法
  2. 一文带你学会国产加密算法SM4的vue实现方案
  3. python在化学方面的应用-python化学库
  4. 信息系统项目管理师一些重要问题和知识点
  5. Linux内核分析---进程的创建,执行与切换
  6. geth bootnodes
  7. Vue 页面如何利用生命周期函数监听用户预览时长
  8. 系统批量运维管理器Fabric详解
  9. ie8 html5上传,兼容IE8的file单文件上传(jquery.form+formdata)
  10. Android源码下载编译(高通)
  11. 软件系统分析设计过程方法精要
  12. SUSE12系统安装
  13. Matplotlib风羽自定义
  14. Linux常用命令以及vim的使用
  15. 美克美家php面试,(⊙o⊙)细说【美克美家】之待遇
  16. 作文 深海机器人_海底机器人作文500字
  17. 公司USB设备管理策略方案
  18. 看书必备epub阅读器
  19. 跟着尚硅谷学大数据(二)MapReduce
  20. openssh mysql_§6-1 OpenSSH 的简介, ssh 和scp的使用

热门文章

  1. runat=server 所代表及隐含的意义
  2. hdu 1540(线段树单点更新 区间合并)
  3. hdu 2155(dp)
  4. linux read命令用法
  5. MIPI related
  6. Vue入门:Vue项目创建及启动
  7. 将0移到最后,在原数组操作,并且不能改变源数据顺序(JS编程)
  8. ab ApacheBench web测试工具
  9. Android应用清单文件:AndroidManifest.xml
  10. HTML5实战 学习笔记