软件工程学习笔记—————传统模型、面向对象模型的比较
本文重在模型之间的比较(优缺点、适用范围等),而不在于模型定义的阐述.^-^
不过还是要先提几个基本概念滴:
1.软件生存周期:软件是会迭代的,软件从生到死的整个过程被称为软件生命周期(Software Development Life Cycle,SDLC)。
一般的,可分为定义、开发和运行三个时期,又可细分为以下六个阶段:问题的定义和可行性分析、项目计划、需求分析、软件设计、编码与测试、运行与维护。
2.软件过程是整个软件生命周期中一系列有序的软件生产活动的流程。
3.软件过程模型:为了高效地开发一个高质量的软件产品,用一个合理的框架来规范描述软件生命周期中的各个流程,这个框架(开发模型)就是软件过程模型。可分为三类:传统模型、面向对象模型和敏捷开发模型(本次只介绍前两个,敏捷还没学嘛)
下面来介绍传统模型:
传统模型
那就不得不提到最早也是应用最广泛的软件过程模型————瀑布模型
瀑布模型将软件生命周期分为软件计划、需求分析、软件设计、软件实现、软件测试、运行和维护等六个阶段,每一阶段是“阻塞式”的,即必须完成当前部分才能进行下一步活动。这六个阶段自上而下执行,开发进程从一个阶段“流动”到下一个阶段,如果发现问题则考虑返回上一层修改。
(1)优点:
1.再每个阶段都有检查点,当本阶段完成后,可以更有信心地专注于下一阶段
2.瀑布模型是文件驱动模型,瀑布模型再执行过程中留下了完整的文档记录,有利于降低后期软件维护的成本
3.提出了一套完整的科学的软件开发流程(其迭代思想被多个模型借鉴),使工程师可以工程化的完成软件的开发与设计。
(2)缺点:
1.“推迟实现”的指导思想使用户在工程后期才看到开发成果,这增加了开发风险,且越往工程后期发现错误后改正的代价越大,甚至需要推翻重来,举个栗子:做好一辆汽车后才忽然想起没安倒车灯,这得重新设计电路,把底盘都卸了重装啊!Tcl !
2.不能混好的适应用户需求的变化,比如:编完代码,写完测试,用户告诉你这个地方要改一下,懂吧...
3.增加工作量,秃头的程序员宝宝不仅要敲代码,还得写文档T_T
(3)使用范围:
产品定义明确且稳定,需求不会频繁变化
和用户合作愉快,完整且周期的理解了用户需求,保证软件的正确性
因负责各个子模块的成员在不同机构或者在不同地理位置等因素,交流不方便的团队
原型模型 尽快得到一个实际系统的小样,然后让用户评价,之后反复修改原型,直到用户满意为止
(1)优点:
可以尽快看到模型小样
借助小样明确需求,方便开发人员与用户交流
尽快占领市场
(2)缺点:
用户开始看到的原型版本功能不全,如果一开始用户的需求就混明确,这不是浪费时光嘛!
(3)适用:
开始没太想好软件功能,或者需求总在变化的软件
开发周期很长的项目
增量模型是瀑布模型的进阶,分为增量构造模型和演化提交模型
(一)增量构造模型
(二)演化提交模型
(1)优点:
将具体的实现分成不同的模块,各个模块可以并行,缩短开发时间
有利于软件的扩展性
用户可以尽早看到部分软件功能,有利于明确需求,改正错误
分批次交付,先完成主要功能,然后添加次要功能,有利于尽早占领市场
降低开发风险,一般某个模块开发失败或者延期交付不会影响其他模块的开发
(2)缺点
实际上,有些模块在使用时必须要用到其他模块,必须事先定义好接口
增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而使软件过程的控制失去整体性。
(3)适用:
需求不明确且开发周期长的项目
需求变化大,需要及时响应市场需求的项目
螺旋模型 结合了瀑布模型和快速原型模型的迭代开发模型(!!!强调了其他模型忽略的风险分析)
(1)优点:
螺旋模型最大的特点在于引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。
同时,在每个迭代阶段构建原型是螺旋模型用以减小风险的途径。所以还兼具原型模型的优点
(2)缺点:
实际上有时候开发人员并不能真正判断是否会发生风险(例如系统正在走向灾难时,开发人员可能还认为一切正常),这就要求软件开发人员具有丰富的风险评估经验和这方面的专门知识。
增加成本(请人不花小钱钱吗?)。
(3)适用:
风险较大且开发难度大的项目
面向对象软件过程模型
构件集成模型
整个系统模块化;复用构件库中的软件构件
(本来要附图片的,但是没找着)
(1)优点:
实现软件的重用,提高软件开发的效率,降低了开发成本和开发风险
(2)缺点:
可重用性与软件高效性不可兼得
过分依赖构件库会导致软件质量下降
(3)适用范围:
已有软件的扩展
需要开发的软件大部分功能可以通过构件库实现
其实适用范围蛮广的@(--_--)@
统一过程模型(RUP/UP,Rational Unified Process)
风险驱动的、基于用例的、以架构为中心的迭代的可配置的开发流程
(图文不完全一致,是网上找到的比较清晰的图)
横轴:一次迭代过程中的四个阶段:初始、细化、构建、移交
纵轴:五个核心流:需求、分析、设计、实现、测试
我的理解:根据软件的特点,每隔一段时间都要进行一次大的迭代,即整个横轴(全过程四个阶段:初始、细化、构建、移交)的一次迭代。在一次大的迭代过程中,五个核心流贯穿其中,即四个阶段都包含这五个核心流(只是不同核心流在不同阶段的参与程度不同)。而每个阶段也可以采用多次迭代的方法来完成和完善。
(1)优点:
统一模型是基于构件的开发模型,较好的实现代码重用
用例驱动的、可配置的,对需求变化有较好的适应力
每一次迭代得到的都是可交付的版本,用户可以较早看到开发成果,缩短了版本间的开发周期
迭代过程中加入了风险分析,可以减少软件开发风险,或者较早的发现错误
(2)缺点:
不支持多项目开发,这一定程度上降低了软件的重用
(3)适用于:
准备长时间开发和维护的软件
其实蛮多都可以用滴
OVER!
参考资料及说明
图片来源:抱歉第一次写博客,没存原图片的网址,只有两个图片的原网址可以找到_(:_」∠)_(如果图片所有者能看到我的博客,请您在我的博客上留言,我可以撤掉图片)
一图二图来自百度文库的一份PPT,三图好像来自百度百科,表情包来自本机,最后一张图来自photo.blog.sina.com.cn
参考书籍
《软件过程方法与实践》第三版,机械工业出版社
参考网址:
抱歉抱歉,分两天写的,第一天的网址又没存,只剩今天的一个了https://blog.csdn.net/shadowyelling/article/details/7412336
第一次写博客,诸多不足之处,请指教。
软件工程学习笔记—————传统模型、面向对象模型的比较相关推荐
- 软件工程学习笔记《一》什么是软件工程
文章目录 软件工程学习笔记目录 软件工程过程 软件工程方法 软件质量 软件质量如何评价 软件的质量模型 ISO9126模型 易用性: 效率 可维护性 可移植性 为什么内存缓冲区是2048或4096 软 ...
- 软件工程学习笔记《四》需求分析
文章目录 软件工程学习笔记<目录> 需求工程师 当代的需求工程师需要具备的能力 当代的需求工程师需要努力的方向 当代的需求工程师需要注意的错误 需求的定义 需求目标 需求分析的实质 需求分 ...
- 软件工程学习笔记《目录》
软件工程学习笔记<目录> 软件工程学习笔记<一>什么是软件工程 软件工程学习笔记<二>代码规范 软件工程学习笔记<三>代码优化和性能测试 软件工程学习笔 ...
- 软件工程学习笔记《三》代码优化和性能测试
文章目录 软件工程学习笔记目录 如何在开源社区提问? 代码审查 代码优化 运行结果 参数解释 代码优化原则 对常见的数据结构排序算法进行测试 关于冒泡排序优化的探讨 结果 软件工程学习笔记目录 [ht ...
- 软件工程学习笔记《二》代码规范
文章目录 软件工程学习笔记目录 google代码规范 节选python来自google翻译 错误注释的示例 命名规范 import语句的规范 import this 源码 软件工程学习笔记目录 [ht ...
- CSS 学习笔记 - 盒模型
CSS学习笔记 - 盒模型 外边距margin 内边距padding 背景background 背景图background-image 边框border 样式 宽度 颜色 圆角 边框图片border- ...
- 学习笔记_OSI模型
学习笔记_OSI模型 OSI模型简介 OSI模型各层说明 OSI模型简介 OSI/RM协议由ISO(国际标准化组织)指定,功能为 给开发者提供一个通用的.必须的概念以便开发及完善:可以用来解释连接不同 ...
- labview学习笔记--3D模型(3)
labview学习笔记–3D模型(3) 这次的内容是设置模型的运动–平移和旋转 1.首先,我们先找到设置平移和设置旋转的控件:程序框图->编程->图形与声音->三维图片控件-> ...
- 学习笔记 | 传统企业互联网改革之道
[学习笔记]| 作者 / Edison Zhou 这是EdisonTalk的第306篇学习分享 最近在看刘润老师的<互联网+战略版:传统企业,互联网在踢门>,学习了传统企业互联网改革的价值 ...
- 《南溪的目标检测学习笔记》——模型预处理的学习笔记
1 介绍 在目标检测任务中,模型预处理分为两个步骤: 图像预处理:基于图像处理算法 数值预处理:基于机器学习理论 关于图像预处理,请参考<南溪的目标检测学习笔记>--图像预处理的学习笔记 ...
最新文章
- C# 写了个获取本机外网IP发送邮件的服务- 分享。
- 重复数据删除(De-duplication)技术研究
- Ribbon 客户端负载均衡
- BZOJ2659: [Beijing wc2012]算不出的算式
- Less入门与安装(转)
- 2018智慧零售白皮书
- r语言ggplot画两条曲线_R语言作图——Line plot with error
- c语言指针选择排序1,求助利用指针进行选择排序
- [链表|多解法] leetcode 19 删除链表的倒数第N个节点
- MySQL查看和修改数据库存储目录
- 微信小程序:强大的多功能图片处理器
- 打印机服务器状态未知怎么办,打印机状态信息不可用是怎么回事
- Selenium - What will happen behind the scenes when running client code
- 互联网赚钱指南!我是如何零成本空手套白狼?
- 计算机课件白板培训,交互式电子白板的使用培训(1)(2)ppt课件
- Electron入门宝典(三)菜单快捷键
- 【目标检测】Receptive Field Block Net for Accurate and Fast Object Detection论文理解
- ChatGPT国内镜像站
- 盘点最常见的5个编程语言排行榜、排名逻辑最新榜单。
- 2022年艺术品和古董投资策略研究报告
热门文章
- 批处理bat 删除指定文件夹下的文件及文件夹
- fullCalendar日历:中文API
- 软件架构入门及分类——微服务架构
- c#程序设计实训报告心得体会_C#.NET程序设计实验一实验报告
- 关于OS端/iOS端QQ表情白边处理方案
- HTML静态网页作业-HTML5+CSS大作业——年会抽奖网页设计(1页)
- WMS仓库管理系统与ERP仓储系统的区别与联系
- 继云计算巨头失火后,微软决定送数据中心去“泡澡”!
- 豆瓣电影top250
- archlinux for wps 字体缺失解决办法