作业要求 | https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10584 |
---|---|
自我目标 | 加强对软件开发的理解与掌握 |
课程目标 | 软件开发方法思想的加深 |
参考文献 | https://www.ituring.com.cn/article/9363 |
1.银弹
什么是银弹?它是否存在?
IT行业的大规模软件开发使得这些困难更早的被爆发,也引发了软件工程的方法论研究,自动化行业可以从其中窥见一斑。
20世纪80年代,Brooks在其著作”No Silver Bullet: Essence and Accident in Software Engineering“,对软件工程的根本性困难和次要困难进行了论述,他的一个基本论断是”没有银弹“*(银弹:欧洲中世纪的传说中有一种叫“人狼”的妖怪,只有用银子制成的特殊子弹才能杀死人狼。银弹用于比喻解决软件开发的根本性困难的有效手段)。即,没有任何一种技术活管理上的进展能够独立地承诺在10年内大幅度提高软件的生产率、可靠性和简洁性“。
Brooks所说的次要困难是指软件开发中那些曾经存在或者目前仍然存在,但并非与生俱来的一些困难。这些问题在过去一些年头里已经得到了解决,例如:高级语言、分时、统一开发平台等,这些进展极大的提高了软件开发效率和质量,但由于软件开发中的根本性困难的存在,这些进展对于软件开发的现状还难以带来本质的变化。
与此同时,Brooks也对一些可能的“银弹”进行了分析,包括购买而非自行开发(商用第三方构件),需求净化和快速原型、增量开发、好的设计师等,这些手段虽然也不能从本质上解决问题,但无疑能够在一定程度上帮助我们提高软件开发效率和质量。
2.大泥球
大泥球,是指杂乱无章、错综复杂、邋遢不堪、随意拼贴的大堆代码。这些年来,为了对付这个泥球,我们看到了多种指导方法,比如 SOLID 、 GRASP 和 KISS ,与其他诸多年代久远的、提倡高内聚、低耦合的方法一起出现。
大泥球发生的主要原因可以归结为:
- 一次性代码
- 碎片式增长
- 为了让软件不出问题
- Copy/paste 导致问题转移(有问题的代码被复制到很多地方,不断蔓延)
有趣的是,根据 FJ 的记录,Yoder 认为 Agile 的很多方面会直接导致泥球,包括: - 缺少前期设计
- 应对需求变化过晚
- 应对架构变化过晚
- 碎片式增长
总结
软件开发过程是随着开发技术的演化而随之改进的。从早期的瀑布式(Waterfall)的开发模型到后来出现的螺旋式的迭代(Spiral)开发,以致最近开始兴起的敏捷软件开发(Agile),他们展示出了在不同的时代软件产业对于开发过程的不同的认识,以及对于不同类型项目的理解方法。
通过查看这几个软件工程的方法论,知道了一个软件的开发需要很多的步骤,讨论,沟通,环境等等都会影响整个的软件开发的进度与质量,而一个软件的实现就需要更多的方面的配合,不光自己还要和团队巧妙的配合。