人月神话--没有银弹-软件工程中的根本和次要问题(No Silver Bullet - Essence and Accident in Software Engineering)
人月神话--没有银弹-软件工程中的根本和次要问题(No Silver Bullet - Essence and Accident in Software Engineering)
所有软件活动包括根本任务——打造由抽象软件实体构成的复杂概念结构,次要任务——使用编程语言表达这些抽象实体,在空间和时间限制内将它们映射成机器语言。
现在是关注软件任务中的必要活动的时候了,也就是那些和构造异常复杂的抽象概念结构有关的部分。
我将它们分成根本的——软件特性中固有的困难,次要的——出现在目前生产上的,但并非那些与生俱来的困难。
一个相互牵制关联的概念结构,是软件实体必不可少的部分,它包括:数据集合、数据条目之间的关系、算法、功能调用等等。这些要素本身是抽象的,体现在相同的概念构架中,可以存在不同的表现形式。尽管如此,它仍然是内容丰富和高度精确的。
我认为软件开发中困难的部分是规格化、设计和测试这些概念上的结构,而不是对概念进行表达和对实现逼真程度进行验证。当然,我们还是会犯一些语法错误,但是和绝大多数系统中的概念错误相比,它们是微不足道的。
如果这是事实,那么软件开发总是非常困难的。天生就没有银弹。
让我们来考虑现代软件系统中这些无法规避的内在特性:复杂度、一致性、可变性和不可见性。