人月神话读书笔记(16)----没有银弹

没有银弹


由于软件的复杂性,一致性,变化性和不可见性,解决软件危机的银弹并不存在。

摘要

  1. 所有软件活动包括:
    • 根本任务,即打造构成抽象软件实体的复杂概念结构
    • 次要任务,即使用编程语言表达这些抽象实体,在空间和时间限制下将它们映射成机器语言;
  2. 关注软件任务中的必要活动:
    • 仔细地进行市场调研,避免开发已上市的产品
    • 在获取和制定软件需求时,将快速原型开发作为迭代计划的一部分
    • 有机地更新软件,随着系统的运行、使用和测试,逐渐添加越来越多的功能;
    • 不断挑战和培养杰出新生代的概念设计人员

介绍

解决管理灾难的第一步是将大块的“巨无霸理论”替换成“微生物理论”

根本困难

  1. 软件开发中困难的部分是规格说明设计测试这些概念上的结构,而不是对概念进行表达和对实现逼真程序进行验证;
  2. 现在软件系统中无法规避的内存特性:复杂度、一致性、可变性和不可见性
  3. 软件实体可能比任何由人类创造的其他实体更复杂,因为没有任何两个软件部分是相同的;
  4. 软件的复杂度是根本属性,不是次要因素
  5. 软件特有的复杂度造成了很多经典的软件产品开发问题。由于复杂度,团队成员之间的沟通非常困难,导致了产品瑕疵、成本超支和进度延迟等;
  6. 复杂度不仅仅导致技术产生困难,还引发了很多管理上的问题;
  7. 一致性。开发新的软件,它必须遵循各种接口。另一些情况下,软件的开发目标就是兼容性。很多复杂性来自保持与其他接口的一致性,对软件的任何再设计,都无法简化这些复杂特性;
  8. 可变性。软件实体经常会遭受到持续的变更压力,其中部分原因是软件包含了很多功能,而功能是最容易感受变更压力的部分,另外的原因是因为软件可以很容易地进行修改——它是纯粹思维活动的产物;
  9. 所有成功的软件都会发生变更。功能扩展的压力主要来自那些喜欢基本功能,以对软件提出了很多新用法的用户们;
  10. 不可见性。软件是不可见的和无法可视化的。软件的客观存在不具有空间的形体特征;

针对概念上根本问题的颇具前途的方法

  1. 需求精炼和快速原因
  2. 开发软件系统的过程中,最困难的部分是确切地决定搭建什么样的系统
  3. 概念性工作中,没有其他任何一个部分比确定详细的技术需求更加困难;
  4. 需求工作对系统的影响比其他任何一个部分都大,当然纠正需求的困难也比其他任何一个部分都要大;
  5. 软件开发人员为客户所承担的最重要的职能是不断重复地抽取和细化产品的需求
  6. 复杂的软件系统往往是活动的、变化的系统。活动的动态部分是很难想象的。所以,在计划任何软件活动时,要让客户和设计人员之间进行多次广泛的交流沟通,将其作为系统定义的一部分,这是非常必要的;
  7. 现在的技术中最有希望的,并且解决了软件的根本而非次要问题的技术,是开发作为迭代需求过程的一部分—–-快速原型化系统的方法和工具
  8. 增量开发——增长,而非搭建系统
  9. 卓越设计来自卓越的设计人员。软件开发是一个创造性的过程
  10. 软件机构必须决定和表明:杰出的设计人员和卓越的管理人员一样重要,他们应该得到相同的培养和回报;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值