关键的工作是产品定义。许许多多的失败完全是因为那些产品未精确定义的地方而导致的
细致的功能定义,仔细的规格说明、规范化的功能描述说明以及这些方法的实施,大大减少了系统中必须查找的bug数量
在编写任何代码之前,规格说明必须提交给外部测试小组,以详细地检查说明的完整性和明确性
作用:尽管他的理念是为程序设计,也完全适用于复杂的系统的软件开发设计。他将系统开发划分为体系结构设计,设计实现和物理编码实现,每个步骤都可以使用自上而下的方法实现
结构化编程
设计程序的控制结构基本上仅包含语句形式的循环结构和条件判断结构通过GO TO 不加限制的分支跳转,会产生导致自身逻辑错误的结构多条件的CASE语句,和异常跳转都是十分实用的控制结构关键的地方和构建无bug程序的核心,是把系统的结构作为控制结构来考虑,而不是独立的分支语句
本机调试
在一次机器交互会话中尽可能多地包含实验性操作程序员仔细地设计他的调试过程——计划停止的地点,检查内存的位置,需要检查的东西以及如果没有预期结果时的对策把程序划分成测试阶段和对执行终止位置进行计划内存转存 当出现bug时候,保存下当前程序的内存信息是十分必要的
快照 允许将快照插入程序,无需重新汇编和编译,它是快照技术方向的终极产品
交互式调试 保证机器的使用率,由于调度监控程序和相关语言解释编译器的出现而带来便利,具有和本机调试一样的操作实时性
测试用例
软件开发过程中出乎意料的困难部分是系统集成测试
系统调试花费的时间会比预料的更长的困难证明了需要一种完备系统化和可计划的方法具体实现可计划的方法
使用经过调试的构建单元搭建充分的测试平台控制变更一次添加一个构建阶段化,定期变更项目进度经常以一种难以察觉,但残酷无情的方式慢慢落后
制定进度表。进度表上的每一件事都称为“里程碑”,他们都有一个日期。选择日期是一个估计技术的问题
针对大型开发项目中的估计行为
如果在某项活动开始之前就着手估计,并且每两周进行一次仔细的修订。这样,随着时间的临近,无论最后情况会变得如何糟糕,它都不会有太大的变化活动期间,对时间长短的过高估计会随着活动的进行持续而下降过低估计在活动中不会有太大变化,一直到计划的结束日期前大约三周左右一线经理担心如果回报了问题,老板会采取行动,这些行动会取代经理的作用,降低自己的威信,搞乱其他计划。所以,只要项目经理认为自己可以独立解决问题,他就不会告诉老板
掀开毯子的两种方式
一种是减少角色冲突和估计状态共享另一种是猛然拉开地毯减少角色的冲突
首先老板必须却别行动信息和状态信息。他必须规范自己,不对项目经理可以解决的问题作出反应,并且决不在检查转台报告的时候作出安排当项目经理了解到老板收到报告之后不会惊慌,或者不会越俎代庖时,他就逐渐会提交真实的结果猛然拉开地毯
不论协作与否,拥有能了解状态真相的评审机制是必要的PERT图以及频繁、明确的里程碑式这种评审的基础大型项目中,可能需要每周对某些部分进行评审,大约一个月左右进行整体评审流程图是被吹捧得最过分的一种程序文档
源代码和程序文档的“合并文件“,即把文档整合到源程序
人月神话(1)焦油坑 人月神话(2)人月神话 人月神话(3)外科手术队伍 人月神话(4)系统设计 人月神话(5)画蛇添足 人月神话(6)贯彻执行 人月神话(7)巴比伦塔为什么失败 人月神话(8,9)胸有成竹与削足适履 人月神话(10)提纲挈领 人月神话(11)未雨绸缪 人月神话(12)干将莫邪 人月神话(13,14,15)整体部分 祸起萧墙与另外一面