软件工程与软件开发模型、软件开发方法
什么是软件工程?
软件工程一直以来都缺乏一个统一的定义。
IEEE给出的定义是:软件工程是:1.将系统化的、严格约束的、可质量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件;2.在1中所述方法的研究。
比较认可的一种定义是:软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。
什么是软件开发方法(或软件开发过程)?
软件开发方法找不到统一的定义,但是我们说极限编程(ExtremeProgramming,简称XP)、水晶(Crystal)方法、动态系统开发方法(DSDM)、Scrum、基于体系结构的软件开发、自适应软件开发(ASD)都是一种软件开发方法。这些方法都涉及了整个软件生命周期,都有相应的原则和方法论。
所以可以将软件开发方法定义为:一套应用于整个软件生命周期的方法论,它对软件生命周期(三个阶段:软件定义、软件开发、软件运行与维护)的活动作出了具体的描述和表示。软件开发方法应该是软件工程的一个产物或者说是软件工程的具体方法的集合。
什么是软件开发模型?
软件开发模型是软件开发实际过程的抽象与概括,它包括构成软件过程的各种活动,是对软件开发过程各阶段之间关系的一个描述、约束和表示。软件开发模型为软件开发过程提供原则和方法,为软件工程管理提供里程碑和进度表。
我们常见的软件开发基本模型有:瀑布模型(传统瀑布模型、迭代的瀑布模型、V模型)、原型模型(快速原型模型、演化模型或原型进化模型)、增量模型、螺旋模型、迭代模型等。
另外还有一些其他模型,例如:喷泉模型、敏捷模型、基于体系结构的开发模型,基于可重用构件的模型、基于面向对象的模型、基于第四代技术的模型、快速应用开发(RAD)模型等。这些模型都可以归结为基本模型中的一类,例如喷泉模型就是迭代模型的一种,敏捷模型是演化模型的一种,基于体系结构的开发模型是迭代模型的一种,基于可重用构件的模型只是强调了可重用组件在开发过程中的应用,开发过程可以是基本模型中的任何一种,基于面向对象的模型是面向对象技术在基本模型中的应用,快速应用开发(RAD)模型是增量模型的一种。
软件开发模型可以做以下归类:(没有任何参考,个人总结)
序号 |
基本模型 |
扩展模型 |
基本特征 |
1 |
瀑布模型 |
传统瀑布模型、迭代的瀑布模型、V模型 |
各个阶段的划分完全固定,阶段之间产生大量的文档,适用于需求明确的工程项目 |
2 |
原型模型 |
快速原型模型、演化模型或原型进化模型、敏捷模型 |
快速构建原型,频繁与客户沟通,开发阶段不断迭代,适用于需求不明确、变化快的工程项目 |
3 |
增量模型 |
快速应用开发(RAD)模型 |
整体上按照瀑布模型的流程实施,实际创建中将软件系统按功能分解为许多增量构件,适用于需求明确且可模块化的工程项目 |
4 |
螺旋模型 |
|
引入风险分析,每一个周期都包括需求定义、风险分析、工程实现和评审4个阶段,周期性迭代,适用于庞大、复杂并具有高风险的工程项目 |
5 |
迭代模型 |
喷泉模型、基于体系结构的开发模型 |
各个开发阶段基本固定,各阶段内部迭代、阶段之间迭代、整个流程迭代(演化),有明确的里程碑 |
软件开发方法与软件开发模型的关系?(没有任何参考,个人总结)
软件开发方法是软件开发模型的实际运用,是开发方法在软件开发实际过程的详细描述和具体规约。每个软件开发方法中都含有相应的软件开发模型,在软件开发方法中总能找到对应的基本开发模型。每个软件开发方法都有自己的侧重点、价值目标、规范和流程,直接面向适用的开发团队,甚至约束到人员职责、工作时间和协作内容。
例如敏捷开发中的极限编程,可以对应到演化模型(原型进化模型),适合小型开发团队。它对团队的参与者作出了规定,强调从简单做起、寻求反馈、勇于实事求是,主要目标在于降低因需求变更而带来的成本。极限编程技术以沟通、简单、反馈、勇气和尊重为价值标准,提倡团队协作和结对编程,每周40小时工作制。
后面软件开发方法的讨论都从相应的开发模型入手,以软件开发周期为基线展开,最后讨论该方法的特征、适用的团队。通过讨论理清利用该方法组织开发的流程及其注意事项。