计算与软件工程 作业五

这个作业要求在哪里 讨论软件开发方法的思潮
我在这个课程的目标是 回顾软件开发方法的历史,深入了解软件工程发展
其他参考文献 https://www.cnblogs.com/xinz/p/3852390.html
作业正文 https://www.cnblogs.com/tang-yuan-yuan/p/12655951.html

软件开发方法论

瀑布模型(Waterfall Model)

1.简介
瀑布模型是一个项目开发架构,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段,这也是瀑布模型名称的由来。

2.在软件工程中的局限性
· 各步骤之间是分离的,(但是软件的生产过程中的各个步骤不能这样严格分离出来。)
· 回溯修改很困难甚至不可能, (但是软件生产的过程需要时时回溯)
· 最终产品直到最后才出现,(但是软件的客户, 甚至软件工程师本人都需要尽早知道产品的原型, 试用)

3.适用范围
· 如果产品的定义非常稳定, 但是产品的正确性非常重要, 需要每一步的验证.
· 产品模块之间的接口, 输入和输出很好用形式化的方法定义和验证。
· 使用的技术非常成熟, 团队成员都很熟悉这些技术
· 负责各个步骤的子团队分属不同的机构, 或不同的地理位置, 不可能做到频繁的交流。

敏捷开发(Agile)

1.简介
敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。
在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。
简单地来说,敏捷开发并不追求前期完美的设计、完美编码,而是力求在很短的周期内开发出产品的核心功能,尽早发布出可用的版本。然后在后续的生产周期内,按照新需求不断迭代升级,完善产品。

2.敏捷开发模式的分类
敏捷开发的实现主要包括 SCRUM、XP(极限编程)、Crystal Methods、FDD(特性驱动开发)等等。其中 SCRUM 与 XP 最为流行。
同样是敏捷开发,XP 极限编程 更侧重于实践,并力求把实践做到极限。这一实践可以是测试先行,也可以是结对编程等,关键要看具体的应用场景。
SCRUM 则是一种开发流程框架,也可以说是一种套路。SCRUM 框架中包含三个角色,三个工件,四个会议,听起来很复杂,其目的是为了有效地完成每一次迭代周期的工作。

3.优点
(1)精确要求,精准成果。敏捷开发不似瀑布模式的开发,从一个点开始却会以一大片结束。这样的开发会导致成果与出发点严重偏离,重点无法被作为重点开发出来,而是与原来的构想相差甚远。敏捷开发似接力比赛,每一段赛道都不长,并且还能把握好每次交接棒的时机,遵循计划更响应变化,这使成果变得十分精准。
(2)质量有保障。敏捷方法对每一次迭代周期的质量都有严格要求。敏捷开发团队拥有高水平的开发方法,有的会在正式开发功能代码之前先开发该功能的测试代码,质量可保证。
(3)客户合作胜过合同谈判。好的团队会更在乎与客户合作的这个过程。
(4)投资回报率高。在敏捷开发过程中,最具价值的功能总是被优先开发,这样能给客户带来最大的投资回报率。
(5)较高的速度是敏捷开发最显著的优点之一。敏捷团队只专注于开发项目中当前最需要的、最具价值的部分。这样能很快地投入开发。另外,较短的迭代周期使团队成员能迅速进入开发状态。

大泥球

大泥球,是指杂乱无章、错综复杂、邋遢不堪、随意拼贴的大堆代码。
大泥球发生的主要原因:

  • 一次性代码
  • 碎片式增长
  • 为了让软件不出问题
  • Copy/paste导致问题转移(有问题的代码被复制到很多地方,不断蔓延)

银弹

指一种能使软件成本像计算机硬件成本一样迅速下降的东西。
很遗憾,软件开发过程目前没有这样一枚可以绝杀一切的“银弹”。就目前来看,软件工程的本身具有的复杂性都没有从根本上得到解决。依旧存在着复杂性,不可见性,可变性,一致性。这些特性就是导致每一个软件开发过程都具有其与众不同的特殊之处的原因。不同的软件要解决的实际问题通常都具有相当大程度的复杂性,数据,状态,逻辑关系的复杂组合以及当前纯人力的软件开发过程都是导致其复杂性的原因。

总结

1.现有的软件开发方法,都不是定论,不过是你说你的好,我说我的好罢了。要能够得到定论,必须要有一种能够判断方法好坏的方法。也就是说,能够判断一个方法,用或不用,有多少好处。几个方法比较,哪个能够胜出的“检验标准”。

2.要能够检验软件开发方法的优劣,必须基于对于软件开发本质的正确认识,这样才能量化两个因素:软件需求的复杂程度以及软件开发的实际工作量。而现在的软件复杂度的度量,并未区分“需求”与“实际”的不同,或者“代码行数”,或者“功能点”,都是如此。

posted @ 2020-04-07 21:03  汤圆元  阅读(148)  评论(0编辑  收藏  举报