软件工程的事实
一、管理
1、 在软件开发过程中,重要的不是程序员使用的工具和技术,而是程序员本身
2、 最差的程序员同最优的程序员,差距可以达到30倍
3、 工作环境同效率和质量有深刻的影响
4、 软件工具对效率和质量的提高几乎只有5%--35%间。
5、 每个人都认为大规模的复用(主件或者构建)是重要的,但是到目前还没有基本解决。
6、 修改复用的组件代价极高,如果修改一个组件超过20%-25%的代码量,建议重新实现
7、 问题的复杂性增加25%,则解决方案的复杂性则增加100%
8、 软件开发过程,是80%的智力劳动,20%的书写文书
二、生命周期
1、 导致项目失控的两个常见原因之一是失控的需求
2、 软件开发过程中修改错误的代价较小,在产品中修改错误代价极大
3、 从需求到设计,因为指定方案的复杂性,会激增出大量的衍生需求,设计需求是原生需求的50倍
4、 从设计到编码,尽可能是同一团队;否者,则尽可能在设计时让编码人员参与,并尽量统一原语称谓
5、 测试人员认为已经完全测试了的程序,其实仅仅是完全测试的50%-60%;靠人工进行完全测试是不可能的
6、 程序员尽可能在程序编码中嵌入参数式测试编码
7、 维护成本通常占软件成本的40%-80%,因此,维护应该是软件生命周期中最重要的阶段
8、 增强功能大约占维护成本的60%,清楚错误几乎是17%,所以维护中功能增强是主体
9、 软件维护同软件开发,除开维护中“理解现有产品”意外,其他是一样的。
三、质量
1、 没有唯一且快速消除软件错误的方法。
2、 总会有残余的软件错误;目标是消除严重的错误或者使它更少
3、 软件开发中,效率来自于设计,而不是编码
4、 在空间和时间中,存在折衷的一面;提高一方,则总会降低一方。