首页 > 其他分享 >《人月神话》摘录

《人月神话》摘录

时间:2024-05-17 15:52:53浏览次数:17  
标签:功能 神话 技术主管 -- 进度 必须 软件 摘录

软件开发更像是写文章,规模增大带来的是效率的降低。将一篇文章切割成多个组成部分,分给不同的人去撰写,最后合并成一篇如同出自一人的文章是极具挑战性的

关于协作

产品负责人作为总指挥,技术主管充当其左右手。这种方法有一些困难。很难在技术主管不参与任何管理工作的同时,建立在技术决策上的权威。
显然,产品负责人必须预先声明技术主管的技术权威,在即将出现的绝大部分测试用例中,他必须支持后者的技术决定。要达到这一点,产品责任人和技术主管必须在基本的技术理论上具有相似观点;他们必须在主要的技术问题出现之前,私下讨论它们;产品责任人必须对技术主管的技术才能表现出尊重。
左手不知道右手在做什么,所以进度灾难、功能的不合理和系统缺陷纷纷出现。随着工作的进行,许多小组慢慢地修改自己程序的功能、规模和速度,他们明确或者隐含地更改了一些有效输入和输出结果用法上的约定。

交流和交流的结果--组织,是成功的关键。交流和组织的技能需要管理者仔细考虑,相关经验的积累和能力的提高同软件技术本身一样重要。

会议

不论协作与否,拥有能了解状态真相的评审机制是必要的。PERT图以及频繁的里程碑是这种评审的基础。大型项目中,可能需要每周对某些部分进行评审,大约一个月左右进行整体评审。进度提供了缓冲和储备,使开发队伍能够处理常规的异常事件,可以预计和防止小的灾祸。而对任务进行计算和对工作量进行度量,会对进度超前会造成一些消极的影响--这时,人们往往会比较乐观地放缓工作节奏。就这一点来说,它们是令人扫兴的事情。不过,如同我们看到的,必须关心每一天的滞后,它们是大灾祸的基本组成元素。

周例会的决策给出迅捷的结论,允许工作继续进行。如果任何人对结果过于不高兴,可以立刻诉诸于项目经理。
这种会议的卓有成效是由于:

  1. 数月内,相同小组架构师、用户和实现人员每周交流一次。因此,大家对项目相关的内容比较了解,不需要安排额外时间对人员进行培训。
  2. 上述小组十分睿智和敏锐,深刻理解所面对的问题,并且与产品密切相关。没有人是"顾问"的角色,每个人都要承担义务。
  3. 当问题出现时,在界线的内部和外部同时寻求解决方案。
  4. 正式的书面建议集中了注意力,强制了决策的制订,避免了会议草稿纪要方式的不一致。
  5. 清晰地授予首席架构师决策的权力,避免了妥协和拖延。

里程碑的选择只有一个原则,那就是,里程碑必须是具体的、特定的、可度量的事件,能够进行清晰定义。

书面记录,保持一致

思路是大约十个人的想法,但如果想保持文字和产品之间的一致性,则必须由一个或两个人来完成将其结论转换成书面规格说明的工作。而且,将定义书写成文字,必须对很多原先并不是非常重要的问题进行判断,并得出结论。

为了得到一份有用的文字描述,就必须放慢脚步,稳妥地进行。

  1. 目的。主要的功能是什么?开发程序的原因是什么?
  2. 环境。程序运行在什么样的机器、硬件配置和操作系统上?
  3. 范围。输入的有效范围是什么?允许显示的合法范围是什么?
  4. 实现功能和使用的算法。精确地阐述它做了什么。
  5. 输入-输出格式。必须是确切和完整的。
  6. 操作指令。包括控制台及输出内容中正常和异常结束的行为。
  7. 选项。用户的功能选项有哪些?如何在选项之间进行挑选?
  8. 运行时间。在指定的配置下,解决特定规模问题所需要的时间?
  9. 精度和校验。期望结果的精确程度?如何进行精度的检测?

软件的复杂性

当我们试图用图形来描述软件结构时,我们发现它不仅仅包含一个,而是很多相互关联、重叠在一起的图形。这些图形可能描绘控制流程、数据流、依赖关系、时间序列、名字空间的相互关系等等。它们通常不是有较少层次的扁平结构。
现代软件系统中这些无法规避的内在特性:复杂度、一致性、可变性和不可见性。

  • 不可见性。软件是不可见的和无法可视化的。
  • 可变性。软件实体经常会遭受到持续的变更压力。软件可以很容易地进行修改--它是纯粹思维活动的产物,可以无限扩展。
  • 复杂度。规模上,软件实体可能比任何由人类创造的其他实体要复杂,因为没有任何两个软件部分是相同的(至少是在语句的级别)。

控制的很多复杂度是随心所欲、毫无规则可言的,来自若干必须遵循的人为惯例和系统。它们随接口的不同而改变,随时间的推移而变化,而且,这些变化不是必需的,仅仅由于它们是不同的人--而非上帝--设计的结果。

数据处理的基本原理告诉我们,试图把信息放在不同的文件中,并努力维持它们之间的同步,是一种非常费力不讨好的事情。
第一个想法是借助那些出于语言的要求而必须存在的语句,来附加尽可能多的"文档"信息。因此,标签、声明语句、符号名称均可以作为工具,用来向读者表达尽可能多的意思。
第二个方法是尽可能地使用空格和一致的格式提高程序的可读性,表现从属和嵌套关系。
第三,以段落注释的形式,向程序中插入必要的记叙性文字。

细致的功能定义、详细的规格说明、规范化的功能描述说明以及这些方法的实施,大大减少了系统中必须查找的bug数量。
系统各个组成部分的开发者都会做出一些假设,而这些假设之间的不匹配,是大多数致命和难以察觉的bug的主要来源
系统软件开发是减少混乱度(减少熵)的过程,所以它本身是处于亚稳态的。软件维护是提高混乱度(增加熵)的过程,即使是最熟练的软件维护工作,也只是放缓了系统退化到非稳态的进程。
作为引入新bug的一个后果,程序每条语句的维护需要的系统测试比其他编程要多。理论上,在每次修复之后,必须重新运行先前所有的测试用例,从而确保系统不会以更隐蔽的方式被破坏。实际情况中,回归测试必须接近上述理想状况,所以它的成本非常高。

开发周期估算

我们对估算技术缺乏有效的研究,更加严肃地说,它反映了一种悄无声息,但并不真实的假设--一切都将运作良好。
第二,我们采用的估算技术隐含地假设人和月可以互换,错误地将进度与工作量相互混淆。
第三,由于对自己的估算缺乏信心,软件经理通常不会有耐心持续地进行估算这项工作。
第四,对进度缺少跟踪和监督。其他工程领域中,经过验证的跟踪技术和常规监督程序,在软件工程中常常被认为是无谓的举动。
第五,当意识到进度的偏移时,下意识(以及传统)的反应是增加人力。这就像使用汽油灭火一样,只会使事情更糟。越来越大的火势需要更多的汽油,从而进入了一场注定会导致灾难的循环。

规模效益

向进度落后的项目中增加人手,只会使进度更加落后。向软件项目中增派人手从三个方面增加了项目必要的总体工作量:任务重新分配本身和所造成的工作中断;培训新人员;额外的相互沟通。开发项目后期增加的开发人员,必须作为团队成员,愿意在过程中努力投入和工作,而不是企图改变或者改进过程本身。
小型项目数据的外推是没有意义的。就好像把100码短跑记录外推,得出人类可以在3分钟之内跑完1英里的结论一样。
如果项目有n个工作人员,则有(n2 - n)/ 2个相互交流的接口,有将近2n个必须合作的潜在团队。团队组织的目的是减少不必要交流和合作的数量,因此良好的团队组织是解决上述交流问题的关键措施。使用能消除、至少是能指明副作用的程序设计方法,会在维护成本上有很大的回报。同样,设计实现的人员越少、接口越少,产生的错误也就越少。

迭代、渐进和进化

不变只是愿望,变化才是永恒。最重要的措施是使用高级语言和自文档技术,以减少变更引起的错误。
高级语言减轻了一些次要的软件复杂度。抽象程序包含了很多概念上的要素:操作、数据类型、流程和相互通讯,而具体的机器语言程序则关心位、寄存器、条件、分支、通道、磁盘等等。高级语言所达到的抽象程度包含了(抽象)程序所需要的要素,避免了更低级的元素,它消除了并不是程序所固有的整个级别的复杂度。
书面记录决策是必要的。只有记录下来,分歧才会明朗,矛盾才会突出。文档能够作为同其他人的沟通渠道。项目经理常常会不断发现,许多理应被普遍认同的策略,完全不为团队的一些成员所知。正因为项目经理的基本职责是使每个人都向着相同的方向前进,所以他的主要工作是沟通,而不是做出决定。

增量开发模型更佳--渐进地精化

变更的阶段化是一种必要的技术。每个产品都应该有数字版本号,每个版本都应该有自己的日程表和冻结日期,在此之后的变更属于下一个版本的范畴。

概念完整性。一个整洁、优雅的编程产品必须向它的每个用户提供一个条理分明的概念模型,这个模型描述了应用、实现应用的方法以及用来指明操作和各种参数的用户界面使用策略
委派一名产品结构师是最重要的行动。结构师负责产品所有方面的概念完整性,这些是用户能实际感受到的。结构师开发用于向用户解释使用的产品概念模型,概念模型包括所有功能的详细说明以及调用和控制的方法。结构师是这些模型的所有者,同时也是用户的代理。在不可避免地对功能、性能、规模、成本和进度进行平衡时,卓有成效地体现用户的利益。
软件系统的快速原型对重要的系统界面进行模拟,并演示待开发系统的主要功能。原型不必受到相同硬件速度、规模或者成本约束的限制。原型通常展示了应用程序的功能主线,但不处理任何如无效输入、退出清除等异常情况。原型的目的是明确实际的概念结构,从而客户可以测试一致性和可用性。

软件缺陷

为什么缺陷不能更彻底地被修复?首先,看上去很轻微的错误,似乎仅仅是局部操作上的失败,实际上却是系统级别的问题,通常这不是很明显。修复局部问题的工作量很清晰,并且往往不大。但是,更大范围的修复工作常常会被忽视,除非软件结构很简单,或者文档书写得非常详细。

  1. 因为用户的使用到达了新的熟练水平,他们开始运用新的功能。这种高强度的考验查出了新功能中很多不易察觉的问题
  2. 我们的构思是有缺陷的,因此总会有bug。程序维护中的一个基本问题是--缺陷修复总会以(20-50)%的机率引入新的bug。所以整个过程是前进两步,后退一步。

标签:功能,神话,技术主管,--,进度,必须,软件,摘录
From: https://www.cnblogs.com/zmj-pr/p/17348485.html

相关文章

  • 【摘录】人形机器人和自动驾驶技术 —— 3D机器视觉技术
    以下内容引自:https://www.eda365.com/forum.php?mod=viewthread&tid=7442883D机器视觉技术分为两个部分,即3D重构技术和3D数据分析算法,前者获取3D信息、重构3D场景,后者对3D场景中的信息进行理解。目前,3D重构的常用技术类型有:被动3D视觉技术(分为单目3D、双目3D和多目3D,即分别......
  • 博客摘录「 linux应急响应」2024年3月12日
    ------***windoes***------方法宸极实验室—『杂项』一篇Windows应急响应的详细笔记-九州信泰的文章-知乎宸极实验室—『杂项』一篇Windows应急响应的详细笔记-知乎利用win+r后输入lusrmgr.msc查询系统是否存在多余的特权、隐藏账户。或者打开控制面板>用户账户......
  • 【部分内容摘录】深度学习(人工智能):大模型的微调方法
    原文地址:http://www.cn-witmed.com/list/34/9555.html模型微调的基本思想是使用少量带标签的数据对预训练模型进行再次训练,以适应特定任务。在这个过程中,模型的参数会根据新的数据分布进行调整。这种方法的好外在于,它利用了预训练模型的强大能力,同时还能够适应新的数据分布。......
  • 如何做一份靠谱的行业分析报告?(摘录)-林钱
    不知宏观者无以谋微观,不知未来者无以谋当下。在分析问题时,需要从大视角去看问题。行业分析主要用于分析行业存在的问题和变化,并从中发现机会,也可称为行业机会分析。它是公司战略制定的最重要的依据之一。行业分析的大致思路是:了解行业、理清玩家、找到变化、推理方向。行业......
  • 常州不大创造神话!常州股票开户佣金最低多少!股票开户佣金最低是多少?
    股票操作准则是指在进行股票交易时遵循的一些基本原则和规范。以下是一些常见的股票操作准则:量力而行:要根据自己的经济实力和风险承受能力选择适合自己的股票操作方式,不要盲目追求高回报而忽视风险。分散投资:将资金分散投资于不同的股票,降低单只股票带来的风险。了解......
  • Tomcat学习路线roadmap和个人入门知识摘录
    Tomcat学习路线roadmap和个人入门知识摘录roadmap参考《TOMCAT与JAVAWEB开发技术详解第3版》,内容非常非常详细,初期入门并不需要学习到那么详细,后面精进学习可按图索骥,或者有需要再看看就行第1章Web运作原理探析读者不妨带着以下问题去阅读本章开头的内容:●在整个......
  • Tomcat学习路线roadmap和个人入门知识摘录
    Tomcat学习路线roadmap和个人入门知识摘录roadmap参考《TOMCAT与JAVAWEB开发技术详解第3版》,内容非常非常详细,初期入门并不需要学习到那么详细,后面精进学习可按图索骥,或者有需要再看看就行第1章Web运作原理探析读者不妨带着以下问题去阅读本章开头的内容:●在整个......
  • Tomcat学习路线roadmap和个人入门知识摘录
    Tomcat学习路线roadmap和个人入门知识摘录roadmap参考《TOMCAT与JAVAWEB开发技术详解第3版》,内容非常非常详细,初期入门并不需要学习到那么详细,后面精进学习可按图索骥,或者有需要再看看就行第1章Web运作原理探析读者不妨带着以下问题去阅读本章开头的内容:●在整个......
  • Tomcat学习路线roadmap和个人入门知识摘录
    Tomcat学习路线roadmap和个人入门知识摘录roadmap参考《TOMCAT与JAVAWEB开发技术详解第3版》,内容非常非常详细,初期入门并不需要学习到那么详细,后面精进学习可按图索骥,或者有需要再看看就行第1章Web运作原理探析读者不妨带着以下问题去阅读本章开头的内容:●在整个......
  • 《人月神话》读后感
    《人月神话》读后感《人月神话》是软件工程领域的经典之作,由经验丰富的软件项目经理FrederickP.Brooks,Jr.所著。作者以自己在IBM公司担任大型软件项目经理的亲身经历为基础,通过生动的语言和鲜活的案例,深入剖析了软件开发过程中的种种困境和挑战。这本书不仅仅是一本关于软件......