人月神话(七)没有银弹-软件工程中的根本和次要问题、20 年后的人月神话

第16章 没有银弹-软件工程中的根本和次要问题

没有任何技术或管理上的进展,能够独立地许诺十年内使生产率、可靠性或简洁性获得数量级上的进步。

Part 1 摘要

所有软件活动包括根本任务—打造由抽象软件实体构成的复杂概念结构,次要任务—使用编程语言表达这些抽象实体,在空间和时间限制内将它们映射成机器语言。

现在是关注软件任务中的必要活动的时候了,也就是那些和构造异常复杂的抽象概念结构有关的部分。

建议:

  1. 仔细地进行市场调研,避免开发已上市的产品。
  2. 在获取和制订软件需求时,将快速原型开发作为迭代计划的一部分。
  3. 有机地更新软件,随着系统的运行、使用和测试,逐渐添加越来越多的功能。
  4. 不断挑选和培养杰出的概念设计人员。

Part 2 介绍

本章中,我们试图通过分析软件问题的本质和很多候选银弹的特征,来探索其原因。

Part 3 是否一定那么困难呢?——根本困难

① 提高软件的生产率、可靠性和简洁程度。我们甚至不能期望每两年有一倍的增长。

② 根本的—软件特性中固有的困难,次要的——出现在目前生产上的,但并非那些与生俱来的困难。

③ 一个相互牵制关联的概念结构,是软件实体必不可少的部分,它包括:数据集合、数据条目之间的关系、算法、功能调用等等。

④ 软件开发中困难的部分是规格化、设计和测试这些概念上的结构,而不是对概念进行表达和对实现逼真程度进行验证。

⑤ 现代软件系统中这些无法规避的内在特性:复杂度、一致性、可变性和不可见性。

复杂度:

  1. 软件实体可能比任何由人类创造的其他实体要复杂,因为没有任何两个软件部分是相同的。
  2. 计算机拥有大量的状态,这使得构思、描述和测试都非常困难。软件系统的状态又比计算机系统状态多若干个数量级。
  3. 软件实体的扩展也不仅仅是相同元素重复添加, 而必须是不同元素实体的添加。
  4. 软件的复杂度是必要属性,不是次要因素。
  5. 复杂度不仅仅导致技术上的困难,还引发了很多管理上的问题。

一致性:

  1. 某些情况下,因为是开发最新的软件,所以它必须遵循各种接口。
  2. 很多复杂性来自保持与其他接口的一致,对软件的任何再设计,都无法简化这些复杂特性。

可变性:

  1. 软件实体经常会遭受到持续的变更压力。
  2. 软件可以很容易地进行修改——它是纯粹思维活动的产物, 可以无限扩展。
  3. 所有成功的软件都会发生变更。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值