转载自 alex_wan http://blog.csdn.net/alex_wan/articles/744495.aspx
所谓模型就是一种开发策略,这种策略针对软件工程的各个阶段提供了一套范形,使工程的进展达到预期的目的。对一个软件的开发无论其大小,我们都需要选择一个合适的软件过程模型,这种选择基于项目和应用的性质、采用的方法、需要的控制,以及要交付的产品的特点。一个错误模型的选择,将迷失我们的开发方向。对于下面的模型,希望能够给开发者们一个参考和一点启示。
一、 线性顺序过程模型:
它有时也称为传统生存周期模型或瀑布模型。它提出了软件开发的系统化的、顺序的方法。其流程从系统开始,随后是需求分析、设计、编码、测试、支持。这种模型是最早也是应用最广泛的软件过程模型(虽然这种模型会引起“堵赛状态”)。
缺点:
1、 实际的项目大部分情况难以按照该模型给出的顺序进行,而且这种模型的迭代是间接的,这很容易由微小的变化而造成大的混乱。
2、 经常情况下客户难以表达真正的需求,而这种模型却要求如此,这种模型是不欢迎具有二义性问题存在的。
3、 客户要等到开发周期的晚期才能看到程序运行的测试版本,而在这时发现大的错误时,可能引起客户的惊慌,而后果也可能是灾难性的。
4、 采用这种线性模型,会经常在过程的开始和结束时碰到等待其他成员完成其所依赖的任务才能进行下去,有可能花在等待的时间比开发的时间要长。我们称之为“堵赛状态”。
优点:
1、它提供了一个摸板,这个摸板使得分析、设计、编码、测试和支持的方法可以在该摸板下有一个共同的指导。
2、虽然有不少缺陷但比在软件开发中随意的状态要好得多。
二、 原型实现过程模型:
从需求收集开始,开发者和客户在一起定义软件的总体目标,标识已知的需求并且规划出需要进一步定义的区域。然后是“快速设计”,它集中于软件中那些对客户可见的部分的表示,这将导致原型的创建,并由客户评估并进一步精化待开发软件的需求。逐步调整原型使其满足客户的需求,这个过程是迭代的。其流程从听取客户意见开始、随后是建造/修改原型、客户测试运行原型、然后回头往复循环直到客户对原型满意为止。由于这种模型可以让客户快速的感受到实际的系统(虽然这个系统不带有任何质量的保证),所以客户和开发者都比较喜欢这种过程模型(对于那些仅仅用来演示软件功能的公司而言或从来不考虑软件质量和不害怕长期维护的公司而言)。
缺点:
1、 没有考虑软件的整体质量和长期的可维护性。
2、 大部分情况是不合适的操作算法被采用目的为了演示功能,不合适的开发工具被采用仅仅为了它的方便,还有不合适的操作系统被选择等等。
3、 由于达不到质量要求产品可能被抛弃,而采用新的模型重新设计。
优点:
1、如果客户和开发者达成一致协议:原型被建造仅为了定义需求,之后就被抛弃或者部分抛弃, 那么这种模型很合适了。
2、迷惑客户抢占市场,这是一个首选的模型。
三、 快速应用(RAD) 过程模型:
这是一个增量型的软件开发过程模型,强调极短的开发周期,它是线性模型的一个“高速”变种,通过使用构件的建造方法赢得了快速开发。如果需求理解的好而且约束了项目的范围,利用这种模型可以很快的创建出功能完善的“信息系统”。其流程从业务建模开始,随后是数据建模、过程建模、应用生成、测试及反复。RAD过程强调的是复用,复用已有的或开发可复用的构件。实际上RAD采用第四代技术。
缺点:
1、 只能用于信息系统。
2、 对于较大的项目需要足够的人力资源去建造足够的RAD组。
3、 开发者和客户必须在很短的时间完成一系列的需求分析, 任何一方配合不当都会导致RAD项目失败。
4、 这种模型对模块化要求比较高,如果有哪一功能不能被模块化,那么建造RAD所需要的构件就会有问题。
5、 技术风险很高的情况下不适合这种模型。
优点:
1、 开发速度快,质量有保证。
2、 对信息系统特别有效。
四、 增量过程模型:
这种模型融合了线性顺序模型的基本成份和原型实现模型的迭代特征。增量模型采用随着日程时间的进展而交错的线性序列。每一个线性序列产生软件的一个可发布的“增量”。当使用增量模型时,第一个增量往往是核心的产品,也就是说第一个增量实现了基本的需求,但很多补充的特征还没有发布。客户对每一个增量的使用和评估,都做为下一个增量发布的新特征和功能。这个过程在每一个增量发布后不断从复,直到产生了最终的完善产品。增量模型强调每一个增量均发布一个可操作的产品。
缺点:
1、 至始至终开发者和客户纠缠在一起,直到完全版本出来。
优点:
1、 人员分配灵活,刚开始不用投入大量人力资源,当核心产品很受欢迎时,可增加人力实现下一个增量。
2、 当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径,这样就可以先发布部分功能给客户,对客户起到镇静剂的作用。
3、 具有一定的市场。
五、 螺旋过程模型:
这是一个演化软件过程模型,它将原型实现的迭代特征和线性顺序模型中控制的和系统化的方面结合起来。使得软件的增量版本的快速开发成为可能。在螺旋模型中,软件开发是一系列的增量发布。在每一个迭代中,被开发系统的更加完善的版本逐步产生。螺旋模型被划分为若干框架活动,也称为任务区域。典型地,有3到6个任务区域:
1、 客户交流:建立开发者和客户之间有效通信所需要的任务。
2、 计划:定义资源、进度、及其它相关项目信息所需要的任务。
3、 风险分析:评估技术的及管理的风险所需要的任务。
4、 工程:建立应用的一个或多个表示说需要的任务。
5、 构造及发布:构造、测试、安装和提供用户支持所需要的任务。
6、 客户评估:基于对在工程阶段产生的或在安装阶段实现的软件表示的评估,获得客户反馈所需要的任务。
这是一个相对较新的模型,它的功效还需要经历若干年的使用方能确定下来。
缺点:
1、 需要相当的风险分析评估的专门技术,且成功依赖于这种技术。
2、 很明显一个大的没有被发现的风险问题,将会导致问题的发生,可能导致演化的方法失去控制。
3、 这种模型相对比较新,应用不广泛,其功效需要进一步的验证。
优点:
1、对于大型系统及软件的开发,这种模型是一个很好的方法。开发者和客户能够较好地对待和理解每一个演化级别上的风险。
六、 WINWIN螺旋过程模型:
螺旋模型提出了强调客户交流的一个框架活动。该活动的目标是从客户处诱导项目需求。在理想情况下,开发者简单地询问客户需要什么,而客户提供足够的细节进行下去。不幸的是这种情形很少发生。在现实中,客户和开发者进入一个谈判过程,客户被要求在成本和应市之间的约束下平衡功能、性能、和其它产品或系统特征。最好的谈判追求“双赢”结果,也就是说通过谈判客户获得大部份系统的功能,而开发者则获得现实的和可达到的预算和时限。对客户的交流定义了下面的活动:
1、 系统或子系统的关键“风险承担者”的标识。
2、 风险承担者的“赢条件”的确定。
3、 风险承担者的赢条件谈判,以将它们协调为一组满足各方考虑的双赢条件。
缺点:
1、 需要额外的谈判技巧。
优点:
1、 客户和开发者达到一种平衡。
七、 并发任务过程模型:
这种模型关注于多个任务的并发执行,表示为一系列的主要技术活动、任务及它们的相关状态。并发过程模型是由客户要求、管理决策、评审结果驱动的。该模型不是将软件工程活动限定为一个顺序的事件序列,而是定义了一个活动网络。网络上的每一个活动均可于其它活动同时发生。这种模型可以提供一个项目的当前状态的准确视图。
缺点:暂时无
优点:
1、 可用于所有类型的软件开发,而对于客户/服务器结构更加有效。
2、 可以随时查阅到开发的状态。
八、 基于构件的开发过程模型:
面向对象的技术为软件工程的基于构件的过程模型提供了技术框架。面向对象模型强调了类的创建、类的封装了的数据、操纵该数据的算法。一般来讲经过合适的设计和实现,面向对象的类可以在不同的应用及基于计算机的系统的体系结构中复用。基于构件的开发模型融合了螺旋模型的许多特征,它本质上是演化形的,要求软件创建的迭代方法。然而基于构件的开发模型是利用预先包装好的软件构件(有时成为类)来构造应用。
开发活动从候选类的标识开始,这一步是通过检查将被应用系统操纵的数据及用于实现该操纵的算法来完成的。相关的数据和算法被封装成一个类。
缺点:
1、 过分依赖于构件,构件库的质量影响着产品质量。
优点:
1、 构件可复用。提高了开发效率。
2、 采用了面向对象的技术。
九、 形式化方法模型:
形式化方法模型包含了一组活动,他们导致了计算机软件的数学规约。形式化方法使得软件工程师们能够通过应用一个严格的数学符号体系来规约、开发、和验证基于计算机的系统。 这种方法的一个变种,称为净室软件工程,已经被一些组织所采用。在开发中使用形式化方法时,它们提供了一种机制,能够消除使用其它软件过程模型难以克服的很多问题。二义性、不完整性、不一致性能被更容易地发现和纠正,而不是通过专门的评审,是通过对应用的数学分析。 形式化方法提供了可以产生无缺陷软件的承诺。
缺点:
1、 开发费用昂贵(对开发人员需要多方面的培训),而且需要的时间较长。
2、 不能将这种模型作为对客户通信的机制,因为客户对这些数学语言一无所知。
3、 目前还不流行。
优点:
1、 形式化规约可直接作为程序验证的基础,可以尽早的发现和纠正错误(包括那些其它情况下不能发现的错误)。
2、 开发出来的软件具有很高的安全性和健壮性,特别适合安全部门或者软件错误会造成经济损失的开发者。
3、 具有开发无缺陷软件的承诺。
十、 第四代技术(4GT)过程模型:
一系列的软件工具的使用,是第四代技术的特点。这些工具有一个共同的特点:能够使软件工程师们在较高级别上规约软件的某些特征,然后根据开发者的规约自动生成源代码。我们知道,软件在越高的级别上被规约,就越能被快速的建造出程序。软件工程的
4GT模型集中于规约软件的能力:使用特殊的语言形式或一种采用客户可以理解的术语描述待解决问题的图形符号体系。和其它模型一样,4GT也是从需求收集这一步开始的,要将一个4GT实现变成最终产品,开发者还必须进行彻底的测试、开发有意义的文档,并且同样要完成其它模型中同样要求的所有集成活动。总而言之,4GT已经成为软件工程的一个重要方法。特别是和基于构件的开发模型结合起来时,4GT模型可能成为当前软件开发的主流模型!
缺点:
1、 用工具生成的源代码可能是“低效”的。
2、 生成的大型软件的可维护性目前还令人怀疑。
3、 在某些情况下可能需要更多的时间。
优点:
1、 缩短了软件开发时间,提高了建造软件的效率。
2、 对很多不同的应用领域提供了一种可行性途径和解决方案。
分享到:
相关推荐
接着,选用多种常见的分类模型,如C4.5决策树、RIPPER规则学习算法、SMO支持向量机等,对这些新数据集进行预测,并利用AUC(面积下曲线)指标评估模型的分类性能。AUC是一种衡量分类器好坏的无偏指标,不受类别比例...
软件过程模型的选择依据项目的特性、采用的方法和工具,以及对质量和交付物的需求。 在软件工程过程中,软件过程模型扮演着关键角色。模型的选择基于项目的特点和需求,通常包括状态捕获、问题定义、技术开发和方案...
本项目提供了一个基于PyTorch实现的物体分类可视化系统,包含源码、预训练模型以及详细的训练教程,旨在帮助初学者和专业人士深入理解并实践深度学习物体分类。 一、PyTorch深度学习框架基础 PyTorch的核心在于它的...
实验过程中,分别使用了LibSVM、C4.5决策树和朴素贝叶斯三种分类器对数据集进行训练和测试,寻找最佳的模型参数。在模型训练后,通过对模型的全面评价,选取性能最佳的分类模型。 实验过程中的关键步骤包括使用Weka...
瀑布模型是一种线性顺序模型,快速原型模型强调快速建立原型以获得用户反馈,增量模型将产品分解为多个可逐步集成的增量部分,喷泉模型则适用于迭代的开发过程,螺旋模型融合了迭代开发与风险管理。 在软件工程工具...
这一标准为军用软件的研制能力设定了成熟度模型,包括过程改进、项目管理、工程实践等方面的评价标准,旨在提升软件开发组织的能力水平。 #### GJB5082-2004《战术无线通信系统软件通信体系结构》 该标准为战术无线...
文件train-pt.py、test-pt.py和infer-pt.py很可能涉及到深度学习模型的训练、验证和预测过程。可能使用了深度学习框架如TensorFlow或PyTorch,这些框架可以构建卷积神经网络(CNN)来处理图像分类任务。CNN擅长从...
《03 论软件需求分析方法和工具的选用——通信行业的应用》 本文主要探讨了在通信行业背景下,如何选择和应用软件需求分析方法和工具,以确保开发出的业务报表系统能够满足用户需求。软件需求分析是软件工程的关键...
这些复习题涵盖了软件工程的多个关键知识点,包括软件过程模型的选择、可重用系统的挑战、问题分类、第三方组件集成考虑、工作量估算以及软件开发生命周期中的不同阶段模型应用。这些内容对于理解和应对软件工程的...
- **内容概述**:规定了软件工具评价与选择的分类特性体系。 - **作用**:为软件工具的选择提供参考。 21. **HB/Z177-1990 软件项目管理基本要求** - **内容概述**:规定了软件项目管理的基本要求。 - **作用**...
2. **软件开发模型**:讲解软件生存周期,探讨传统模型(如瀑布模型)与现代模型(如演化模型、面向对象模型、形式化方法模型),并通过实例分析开发模型的选用。 3. **软件需求分析**:详细阐述需求分析的任务、...
- 模型1的训练和测试MSE表明其预测精度较高,但模型2的效果较差,可能原因是数据集特性导致模型分类困难。 - 为了提升模型2的性能,可以考虑增加网络深度、添加更多特征或者采用其他更适合的模型架构。 7. **团队...
总的来说,这个项目涵盖了深度学习中的图像分类、模型复用、网络架构设计、训练与预测等多个重要知识点。通过实践这个项目,不仅可以深入理解PyTorch的工作原理,还能掌握VGG模型的应用,以及如何设计和优化双分支的...
4. Bug分类与优先级:根据Bug的性质进行分类,如功能错误、性能问题、界面异常等,并设置优先级,帮助团队优先处理关键问题。 5. 报告与统计:生成各种报表,如Bug趋势图、解决速率、处理周期等,为管理层提供决策...
- 评估与优化:通过绘制不同参数下模型的性能曲线,如删除高频词数量与测试准确率的关系图,来调整模型参数,优化分类效果。 3.4 实现流程 1. 使用jieba对中文文本进行分词,将文本转化为词向量。 2. 过滤掉无用...
- **模型选择与训练**:可能选用卷积神经网络(CNN)或其他适合图像识别的深度学习模型,进行参数调整和优化。 6. **系统实现** - **系统环境搭建**:包括硬件配置、软件环境(如Python环境、深度学习框架如...
在实验过程中,使用交叉熵损失函数评估模型预测与实际结果的差异,并利用Adam优化算法对模型进行调整和优化。 改进后的U-net模型在识别精度和泛化能力上均优于原始的U-net模型和全连接神经网络模型。这意味着它在...