首页 > 代码库 > 软件工程实践的八大常识

软件工程实践的八大常识

   --- 本文摘选自《软件工程核心知识》下卷第1093页,文中所提页码都出自该著作。


  “常识” (Commonsense), 即多数人信以为真并自觉应用的知识, 受社会的普遍认同,反映当时社会的最一般观念。常识有“内心感官” 之称, 它如同外部感官(视、听、嗅、味和触) 一样, 能近乎“直觉” 和“本能” 地指导个体实践。概言之, 常识既是个体学习和实践的结晶, 又是个体学习和实践的法宝。


    软件工程常识是软件实践者的法宝, 既包括一些已成功迁移至专业实践的生活常识, 又包括一些属于本领域独有的专业常识。本书一共阐述了55 项常识, 这些都是实践者最应掌握并自觉应用的核心知识。笔者从中归纳出最基本的八大常识, 列述如下。笔者认为, 这八大常识应当成为每一名专业实践者的“直觉” 或“本能”。

 

常识一:软件是一类人力、智力、知识和创造力密集的、充满“人性”的高复杂产品。

  • 大师FrederickBrooks (布鲁克斯) 就说过, 软件是一类创造性的知识密集型产品, 是人类迄今为止最复杂的制品[Bro86]。
  • 工程师的知识、创造力、技能和情感等因素共同造就了软件产品的“人性特征”, 表现为 产品具有强烈的“唯一性”, 而过程则表现出强烈的“不可重复性”。

常识二:没有普适的“万能”模型。(页162)

  • 软件工程法则、定律、技术和过程等都仅针对特定应用场景, 无法同等有效地应用于不同团队和项目。经实践和研究凝聚而成的行业相关标准也明显不具有普适性。

常识三:不存在“完美的”软件产品。

  • 业界著名专家NicholasZvegintzov 就说过, “软件永不完美, 也永不完整。”
  • 软件开发团队永远得不到准确而完整的需求(页192), 也永远得不到所谓最佳的设计方案(页322), 最终也得不到完美的软件产品。

常识四:软件产品必须满足用户的现实需要, 进而实现价值/成本比的最大化。

  • 软件是商品, 一切软件实践理所当然地应当考虑成本和价值ê, 力求最大化价值/成本比(页24)。软件的价值主要体现为功能和质量, 即满足用户的现实功能和质量需求的程度。软件的成本主要是指开发和维护成本。
  • 用户是软件产品的直接服务对象; 软件开发必须尽可能地满足用户的现实需要(页294)。注意, 并不是用户的所有需要都应得到满足。典型的, 所有不能为产品客户带来实质价值反馈的用户需要就不应得到满足。

常识五:人是软件实践的最重要因素。

  • 软件是人力、智力和知识密集型产品, 实践者不要幻想能够全自动地开发出软件产品。
  • 大型软件开发超出了单个工程师的脑力和能力范围, 必须依靠团队合力(页964)。诚如Tom DeMarco所言 “团队协作是推动平凡个体取得非凡成就的燃料” [DL99, 页178]。

常识六:以一种“足够简单”的方式, 完成软件实践。

  • 软件产品本身已然具有高复杂度, 切勿再在开发过程中增添不必要的过程复杂度。为此, 软件管理者和工程师都应当选用最简单而又有效的策略和技术。
  • 在保证设计方案适合于目标软件及其开发项目的前提之下, 尽可能地简化, 使之足够简单直接(页439)。类似的, 代码编写也应当简单明了(页513)。同时, 软件管理者应追求简单而有效的管理, 不要过度简化, 更不要复杂化(页769)。

常识七:阶段化开发。

  • 阶段化反映出“分而治之” 的传统智慧。
  • 软件生命期阶段化为三大主要阶段 开发、维护、演化(页88)。软件开发过程阶段化为四大主要阶段 需求工程、软件设计、构造和质量控制(包括测试和审查)(页94)。软件测试过程又阶段化为四大阶段 单元测试、集成测试、系统测试和验收测试(页591)。

常识八:将软件描述成文, 并存档。

  • 著名软件工程学者MichaelJackson 就说过, “描述是软件开发之核。”
  • 软件需求和设计方案都应当编写成具有合理结构的技术文档(页246)。同时, 软件过程必须成文, 并共享于团队(页891)。
  • 文档编写必须讲究文风, 合理安排文档组织结构, 帮助读者快速而有效地阅读(页1007)。以敷衍态度匆忙编写的技术文档必定是低质量的(页1006)。