代码大全读后感——控制软件复杂性是软件构造过程的第一要务

为什么软件会趋于复杂

  1. 处理的任务本质复杂。软件的作用在于和现实交互,完成现实世界的任务。但是现实世界本身有其复杂性,实体、流程、规则、输入、输出、运行平台等都有其复杂性。软件中必须有对应现实中各部分的组成部分,和现实中各个实体对应后,软件会趋于复杂。同时,现实中的实体定义边界常常较为模糊,而软件是需要精确定义的,从模糊到精确,会有一定的信息衰减。
  2. 人脑理解复杂问题的局限性。人脑思考时无法同时容纳超过两位数的实体,导致人脑无法同时兼顾全局和细节。软件本质的复杂却要求人脑能同时顾及各种实体和关系,和人脑局限性相矛盾。
  3. 非直接可见导致的复杂。软件中大多数组成部分是不可见的,最终展现形式是代码和可执行的程序。其虚拟性,导致了解其整体需要分析阅读代码才能了解各部分。一个软件代码量越多,完全掌握软件所需的成本就越大。当软件代码量达到一定数量级后,团队中甚至没有任何人能完全掌握所有代码。
  4. 团队开发导致的复杂性。如果软件全部为一个人开发,开发人员对需求、设计、编码整个过程都了如指掌,则软件复杂性将不是问题。但是,典型软件是团队协作的产物,不同人介入的阶段不一样,团队协作的整体一致理解的达成较为困难。
  5. 未来视角的复杂性。软件生命周期长,
Read the rest