软件开发模型(架构师复习资料)

在计算机刚刚诞生的年代,计算机是一种只有天才才能掌握的工具。人们对软件的认知仅仅停留在程序的层面上,所谓的软件开发就是那些能够掌握计算机的天才们写的一些只有计算机才能理解的二进制序列。但随着技术的发展,软件的复杂度不断提高,人们进入了大规模软件开发的时代。这时,人们发现,软件系统已经变得非常复杂,需要遵循一定的开发方法才能取得成功,于是称这些模式化的开发方法为开发模型。
一、瀑布模型
顾名思义,瀑布模型就如同瀑布一样,从一个特定的阶段流向下一个阶段,如图 6-1所示。
1.瀑布模型的核心思想
瀑布模型认为,软件开发是一个阶段化的精确的过程。就像要制造一艘航空母舰,首先需要知道航空母舰的参数(长、宽、高、排水量、航速等)。在这些参数的技术上需要对航空母舰进行设计,设计包括总体设计和详细设计。只有设计得一清二楚的图纸才能交付施工,否则造出的零件肯定拼装不到一起。制造完毕后,要把这些零件一个一个地拼装起来,拼装成发动机、船舱等部分,并检查这些部分是否符合设计标准,这就是集成测试。最后,把各个部分组合在一起,造出一艘巨大的航母。软件要经过需求分析、总体设计、详细设计、编码、调试、集成测试和系统测试阶段才能够被准确地实现。在图 6-1 中,每一阶段都有回到前一阶段的反馈线,这指的是,在软件开发中当在后续阶段发现缺陷的时候,可以把这个缺陷反馈到上一阶段进行修正。
在这里插入图片描述
从图 6-1 中可以看出瀑布模型的一个重要特点:软件开发的阶段划分是明确的,一个阶段到下一个阶段有明显的界线。在每个阶段结束后,都会有固定的文档或源程序流入下一阶段。在需求分析阶段结束后,需要有明确的描述软件需求的文档;总体设计结束后,需要有描述软件总体结构的文档;详细设计结束后,需要有可以用来编码的详细设计文档;而编码结束后,代码本身被作为文档流到下一个阶段。因此也称瀑布模型是面向文档的软件开发模型。
当软件需求明确、稳定时,可以采用瀑布模型按部就班地开发软件,当软件需求不明确或变动剧烈时,瀑布模型中往往要到测试阶段才会暴露出需求的缺陷,造成后期修改代价太大,难以控制开发的风险。
二、瀑布 V 模型
瀑布 V 模型是瀑布模型的一种变体。随着对瀑布模型的应用,人们发现,缺陷是无法避免的,任何一个阶段都会在软件中引入缺陷,而最后的测试也不能保证软件完全没有缺陷,只能争取在交付前发现更多的缺陷。测试成为软件开发中非常重要的环节,测试的质量直接影响到软件的质量。因此,人们对瀑布模型进行了小小的更改,提出了更强调测试的瀑布 V 模型,如图 6-2 所示。
在这里插入图片描述
整个瀑布模型在编码与调试阶段转了个弯,形成了一个对称的 V 字。瀑布 V 模型同标准瀑布模型一样,在进行完需求分析后就将进入总体设计阶段,但是除总体设计外,需求分析还有一条虚线指向系统测试。这指的是,需求分析的结果将作为系统测试的准则,即需求分析阶段也将产生同软件需求一致的系统测试;同时软件产品是否符合最初的需求将在系统测试阶段得到验证。以此类推,总体设计对应了集成测试,详细设计对应了单元测试。瀑布 V 模型不但保持了瀑布模型的阶段式文档驱动的特点,而且更强调了软件产品的验证工作。
瀑布模型的缺点
虽然是经典的开发模型,但瀑布模型中仍存在一些难以克服的缺陷,即使是在改进的瀑布 V 模型中还是会存在。
首先,在瀑布模型中,需求分析阶段是一切活动的基础,设计、实现和验证活动都是从需求分析阶段的结果导出的。一旦需求分析的结果不完全正确,存在偏差,那么后续的活动只能放大这个偏差,在错误的道路上越走越远。事实上,由于用户和开发者的立场、经验、知识域都不相同,不同的人对同一件事物的表述也不同,这就造成需求分析的结果不可能精确、完整地描述整个软件系统。所以瀑布模型后期的维护工作相当繁重,而这些维护工作大多都是修正在需求分析阶段引入的缺陷。这个问题是瀑布模型难以克服的。
其次,瀑布模型难以适应变化。在瀑布模型中精确地定义了每一个阶段的活动和活动结果,而每一阶段都紧密依赖于上一阶段的结果。如果在软件的后期出现了需求的变化,整个系统又要从头开始。
再次,使用瀑布模型意味着当所有阶段都结束才能最终交付软件产品,所以在提出需求后需要相当长一段时间的等待才能够看到最终结果,才能发现软件产品究竟能不能够满足客户的需求。
最后,文档驱动型的瀑布模型除了制造出软件产品外还将产生一大堆的文档,大部分的文档对客户没有任何意义,但完成这些对客户没有意义的文档却需要花费大量的人力。所以瀑布模型也是一种重载过程。
三、演化模型
瀑布模型看起来很好,随着一个又一个阶段的流过,软件系统就被建立起来了。可是在应用软件开发的过程中,人们发现很难一次性完全理解用户的需求、设计出完美的架构,开发出可用的系统,这是由于人的认知本身就是一个过程,这个过程是渐进的、不断深化的。对于复杂问题,“做两次”肯定能够做得更好。那么,对于软件开发这个复杂而且与人的认知过程紧密相关的事也应该是一个渐进的过程。
演化模型正是基于这个观点提出的。一般情况下,一个演化模型可以看做若干次瀑布模型的迭代,当完成一个瀑布模型后,重新进入下一个迭代周期,软件在这样的迭代过程中得以演化、完善。根据不同的迭代特点,演化模型可以演变为螺旋模型、增量模型和原型法开发。
四、螺旋模型
螺旋模型将瀑布模型和演化模型结合起来,不仅体现了两个模型的优点,而且还强调了其他模型均忽略了的风险分析。螺旋模型的每一周期都包括需求定义、风险分析、工程实现和评审 4 个阶段,由这 4 个阶段进行迭代,软件开发过程每迭代一次,软件开发就前进一个层次。采用螺旋模型的软件过程如图 6-3 所示。
在这里插入图片描述
螺旋模型的基本做法是在“瀑布模型”的每一个开发阶段前,引入一个非常严格的风险识别、风险分析和风险控制。它把软件项目分解成一个个小项目,每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被确定。
螺旋模型强调风险分析,使得开发人员和用户对每个演化层出现的风险都有所了解,继而做出应有的反应。因此,螺旋模型特别适用于庞大而复杂、具有高风险的系统,对于这些系统,风险是软件开发潜在的、不可忽视的不利因素,它可能在不同程度上损害软件开发过程,影响软件产品的质量。减小软件风险的目标是在造成危害之前,及时对风险进行识别、分析,决定采取何种对策,进而消除或减少风险的损害。
与瀑布模型相比,螺旋模型支持用户需求的动态变化,为用户参与软件开发的所有关键决策提供了方便,有助于提高目标软件的适应能力,为项目管理人员及时调整管理决策提供了便利,从而降低了软件开发风险。
但是,不能说螺旋模型绝对比其他模型优越,事实上,螺旋模型也有其自身的缺点:
(1)采用螺旋模型,需要具有相当丰富的风险评估经验和专业知识。在风险较大的项目开发中,如果未能及时标识风险,势必会造成重大损失。
(2)过多的迭代次数会增加开发成本,延迟提交时间。
五、增量模型
演化模型的另一种形式是增量模型。在系统的技术架构成熟、风险较低的时候,可以采用增量的方式进行系统开发,这样可以提前进行集成测试和系统测试,缩短初始版本的发布周期,提高用户对系统的可见度。
对于增量模型,通常有两种策略。一是增量发布的办法。即首先做好系统的分析和设计工作,然后将系统划分为若干不同的版本,每一个版本都是一个完整的系统,后一版本以前一版本为基础进行开发,扩充前一版本的功能。在这种策略中,第一版本往往是系统的核心功能,可以满足用户最基本的需求,随着增量的发布,系统的功能逐步地丰富、完善起来。用户在很短的时间内就可以得到系统的初始版本并进行试用。试用中的问题可以很快地反馈到后续开发中,从而降低了系统的风险。在应用增量模型中需要注意:
(1)每一个版本都是一个完整的版本。虽然最初的几个增量不能完全地实现用户需求,但这些版本都是完整的、可用的。
(2)版本间的增量要均匀,这一点是很重要的。如果第一个版本花费一个月的时间,而第二个版本需要花费 6 个月的时间,这种不均匀的分配会降低增量发布的意义,需要重新调整。
另一种策略是原型法。同增量发布不同,原型法的每一次迭代都经过一个完整的生命周期。当用户需求很不明确或技术架构中存在很多不可知因素的时候,可以采用原型法。在初始的原型中,针对一般性的用户需求进行快速实现,并不考虑算法的合理性或系统的稳定性。这个原型的主要目的是获得精确的用户需求,或验证架构的可用性。一般情况下,会在后面的开发中抛弃这个原型,重新实现完整的系统。
六、构件组装模型
随着软构件技术的发展,人们开始尝试利用软构件进行搭积木式的开发,即构件组装模型。在构建组装模型中,当经过需求分析定义出软件功能后,将对构件的组装结构进行设计,将系统划分成一组构件的集合,明确构件之间的关系。在确定了系统构件后,则将独立完成每一个构件,这时既可以开发软件构件,也可以重用已有的构件,当然也可以购买或选用第三方的构件。构件是独立的、自包容的,因此架构的开发也是独立的,构件之间通过接口相互协作。
构件组装模型的一般开发过程如图 6-4 所示。
在这里插入图片描述
构件组装模型的优点如下:
(1)构件的自包容性让系统的扩展变得更加容易
(2)设计良好的构件更容易被重用,降低软件开发成本
(3)构件的粒度较整个系统更小,因此安排开发任务更加灵活,可以将开发团队分成若干组,并行地独立开发构件。
鱼与熊掌不可兼得,构件组装模型也有明显的缺点:
(1)对构件的设计需要经验丰富的架构设计师,设计不良的构件难以实现构件的优点,降低构件组装模型的重用度。
(2)在考虑软件的重用度时,往往会对其他方面做出让步,如性能等。
(3)使用构件组装应用程序时,要求程序员熟练地掌握构件,增加了研发人员的学习成本。
(4)第三方构件库的质量会最终影响到软件的质量,而第三方构件库的质量往往是开发团队难以控制的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/232250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《ThreadLocal使用与学习总结:2023-12-15》史上最详细由浅入深解析ThreadLocal

由浅入深全面解析ThreadLocal 目录 由浅入深全面解析ThreadLocal简介基本使用ThreadLocal与synchronized的区别ThreadLocal现在的设计(JDK1.8)ThreadLocal核心方法源码分析ThreadLocalMap源码分析弱引用与内存泄露(内存泄漏和弱引用没有直接关…

3.3 右值引用:移动语义与完美转发

一、移动语义的引入 1.浅拷贝带来的问题 对于存在资源(文件,指针)类型成员的类对象,在执行拷贝的时候存在资源管理的问题,这是浅拷贝导致的。 此时我们可以重写拷贝构造实现深拷贝,解决资源管理的问题。 但是有的时候拷贝并不…

【QT】QDockWidget控件的使用

目录 1.概述 2.常用函数介绍 3.QDockWidget布局相关 4.QDockWidget的使用注意事项 5.使用场景 6.简单应用示例代码 1.概述 QDockWidget类提供了一个小部件,可以停靠在QMainWindow中,也可以作为桌面上的顶级窗口浮动。 QDockWidget提供了dock Widg…

EMC测试与整改实践?|深圳比创达电子

电磁兼容(EMC)测试和整改是当今社会对电磁兼容(EMC)意识日益深入的表现,EMC测试与整改随着社会对电磁环境要求的不断提高,越来越受到重视,下面就EMC测试与整改实践进行一下详细介绍。 一、什么是EMC测试? EMC测试是指在一定的电…

减速机振动相关标准 - 笔记

参考标准:国家标准|GB/T 39523-2020 减速机的振动标准与发动机不同,摘引: 原始加速度传感器波形 可以明显看到调幅波 它的驱动电机是300Hz~2000Hz范围的。这个采样时间是5秒,看分辨率至少1024线。可分出500条谱线。 频谱部分 …

干货分享 | 如何在TSMaster中对常用总线报文信号进行过滤?

TSMaster软件平台支持对不同总线(CAN、LIN、FlexRay)的报文和信号过滤,过滤方法一般有全局接收过滤、数据流过滤、窗口过滤、字符串过滤、可编程过滤,针对不同的总线信号过滤器的使用方法也基本相同。今天重点和大家分享一下关于T…

魔众文库系统v5.8.0版本发布:水印、分类与移动端升级,打造更高效文档管理体验

魔众文库系统迎来了全新的v5.8.0版本更新!此次更新不仅对水印功能进行了升级,还新增了辅助分类样式,同时优化了移动端体验。让我们一起来看看这次更新的亮点吧! 一、水印功能全新升级 在v5.8.0版本中,魔众文库系统的…

Spring学习?这一篇文章就够,史上最全!

文章目录 前言一、IOC概述及底层原理1.概述和原理 二、思路分析三、IOC操作bean管理(基于xml,使用的是IDEA2022.3.3,maven仓库)1.xml实现bean管理(1)创建对象(2)注入属性&#xff08…

[HTML]Web前端开发技术3(HTML5、CSS3、JavaScript )超链接,target,scrolling,marginwidth,frameborder,iframe——喵喵画网页

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

c语言:[输出函数]与[输入函数]|要点简述

一、【输出函数】 printf() 与 puts()的不同点 1、printf()函数 printf()支持单个字符%c的输出,以及字符串%s的输出。 (1)如果是以%c的形式输出,是一个字符一个字符的输出。因此,要用一个循环语句,把字符逐个输出。 (2)而用%…

骨传导耳机和气传导耳机有什么区别?谁更值得入手?

先说答案,骨传导耳机和气传导耳机的佩戴方式和传声方式不同,并且骨传导耳机相比于气传导耳机更值得入手。 一、骨传导耳机和气传导耳机有什么区别 1、佩戴方式不同 骨传导耳机采用一体式耳挂佩戴或耳夹式佩戴,气传导耳机采用分体式耳挂设计…

羊大师揭秘,皮肤保湿不如喝点羊奶?

羊大师揭秘,皮肤保湿不如喝点羊奶? 在寒冷的冬季,人们常常会发现自己的皮肤变得干燥、粗糙,甚至出现裂纹。而这时候,大家或许很难联想到喝点羊奶能够改善这一问题。但是小编羊大师发现,事实上羊奶确实可以…

前端开发中的webpack打包工具

前端技术发展迅猛,各种可以提高开发效率的新思想和框架层出不穷,但是它们都有一个共同点,即源代码无法直接运行,必须通过转换后才可以正常运行。webpack是目前主流的打包模块化JavaScript的工具之一。 本章主要涉及的知识点有&am…

高中python语言常用语句,高中python教程标准

大家好,小编来为大家解答以下问题,高中python语言常用语句,高中python教程标准,现在让我们一起来看看吧! 大家好,本文将围绕高中python语言常用语句展开说明,高中python例题和答案是一个很多人都…

Axure之交互与情节与一些实例

目录 一.交互与情节简介 二.ERP登录页到主页的跳转 三.ERP的菜单跳转到各个页面的跳转 四.省市联动 五.手机下拉加载 今天就到这里了,希望帮到你哦!!! 一.交互与情节简介 "交互"通常指的是人与人、人与计算机或物体…

第二证券:股票交易时间以及规则是什么?

股票生意时间以及规则是什么? 1、股票生意时间 周一至周五上午9:30-11:30,下午13:00-15:00,周末以及法定节假日休市不进行生意。可是不生意不代表不能进行托付,股票在清算之后投资者就能够进行托付。股票的清算时间&…

一招教你将logo背景变透明,省时又方便!

透明背景的Logo可以与不同的背景颜色或图像融合,而不会出现突兀或不协调的感觉,这使得Logo在各种媒体和设计中更加灵活和多用途,想要把图片去背景变透明的方法有很多,比如最常见的就是利用ps软件来处理,不过这个图片去…

308 Permanent Redirect的一种可能解决方案:检查一下请求路径

两条斜线导致请求可能自动定向到https了?反正给改成一条斜线就好了

我的4096创作纪念日

机缘 岁月如梭,时光一晃已经在CSDN扎根4096天了。第一次注册CSDN好像还是在2012年,那会还没大学毕业。初入CSDN,只是把他当作自己编程时遇到问题的在线笔记记录而已,没想到无意间还帮助了其他遇到同样问题困扰的同学。而在这4096…

uni-data-checkbox无法选中

问题描述 今天在使用uni-data-checkbox时候发现文字选中了&#xff0c;单选的小圆圈没有出来。在浏览器模拟手机显示的效果和在安卓手机上显示的效果都和下面的图一样。 错误代码 <uni-data-checkbox mode"list" v-model"chooseLanguage" :localdata…