• 剔除Bug的设计
      • 防范bug 的定义
        • 产品的概念完整性在使它易于使用的同时,也 使开发更容易进行以及bug 更不容易产生
        • 上述方法所意味的详尽体系结构设计正是出于这个目的
        • 关键的工作是产品定义。许许多多的失败完全源于那些产品未 精确定义的地方。 细致的功能定义、详细的规格说明、规范化的功能描述说明以及这些 方法的实施,大大减少了系统中必须查找的bug 数量
      • 测试规格说明
        • 在编写任何代码之前,规格说明必须提交给测试小组,以详细地检查 说明的完整性和明确性
      • 自顶向下的设计
        • 将程序开发划分成体系结构设计、设计实现和物理编码实现,每个 步骤可以使用自顶向下的方法很好地实现
        • 描述
          • W irth 的流程将设计看成一系列精化步骤。开始是勾画出能得到主要结果的, 但比较粗略的任务定义和大概的解决方案。然后,对该定义和方案进行细致的检查,以判断 结果与期望之间的差距。同时,将上述步骤的解决方案,在更细的步骤中进行分解,每一项 任务定义的精化变成了解决方案中算法的精化,后者还可能伴随着数据表达方式的精化。 在这个过程中,当识别出解决方案或者数据的模块时,对这些模块的进一步细化可以 和其他的工作独立,而模块的大小程度决定了程序的适用性和可变化的程度。 Wirth 主张在每个步骤中,尽可能使用级别较高的表达方法来表现概念和隐藏细节,除 非有必要进行进一步的细化
        • 好处
          • 好的自顶向下设计从几个方面避免了bug 。首先,清晰的结构和表达方式更容易对需求 和模块功能进行精确的描述。其次,模块分割和模块独立性避免了系统级的bug 。另外,细 节的隐藏使结构上的缺陷更加容易识别。第四,设计在每个精化步骤的层次上是可以测试的, 所以测试可以尽早开始,并且每个步骤的重点可以放在合适的级别上
        • 一些糟糕的系统往往就是试图挽救 一个基础很差的设计,而对它添加了很多表面装饰般的补丁。自顶向下的方法减少了这样的 企图
      • 结构化编程
        • 通过GO TO 不加限制的分支跳转,会产生导致自身逻辑错误的结构
        • 关键的地方和构建无bug 程序的核心,是把系统的结构作为控制结构来考虑,而不是 独立的跳转语句
    • 构件单元调试
      • 整个调试过程有四个步骤
        • 本机调试
        • 内存转储
        • 快照
        • 交互式调试
      • 在最初使用的本机调试方法和现在的交互式调试方法之间,用户可以感觉到的主要差 异是工具性软件、调度监控程序和其它相关语言解释编译器的出现
    • 系统集成调试
      • 软件系统开发过程中出乎意料的困难部分是系统集成测试
      • 系统调试花费的时间会比预料 的更长,需要一种完备系统化和可计划的方法来降低它的困难程度
      • 方法
        • 使用经过调试的构件单元
        • 文档化的bug
        • 搭建充分的测试平台
          • 一种测试辅助的形式是伪构件
          • 另一种形式是微缩文件
          • 微缩文件的特例是伪文件
          • 还有一种方式是辅助程序
        • 控制变更
          • 必须要有人负责
          • 必须存在系统的受控拷贝
        • 一次添加一个构件
          • 我们必须假设系统中存在着许多错误, 并需要计划一个有序的过程把它们找出来
        • 阶段(量子)化、定期变更


blog comments powered by Disqus

Published

21 April 2013

Tags