有些软件工程文章似乎不会过时。例如,1986年的文章“理性设计过程:如何以及为什么伪造它”[DOI][pdf]。
当时,软件工程学正在寻找所谓的理性设计过程,即,如果严格遵循的软件开发过程,将以最低的成本产生最高质量的软件。如今,该过程通常被称为“瀑布”,几乎与“糟糕的软件设计”同义词,已经被“敏捷”、“Scrum”、“看板”或“精益”等过程所取代。本质上,瀑布模型分为几个不同的阶段:需求收集、高级系统设计、低级模块设计、实现和文档编制。每个阶段结束时都有一个人工制品(文档或代码),一旦生产出来,它就会被固定在石头上。
我们永远也找不到一个能够让我们以完全理性的方式设计软件的过程。好消息是我们可以伪造它。我们可以把我们的系统展示给其他人,就好像我们是理性的设计者一样,在开发和维护期间假装这样做是值得的。
引用的论文表明,需求是模糊的和不稳定的,因此,无论人们如何努力,最终的软件都不会遵循合理的设计过程。取而代之的是,论文主张通过制造这些文物来伪造理性的设计过程,就好像遵循了理性的设计过程一样。本质上,工件被更新以反映最新的决策,例如,如果在实现期间发现新的需求,则更新需求文档。
注意到这件商品陈年情况很好,这是很有趣的。自发布以来,敏捷开发方法一直从工程角度出发,主张尽可能少地实现,以向客户交付价值。过了一会儿,业务方也加入了。精益思维已经明确承认,一个人通过制造产品来发现市场需求。“建措施学”是新的口头禅。在某种程度上,项目迭代地通过Rational设计过程,但每个阶段的执行仅用于从市场中学习新东西所需的数量。
看待精益思维的另一种方式是减少在制品(WIP)。包含许多未实现需求的需求文档称为WIP。包含许多未实现模块的体系结构文档称为WIP。
然而,虽然精益思维将大量注意力放在最小化在制品上,但它较少关注于伪装合理的设计过程:阅读带有许多TODO的修补文档或代码提高了新来者(无论是客户还是工程师)的门槛。对他们来说,最好是获得文档和代码的快照,就好像一切都“完成”了。