常见的开发模式和不常见的开发模式
1. 瀑布式开发
瀑布模型的优点:
1、为项目提供了按阶段划分的检查点。
2、当前一阶段完成后,您只需要去关注后续阶段。
3、可在迭代模型中应用瀑布模型。增量迭代应用于瀑布模型。迭代1解决最大的问题。每次迭代产生一个可运行的版本,同时增加更多的功能。每次迭代必须经过质量和集成测试。
4、它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。
瀑布模型的缺点:
1、在项目各个阶段之间极少有反馈。
2、只有在项目生命周期的后期才能看到结果。
3、通过过多的强制完成日期和里程碑来跟踪各个项目阶段。
4、它的严格分级导致自由度降低,项目早期即作出承诺会导致对后期需求的变化难以调整且代价很大,这在需求不明晰并且在项目进行过程中可能有变化的情况下基本上是不可行的
瀑布式开发如下图所示。
2. 迭代式开发
迭代式开发也被称作迭代增量式开发或迭代进化式开发,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。
原理
在迭代式开发方法中,整个开发工作被组织为一系列的短小的、固定长度(如3周)的小项目,被称为一系列的迭代。每一次迭代都包括了定义、需求分析、设计、实现与测试。采用这种方法,开发工作可以在需求被完整地确定之前启动,并在一次迭代中完成系统的一部分功能或业务逻辑的开发工作。再通过客户的反馈来细化需求,并开始新一轮的迭代。
优点
1.降低风险
2.得到早期用户反馈
3.持续的测试和集成
4.使用变更
5.提高复用性
开发特征
1.每次只设计和实现产品的一部分;一步一步地完成;每次设计和实现一个阶段,这叫作一个迭代。
2.在进行大规模的投资之前就解决了关键的风险分析。
3.使得早期的用户反馈在初始迭代中就能出现。
4.对各个目标里程碑提供了短期的焦点(阶段性的中心)。
5.对过程的测量是通过对实现的评定(而不仅仅是文档)来进行的。
6.可以对局部的实现进行部署。
3. 螺旋式开发
尤其注重风险分析阶段,适用于庞大且复杂,高风险的项目,“螺旋模型”的核心就在于不需要在刚开始的时候就把所有事情都定义的清清楚楚。轻松上阵,定义最重要的功能,实现它,然后听取客户的意见,之后再进入到下一个阶段。如此不断轮回重复,直到得到您满意的最终产品。
通常由四个阶段组成
1.制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件。
2.风险分析:分析评估所选方案,考虑如何识别和消除风险
3.实施工程:实施软件开发和验证;
4.客户评估:评价开发工作,提出修正建议,制定下一步计划;
4. 敏捷软件开发
敏捷软件开发(英语:Agile software development),又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的新型软件开发方法,是一种能应对快速变化需求的软件开发能力。它们的具体名称、理念、过程、术语都不尽相同,相对于“非敏捷”,更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发过程中人的作用
方式:
1.首要任务是尽早地、持续地交付可评价的软件,以使客户满意。
2.乐于接受需求变更,即使在开发后期也是如此。敏捷软件开发能够驾驭需求的变化,从而赢得竞争优势。
3.频繁交付可使用的软件,交付的间隔越短越好,可以从几个月缩减到几个星期。
4.在整个项目开发期间,业务人员和开发人员必须朝夕工作在一起。
5.围绕那些有推动力的人们来构建项目,给予他们所需的环境和支持,并且相信他们能够把工作做好。
6.开发团队及在开发团队内部进行最快速、有效的传递信息的方法是面对面交谈。
7.可使用的软件是进度的主要衡量指标。
8.提倡可持续发现。出资人、开发人员及使用者应该共同维持稳定的开发速度。
9.为了增强敏捷能力,应持续关注技术上的杰出成果和良好的设计。
10简洁,最小化那些没有必要投入的工作量是至关重要的。
11.最好的架构、需求和设计都源于自我组织的团队。
12.团队定期反思如何变得更有战斗力,然后相应地转变并调整其行为。
5.快速原型模型(Rapid-Prototype-Model)
概念
快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步则在第一步的基础上开发客户满意的软件产品。
显然,快速原型方法可以克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,具有显著的效果。
快速原型的关键在于尽可能快速地建造出软件原型,一旦确定了客户的真正需求,所建造的原型将被丢弃。因此,原型系统的内部结构并不重要,重要的是必须迅速建立原型,随之迅速修改原型,以反映客户的需求。
快速原型模型有点整合“边做边改”与“瀑布模型”优点的意味。
优点:
1、生命周期短
2、整合“边做边改”与“瀑布模型”优点
3、减少软件需求不明确带来的开发风险
4、适用于小型、交互型的系统,大型系统的某些部分
缺点:可能导致系统设计差、效率低、难以维护
6.增量模型(Incremental-Model)
概念
在增量模型中,软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成。
增量模型在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的一个子集的可运行产品。整个产品被分解成若干个构件,开发人员逐个构件地交付产品,这样做的好处是软件开发可以较好地适应变化,客户可以不断地看到所开发的软件,从而降低开发风险。但是,增量模型也存在以下缺陷:
1、由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。
2、在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。
在使用增量模型时,第一个增量往往是实现基本需求的核心产品。核心产品交付用户使用后,经过评价形成下一个增量的开发计划,它包括对核心产品的修改和一些新功能的发布。这个过程在每个增量发布后不断重复,直到产生最终的完善产品。
例如,使用增量模型开发字处理软件。可以考虑,第一个增量发布基本的文件管理、编辑和文档生成功能,第二个增量发布更加完善的编辑和文档生成功能,第三个增量实现拼写和文法检查功能,第四个增量完成高级的页面布局功能。
优点:
1、人员分配灵活,一开始不需要投入大量人力
2、先推出核心的产品,在后续增加相应的功能
3、增量能够有计划的管理技术风险
4、适用于需求经常变更的软件开发过程
缺点:
1.如果增量包之间存在相交的情况未很好的处理,则必须做全盘的系统分析
8、演化模型(Evolutionary-Model)
主要针对事先不能完整定义需求的软件开发。用户可以给出待开发系统的核心需求,并且当看到核心需求实现后,能够有效地提出反馈,以支持系统的最终设计和实现。软件开发人员根据用户的需求,首先开发核心系统。当该核心系统投入运行后,用户试用之,完成他们的工作,并提出精化系统、增强系统能力的需求。软件开发人员根据用户的反馈,实施开发的迭代过程。第一迭代过程均由需求、设计、编码、测试、集成等阶段组成,为整个系统增加一个可定义的、可管理的子集。
在开发模式上采取分批循环开发的办法,每循环开发一部分的功能,它们成为这个产品的原型的新增功能。于是,设计就不断地演化出新的系统。 实际上,这个模型可看作是重复执行的多个“瀑布模型”。
“演化模型”要求开发人员有能力把项目的产品需求分解为不同组,以便分批循环开发。这种分组并不是绝对随意性的,而是要根据功能的重要性及对总体设计的基础结构的影响而作出判断。有经验指出,每个开发循环以六周到八周为适当的长度。
9、喷泉模型(Fountain-Model)
以用户需求为动力,以对象为驱动的模型,主要用于采用对象技术的软件开发项目
喷泉模型与传统的结构化生存期比较,具有更多的增量和迭代性质,生存期的各个阶段可以相互重叠和多次反复,而且在项目的整个生存期中还可以嵌入子生存期。就像水喷上去又可以落下来,可以落在中间,也可以落在最底部。
优点:
1、可以提高软件项目开发效率,节省开发时间,适用于面向对象的软件开发过程
缺点:
1、由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,不利于项目的管理
2、这个模型要求严格管理文档,使得审核难度加大,尤其是面对随时加入各种需求
10、智能模型(四代技术4GL)
智能模型拥有一组工具(如数据查询、报表生成、数据处理、屏幕定义、代码生成、高层图形功能及电子表格等),每个工具都能使开发人员在高层次上定义软件的某些特性,并把开发人员定义的这些软件自动地生成为源代码。这种方法需要四代语言(4GL)的支持。4GL不同于三代语言,其主要特征是用户界面极端友好,即使没有受过训练的非专业程序员,也能用它编写程序;它是一种声明式、交互式和非过程性编程语言。4GL还具有高效的程序代码、智能缺省假设、完备的数据库和应用程序生成器。目前市场上流行的4GL(如Foxpro等)都不同程度地具有上述特征。但4GL目前主要限于事务信息系统的中、小型应用程序的开发。
11、混合模型(Hybrid-Model)
过程开发模型又叫混合模型(hybrid model),或元模型(meta-model),把几种不同模型组合成一种混合模型,它允许一个项目能沿着最有效的路径发展,这就是过程开发模型(或混合模型)。实际上,一些软件开发单位都是使用几种不同的开发方法组成他们自己的混合模型。
5. devOps开发模式
DevOps旨在提高软件开发效率,协调开发、测试、运维之间的矛盾,让系统和开发体系更适应快速变化的需求。DevOps将重新定位开发、测试、运维的关系,通过建立一条流水线,代码从提交之后,交由流水线自动完成构建、测试、代码质量、安全检查、部署等工作。通过自动化的持续集成(CI)、持续部署(CD),安全、可靠、高效地实现应用程序快速上线,让新功能尽快拥抱市场。
devops链接:
https://www.freecodecamp.org/news/web-developer-roadmap/
总结:
对比了部分的模型方法
模型名称 | 技术特点 | 适用范围 |
瀑布式 |
简单,分阶段,阶段间存在因果关系, 各个阶段完成后都有评审,允许反馈,不支持;用户参与,要求预先确定需求 |
需求易于完善定义且不易变更的软件系统 |
迭代式 |
不要求一次性地开发出完整的软件系统,将软件 开发视为一个逐步获取用广需求、完善软件产品的过程 |
需求难以确定、不断变更的软件系统 |
螺旋式 |
结合瀑布模型、快速原型模型和迭代模 型的思想,并引进了风险分析活动 |
需求难以获取和确定、软件开发风险较大的软件系统 |
敏捷式 |
更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发过程中人的作用 |
范围较广 |
快速原型模型 |
不要求需求预先完备定义,支持用户参与,支持需求的渐进式完善和确认,能够适应用户需求的变化 |
需求复杂、难以确定、动态变化的软件系统 |
增量模型 |
软件产品是被增量式地一块块开发的, 允许开发活动并行和重叠 |
技术风险较大、用户需求较为稳定的软件系统 |
devops模式 | 软件开发效率、协调开发、测试、运维之间的矛盾,让系统和开发体系更适应快速变化的需求 | 相对于敏捷式更广;风险小 |
eg:本文章只例举了常见的开发模式,还有极少数的开发模式。
该文章持续更新中。
望大佬相互指教,学习。
常见的开发模式和不常见的开发模式相关推荐
- java 绑定微信号开发_Java开发中的更多常见危险信号
java 绑定微信号开发 在< Java开发中的常见危险信号>一文中,我研究了一些不一定本身就是错误或不正确的做法,但它们可能表明存在更大的问题. 这些"红色标记"类似 ...
- Android开发面试经——2.常见Android基础笔试题
标签: androidAndroid基础Android面试题Android笔试题 2015-03-12 15:04 3361人阅读 评论(3) 收藏 举报 分类: Android开发(29) 版 ...
- 五种 Ajax 反模式:避免常见的 Ajax 代码陷阱!
developerWorks 中国 > XML | Web development > Ajax 和 XML: 五种 Ajax 反模式 避免常见的 Ajax 代码陷阱 文档选项 ...
- Microsoft .NET Compact Framework 开发常见问题解答 - 专注.NET技术及其相关应用开发! - 博客园...
Microsoft .NET Compact Framework 开发常见问题解答 发布日期: 3/30/2005 | 更新日期: 3/30/2005 Microsoft .NET Compact F ...
- Vue开发中的一些常见套路和技巧(上)
Vue开发中的一些常见套路和技巧(上) 简介 大家好呀,我是 wangly19 ,这次文章主要是来总结下我在使用 Vue.js 总结出来的一些套路,可以做一些查缺补漏.如果还有有趣的小技巧,也可以在评 ...
- android 夜间模式蒙板,常见APP的夜间模式梳理和设计方法
本文笔者将对一些APP的夜间模式进行分析,总结夜间模式常见的切换方式,以及从简单到复杂的几种夜间模式设计方法. 一.夜间模式的由来和作用 最早应该是智能手机的普及大大延迟了人们的睡眠时间,大家都习惯晚 ...
- 软件开发的几种常见模型(网易秋招笔试题)
软件开发模型(Software Development Model)是指软件开发全部过程.活动和任务的结构框架. 开发模型有: 1.边做边改模型(Build-and-Fix Model): 2.瀑布模 ...
- Android开发环境搭建及常见问题解决方法
Android开发环境搭建及常见问题解决方法 参考文章: (1)Android开发环境搭建及常见问题解决方法 (2)https://www.cnblogs.com/rwxwsblog/p/476978 ...
- vue 后台获取数据 下拉框_Vue开发中的一些常见套路和技巧
属性排放 管理请求加载状态 Proxy跨域 对developer和build的打包进行不同配置 大部分开发者都喜欢将Vue的config写在一个文件中,看起来是没有问题,但是随着环境的变化,项目优化, ...
最新文章
- java获取eureka_获取Eureka服务列表的各种场景
- 23种设计模式C++源码与UML实现--装饰者模式
- bootstrap datetimepicker的一些小总结
- 线程安全与可重入函数
- 为什么WebUI里新建任务的状态字段下拉框里没有released选项
- 软件测试有没有测试大纲文档,系统测试大纲(范例).docx
- 数字图像处理之图像几何变换
- 2017软件工程实践总结
- luogu P4240 毒瘤之神的考验(莫比乌斯反演+递推前缀和+数论分块)
- 前端小知识点(1):undefined和null区别
- WebQML笔记-qml获取canvas中元素是否被按下
- android获取年月日时分秒毫秒,Android获取两个日期其间间隔的天数
- MySQL和PostgreSQL在多表连接算法上的差异
- 第一天:Drools环境搭建配置
- 科普:千兆级LTE技术深度解析
- 装上你就离不开的桌面软件:透明任务栏/显示网速/内存清理/温度监控
- 戴戒指的含义(以后要结婚的必看)
- 计算机系统中的数据计量单位-位(bit)、字节(Byte)、字(word)
- 七年级上册计算机知识点总结,七年级上册数学知识点总结
- printvertically Java_Print Words Vertically in JavaScript