计算与软件工程 作业五
作业五要求链接 | https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10584 |
---|---|
课程目标 | 学习更多的软件开发方法 |
此作业在哪个具体方面帮我实现目标 | 分享软件工程经验 |
其他参考文献 | https://www.cnblogs.com/xinz/p/3852390.html |
作业正文 | https://i-beta.cnblogs.com/posts/edit;postId=12636021 |
讨论软件开发方法的思潮
一、银弹 (Silver Bullet)
银弹,被引申为解决问题的有效办法。IBM大型机之父福瑞德·布鲁克斯在1986年的论文《没有银弹》中表达了他的观点:软件工程中不存在银弹——没有任何一项技术或方法可使软件工程的生产力在十年内提高十倍。文中着重探讨了软件工作的两个分类:本质性与附属性。
本质性(essence):软件本身在概念(conceptual)建构上存在先天的困难;亦即如何从抽象性问题,发展出具体概念上的解决方案。
附属性(accident):将概念上的构思施行于电脑上(编程语言),所遭遇到的困难。
布鲁克斯认为,附加性的困难会随着工具的改善而逐渐淡化,反而是本质性的困难最难以解决,因为大部分的活动是发生在人们的脑海里,缺乏有效的辅助工具。以往,软件生产力的重要进展绝大部分是来自于人为障碍的排除,像是严苛的硬件限制、难用的编程语言、上机时间(machine time)的不足等等,这些都是造成附属性工作益发困难的原因。这也是他提出该论点的主要依据。
在我看来,他的观点是有他所处时代带有的局限性的。论文发表时间为1986年,正如上面提到,那时候人们正为编程语言、硬件配置这些外部环境而绞尽脑汁,附属性工作自然会成为软件工作中的关键元素。本质性反而容易被忽略。可是随着时间推移,附属性工作的难度与地位愈发降低,人们的目光也逐渐转移到了布鲁克斯所提的本质性工作上。正如1990年,Brad Cox发表的《银弹存在(There Is a Silver Bullet)》,Cox指出采取可再利用(reusable)、可替换组件的方式来对付属于概念本质性部分的问题。以及越来越多的软件开发模式及方法论的出现,都是对本质性工作困难进行的优化。其次,他仅仅将软件的本质性归于解决概念完整性和处理沟通,而忽视了软件开发是一个复杂的过程,设计,规格化,测试都是重要组成部分,也会对软件工程生产力产生巨大影响。
就以这次团队项目的第一轮迭代为例,我觉得十分符合布鲁克斯设定的情景。我们在这四周里有很大精力都放在了附属工作上:统一开发环境与开发语言,解决服务器和域名的问题,学习开发网站需要的前后端知识。而第一轮迭代我们本身的设定便是完成网站开发的入门工作,并大概搭起网站框架以及实现简略功能。所以,附属性工作所占比例便会很大,这时提高这方面的工作效率与质量就会使这一时期的软件工作生产力大幅度提升。
二 、 大泥球 (big ball of mud)
所谓大泥球,是指杂乱无章、错综复杂、邋遢不堪、随意拼贴的大堆代码。我们现在惯用的敏捷性开发的很多方面会直接导致泥球,包括:缺少前期设计、应对需求变化过晚、应对架构变化过晚、碎片式增长。尤其是在需求导向愈发重要的今天,很多软件在发布的同时就已经过时了,大泥球也会随之产生。同时随着修改BUG,新BUG可能也会随之产生。
在我看来,对于一个项目而言,减少大泥球的办法有如下几点:
做好前期设计,制定代码规范,规划好各个模块的接口与功能,是最基本的保障。
以需求、实际进度为导向及时调整:需求决定软件的定位,脱离了需求,代码便毫无意义;而根据实际完成情况及时调整设计与分工,是很必要的。
沟通,重视代码复查与测试:检查冗余的有效方法。
处理好代码复用:这是造成随意拼接、错综复杂的重要原因。
- 严格地说,软件工程是应用计算机科学、数学及管理科学等原理开发软件的工程。通俗地说,软件工程是实现一个大型程序的一套原则方法,即按工程化的原则和方法组织软件开发工作。本文主要按学期划分讨论基于理论学习和研究的实践学习。
三、 瀑布模型
瀑布模型严格把软件项目的开发分隔成各个开发阶段:需求分析,要件定义,基本设计,详细设计,编码,单体测试,结合测试,系统测试等。像流水线操作一样,把软件开发过程分成各种工序,对每种工序进行了更细致的分配。 而在温斯顿·罗伊斯的那篇文章中,他并不推崇严格意义上的瀑布模型,相反他指出了缺陷,并提出了几种改进,例如回溯、增加文档等。
特点:
1.它的核心思想是将各项功能的实现与设计分开,规定了各阶段的一个自上而下的顺序,相邻的两个阶段有紧密的联系,就好比我们平时写的操作步骤,从第一个步骤开始,每个步骤都依赖于上一个步骤的结果,作为本阶段的一个输入,有很强烈的先后顺序。
2.瀑布模型对软件的每项功能在需求分析、设计时就给出了实现的具体方案,所以用瀑布模型,整个软件的设计框架很清晰,每一步也很明确,软件工作者也很清楚自己的分工。
3.任何阶段如果发生错误,立即回到前面发生错误得阶段,进行修正工作.
4.每一阶段完成后,皆会有严谨的文件产生.
5.使用者即用户只有在调查,需求分析及测试三个阶段参与.
四、对软件工程方法论的思考
- 严格地说,软件工程是应用计算机科学、数学及管理科学等原理开发软件的工程。通俗地说,软件工程是实现一
个大型程序的一套原则方法,即按工程化的原则和方法组织软件开发工作。 - 软件是由,人来完成的,所有由人做的工作都不会是完美无缺的。软件开发是个很复杂的过程,期间很容易产生错
误。无论是软件从业人员、专家和学者做了多大的努力,软件错误仍然存在。因而大家也得到了一种共识:软件中残存
着错误,这是软件的一种属性,是无法改变的。所以通常说引入软件测试学科是很重要的。软件测试的目的就是为了发
现尽可能多的缺陷,并期望通过改错来把缺陷消灭,以提高软件的质量。测试虽然也与开发过程紧密相关,但关心的不
是过程的活动,而是对过程的产物以及开发出的软件进行剖析。