9 未雨绸缪
不变只是愿望,变化才是永恒
- 为变更计划系统。使用高级语言和自文档技术,以减少变更引起的错误。
- 为变更计划组织架构。管理人员参与技术课程,高级技术人才进行管理培训。
- 软件维护,主要包含对设计缺陷的修复。
“前进两步,后退一步”:缺陷修复总会以20-50%的几率引入新bug;每次修复后,必须重新运行先前所有的测试用例,确保系统不会以更隐蔽的方式被破坏;设计实现的人员越少、接口越少,产生的错误也越少。
“前进一步,后退一步”:软件开发是减少混乱度(减少熵)的过程,本身是处于亚稳态的;软件维护是提高混乱度的过程,只是放缓了系统退化到非稳态的进程。
10 项目进度
- 进度表上的“里程碑”。原则只有一个,必须是具体的、特定的、可度量的事件,不存在90%或99%完成,而是100%完成的事件,能划分出阶段:计划、编码、调试。
- 保持“进取”的心理素质。关心每一天的滞后,为异常事件提供了缓冲和储备。
- “计划日期”和“估计日期”。前者是项目经理的产出,代表了合理计划之前的判断;后者是最基层经理的产出,代表了在现有资源、必要输入的情况下,对实际实现日期的最佳判断。项目经理必须停止对后者的怀疑,老板则停止对项目经理的怀疑。
自文档化的程序:self-documenting program
- 借助必须存在的语句,标签、声明、符号等来附加尽可能多的“文档”信息
- 使用空格和一致的格式提高程序可读性,表现从属和嵌套关系
- 段落注释,插入必要的记叙性文字
11 没有银弹
根本任务:打造由抽象软件实体构成的复杂概念结构;
次要任务:编程语言表达这些抽象实体,在空间和时间限制内将它们映射成机器语言。
没有任何技术或管理上的进展,能够独立地许诺在生产率、可靠性或简洁性上取得数量级的提高。解决次要困难的一些突破:高级语言、分时、统一编程环境。增量开发要求自顶而下的设计,使逆向跟踪很方便,并非常容易进行原型开发。乐观主义是程序员的职业病,“一切都将运作良好”。
12 20年后的观点
概念完整性:将体系结构和设计实现、物理实现相分离;体系结构的递归。概念完整性是产品质量的核心,拥有一位结构师是迈向它的最重要一步,这个原理适用于所有的复杂事物。
图形界面WIMP:窗口windows、图标icons、菜单menus、指针选取pointing。通过类比、模仿获得的概念完整性;用户功能和易用性;从新手过渡到熟练用户;卓越的解决方案;强制整合到设备。
瀑布模型的谬误:假设项目只经历一次过程,设计合理可靠,编码实现的错误随着测试被修改和调整;假设系统被一次性构建,在所有设计、大部分编码、部分单元测试完成后,才为闭环的系统测试合并各个部分。所以必须存在逆向移动,要往复迭代两个或更多的体系结构-设计-实现循环。