事实与谎言 - 软件工程
人 (People)
1) 程序员的质量是软件工作中最重要的因素
2) 最好的程序员最多可能有28倍于最差的程序员
3) 延迟的项目后期加人手只能使项目交付工期延迟的更多
4) 工作环境对生产力和质量有深刻的影响
工具和技术 (Tools and Techniques)
5) 工具的宣传和广告是软件公司的灾难
6) 使用新的工具和技术起初会损失一点生产力和质量
7) 软件开发人员对工具谈论的很多却实际使用的很少
项目估计 (Estimation)
8) 失败的项目的两个原因之一就是糟糕的项目估计
9) 项目估计常常在错误的时间发生
10) 项目估计常常由错误的人完成
11) 项目估计很少在项目进行中进行修正
12) 项目管理人员往往和开发人员脱节
13) 可行性研究的回答永远是‘Yes’
重用 (Reuse)
14) 小规模的重用就是一个解决的问题
15) 中规模的重用主要是一个没有解决的问题
16) 大规模的重用在产品家族或相关系统中最能体现出来
17) 可重用的组件比一般组件开发难度大三倍
18) 对可重用代码的更改特别具有出错的倾向
19) 代码重用问题的解决方案是设计模式重用
需求 (Requirements)
20) 失败的项目的两个原因之一就是不确定的需求
21) 需求的理解错误是生产中修正代价最昂贵的
22) 需求错误的修正中最难修正的就是需求丢失
设计(Design)
23) 当模糊的需求增长的时候,相应解决方案产生的需求呈现爆炸性的增长
24) 很少有一个软件问题的最佳解决方案
25) 设计是复杂的螺旋的过程,初始的设计通常是错误的,至少肯定不是最佳的
编码(Coding)
26) 设计者的初衷很少和编码者的初衷相匹配
27) COBOL是非常糟糕的语言,但其他语言更糟糕
28) 修正错误 (Error Removal)
29) 修正错误是软件生命周期中耗时最多的
测试 (Testing)
30) 软件测试通常只有55%-60%的覆盖率
31) 100%的覆盖率也远远不够
32) 测试工具是关键,但很少被使用
33) 自动化测试很少能做到,大部分测试活动不能被自动化
34) 程序员写的内嵌的调试代码是测试工具的重要补充
代码检查(Reviews and Inspections)
35) 严格的代码检查可以在进行测试之前去除最多90%的错误
36) 严格的代码检查不能代替测试
37) 项目交付后的Review,项目完工后的总结非常重要但很少发生
38) 检查不仅是技术上的,也有设计上的,流程上的,和项目管理上的。
维护(Maintenance)
39) 维护通常占到40%-80%的软件成本。这可能是软件生命周期中最重要的。
40) 功能增强(Enhancements)占到维护成本的60%
41) 维护性是整体解决方案的一部分,而不是一个后来才出现的问题
42) 对现有软件的理解是维护中最困难的部分
43) 更好的方法带来更好的维护性,而不是更麻烦
质量(Quality)
44) 质量是属性的集合
45) 质量不是用户满意,而是满足设计需求,符合项目计划和成本要求,以及可靠性。
可靠性(Reliability)
46) 很多错误是大部分程序员都会犯的
47) 很多错误很可能聚集在某处
48) 没有单个的最佳方案来解决所有问题
49) 错误永远存在。目标应该是最小化错误,或者消除严重的错误,不影响软件的正常使用。
性能(Efficiency, performance)
50) 高性能更多的来源于优秀的设计而不是编码
51) 高组织的高级语言代码最多能获得90%的汇编程序性能
52) 提高性能需要在时间和空间上做折中 (Tradeoffs)