《人月神话》读书笔记

作为一本探讨软件工程的书籍,作者在书中明确指出软件工程的根本问题是:规格化,设计和测试软件实体描述的概念结构。书中的描述我的理解是,作为需要实现的软件,它的设计过程,包括对:数据结构,算法,调用关系,流程,状态变化等软件内部的数据流转,状态转换的控制等纯逻辑层面的问题是软件工程的根本问题所要解决的。而将设计用具体的代码进行实现,是软件工程的次要问题。

        作者指出,50年代,软件的实现部分虽然是软件工程的次要问题,但是它在开发中所占的资源的比重大,因此,对这个次要问题的改进,可以对软件工程的效率带来数量级上的提升。但是在硬件技术的飞速发展和高级语言得到广泛应用之后,这些次要问题在软件开发中的所占的比重已经大大的降低。此时,解决根本问题就显得尤为重要了。

《人月神话》关注的主要问题是如何在需要多人设计的情况下,仍然保持软件的概念一致性。文中提出了一套可用于软件开发实践的方法。首先作者引用了Blaauw提出的创造性活动的三个独立阶段:体系结构,设计实现,物理实现。少数结构师进行设计,他们之间通过交流保持设计上的概念一致性。这三个步骤在很多方面都可以并行开始:在体系结构有了一个雏形型时,设计实现人员就可以设计比如:数据流,控制序列等。物理实现层面也可以开始对具体的技术进行研究,调试等工作。总的来说,这套方法重点在于:将软件开发过程划分为了两个阶段,概念实现阶段和物理实现阶段。在概念实现阶段需要由少量精英在充分沟通,对将要设计的的软件有统一的概念的基础上进行软件的设计。然后由物理实现人员进行并行的实现。作者在“为什么巴比伦塔会失败”中鼓励团队中的每个成员相互了解设计和代码。在20年后,作者得出了新的结论:信息隐藏是唯一提高软件设计水平的途径。我想这个改变很大程度上是来自于OOP设计思想和编程语言的流行。作为OOP的基本特点之一,信息隐藏已经已经是软件设计中一个基本的概念。

对于软件工程的根本问题,作者在原著和再版前言中反复讨论了它的解决之道。总结起来包括:需求精炼、快速原型、增量开发和卓越的设计人员。这些特点与目前流行的“敏捷开发”模式在很大程度上有共同点,同时作者在再版中还指出了自己的错误——瀑布模型,它假设系统是一次性构建完成的。而敏捷开发中的反复迭代过程,将系统的实现划分成多个阶段,每个阶段都会发布出一个可以运行的版本,并且对之前的方向有一个反馈。这里作者也提到了渐进精化的思想,和angile的理念也是非常吻合的。

你可能感兴趣的:(软件工程)