软件开发模型

软件的"生命周期"一般分为6个阶段,即制定计划、需求分析、设计、编码、测试、运行和维护。在软件工程中,这个复杂的过程一般用软件开发模型来描述和表示。常见的软件开发模型有:以软件需求为前提的瀑布模型,渐进式开发模型(如螺旋模型、增量模型等),以形式化开发方法为基础的变换模型,敏捷开发方法等。

▶1.瀑布模型

瀑布模型的核心思想是:使用系统化的方法将复杂的软件开发问题化简,将软件功能的实现与设计分开。将开发划分为一些基本活动,如制定计划、需求分析、软件设计、程序编写、程序测试、软件运行和维护等基本活动。如图2-30所示,瀑布模型的软件开发过程自上而下,相互衔接,如同瀑布流水,逐级下落。

瀑布模型是最早出现的软件开发模型,在软件工程中占有重要的地位。瀑布模型的本质是一次通过,即每个活动只执行一次,最后得到软件产品。

瀑布模型有利于大型软件开发过程中人员的组织和管理,有利于软件开发方法和工具的研究与使用,从而提高了大型软件项目开发的质量和效率。然而软件开发的实践表明,瀑布模型存在以下严重缺陷。

一是开发模型呈线性,当开发成果未经测试时,用户无法看到软件效果,这样软件与用户见面的时间较长,增加了一定的风险;二是软件开发前期没有发现的错误,传到后面开发活动中时,错误会扩散,进而可能造成整个项目开发失败;三是在软件需求分析阶段,完全确定用户的所有需求非常困难,甚至可以说是难以达到的目标。

互联网硅谷创业权威保罗·格雷厄姆(Paul Graham)指出:有些创业者希望软件第一版就能推出功能齐全的产品,满足所有的用户需求,这种想法存在致命的错误。美国硅谷创业者最忌讳的就是"完美"。因为,一方面用户需求是多样的,不同人群有不同的需求;另一方面开发者想象的需求往往和真实的用户需求有偏差。在美国硅谷,Shipping it是一个流行词汇,意思是把你的产品从仓库里拿出来给客户;除了字面上的意思,其实还有一种精神层面的意义:你的东西要到客户手中才会有价值,而这是你一直以来追求的目标。

▶2.增量模型

使用增量模型时,第一个增量往往是产品的核心,即它实现了系统的基本需求,但很多补充的特征还有待发布。客户对每一个增量功能的使用和评估,都作为下一个增量发布的新特征和功能,这个过程在每一个增量发布后不断重复,直到产生了最终的完善产品。增量模型本质上是迭代的,它强调每一个增量均是一个可操作的产品。

增量模型是刚开始不用投入大量人力资源。它先推出产品的核心部分,如果产品很受欢迎,则增加人员实现下一个增量。此外,增量能够有计划地管理技术风险。

增量模型的缺点是:如果增量包之间的关系没有处理好,就会导致系统的全盘分析和重新建立。这种模型较适应于需求经常改变的软件开发过程。

▶3.敏捷开发方法

敏捷开发是近年兴起的一种轻量级软件开发方法,它的价值观是:沟通、简单、反馈、勇气、谦逊。它强调适应性而非预测性,强调以人为中心而不是以流程为中心,强调对变化的适应和对人性的关注。皱捷方法强调程序员团队与业务专家之间的紧密协作,面对面的沟通,频繁交付新的软件版本,很好地适应需求变化,更加注重软件开发中人的作用。敏捷开发借鉴了软件工程中的迭代与增量开发,敏捷开发方法包括极限编程(XP)、Scrum(短距离赛跑的意思,一种达代式增量开发)、Crystal(频繁交付和紧密沟通)、上下文驱动测试、精益开发、统一过程等。

敏捷开发遵循以下基本原则:

(1)最重要的是通过尽早和不断交付有价值的软件满足客户需要。

(2)即使在开发后期,也欢迎用户改变需求,利用变化来为客户创造竞争优势。

(3)经常交付可以工作的软件,从几星期到几个月,时间尺度越短越好。

(4)敏捷方法要求尽可能少的文档,最根本的文档应该是程序代码。

(5)在项目开发期间,业务人员和开发人员必须天天在一起工作。

(6)文档的作用是记录和备忘,最有效率的信息传达方式是面对面地交谈。

(7)每隔一定时间,团队需要对开发工作进行反省,并相应地调整自己的行为。

(8)确定开发中的瓶颈,对于瓶颈处的工作应该尽量加快,减少重复。

敏捷开发也有局限性,如对那些需求不明确,优先权不清楚,或者在"较快、较便宜、较优"三角结构中不能确定优先级的项目,采用敏捷开发方法很困难。

相关推荐
西岸行者4 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意4 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码4 天前
嵌入式学习路线
学习
毛小茛4 天前
计算机系统概论——校验码
学习
babe小鑫4 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms4 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下4 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。4 天前
2026.2.25监控学习
学习
im_AMBER4 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J4 天前
从“Hello World“ 开始 C++
c语言·c++·学习