软件开发模型

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

▶1.瀑布模型

瀑布模型的核心思想是:使用系统化的方法将复杂的软件开发问题化简,将软件功能的实现与设计分开。将开发划分为一些基本活动,如制定计划、需求分析、软件设计、程序编写、程序测试、软件运行和维护等基本活动。如图2-30所示,瀑布模型的软件开发过程自上而下,相互衔接,如同瀑布流水,逐级下落。
瀑布模型是最早出现的软件开发模型,在软件工程中占有重要的地位。瀑布模型的本质是一次通过,即每个活动只执行一次,最后得到软件产品。

瀑布模型有利于大型软件开发过程中人员的组织和管理,有利于软件开发方法和工具的研究与使用,从而提高了大型软件项目开发的质量和效率。然而软件开发的实践表明,瀑布模型存在以下严重缺陷。
一是开发模型呈线性,当开发成果未经测试时,用户无法看到软件效果,这样软件与用户见面的时间较长,增加了一定的风险;二是软件开发前期没有发现的错误,传到后面开发活动中时,错误会扩散,进而可能造成整个项目开发失败;三是在软件需求分析阶段,完全确定用户的所有需求非常困难,甚至可以说是难以达到的目标。
互联网硅谷创业权威保罗·格雷厄姆(Paul Graham)指出:有些创业者希望软件第一版就能推出功能齐全的产品,满足所有的用户需求,这种想法存在致命的错误。美国硅谷创业者最忌讳的就是“完美”。因为,一方面用户需求是多样的,不同人群有不同的需求;另一方面开发者想象的需求往往和真实的用户需求有偏差。在美国硅谷,Shipping it是一个流行词汇,意思是把你的产品从仓库里拿出来给客户;除了字面上的意思,其实还有一种精神层面的意义:你的东西要到客户手中才会有价值,而这是你一直以来追求的目标。

▶2.增量模型

使用增量模型时,第一个增量往往是产品的核心,即它实现了系统的基本需求,但很多补充的特征还有待发布。客户对每一个增量功能的使用和评估,都作为下一个增量发布的新特征和功能,这个过程在每一个增量发布后不断重复,直到产生了最终的完善产品。增量模型本质上是迭代的,它强调每一个增量均是一个可操作的产品。
增量模型是刚开始不用投入大量人力资源。它先推出产品的核心部分,如果产品很受欢迎,则增加人员实现下一个增量。此外,增量能够有计划地管理技术风险。
增量模型的缺点是:如果增量包之间的关系没有处理好,就会导致系统的全盘分析和重新建立。这种模型较适应于需求经常改变的软件开发过程。

▶3.敏捷开发方法

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

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

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

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

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

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

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

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

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

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

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

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

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

相关文章

华为OD机试 - 跳格子3(Java JS Python C)

题目描述 小明和朋友们一起玩跳格子游戏, 每个格子上有特定的分数 score = [1, -1, -6, 7, -17, 7], 从起点score[0]开始,每次最大的步长为k,请你返回小明跳到终点 score[n-1] 时,能得到的最大得分。 输入描述 第一行输入总的格子数量 n 第二行输入每个格子的分数 sc…

【C++】POCO学习总结(十九):哈希、URL、UUID、配置文件、日志配置、动态库加载

【C】郭老二博文之:C目录 1、哈希 1.1 说明 std::map和std::set 的性能是:O(log n) POCO哈希的性能比STL容器更好,大约快两; POCO中对应std::map的是:Poco::HashMap; POCO中对应std::set的是 Poco::Hash…

k8s-ingress 8

ExternalName类型 当集群外的资源往集群内迁移时,地址并不稳定,访问域名或者访问方式等会产生变化; 使用svc的方式来做可以保证不会改变:内部直接访问svc;外部会在dns上加上解析,以确保访问到外部地址。 …

AUTOSAR StbM模块的配置以及代码实现

AUTOSAR StbM模块的配置以及代码实现 1、AUTOSAR配置 2、StbM_Init 初始化各个变量。 3、StbM_MainFunction StbM_Rb_IsSyncTimeBase 同步的TimeBase的id范围是0-15 StbM_Rb_IsOffsetTimeBase offset的TimeBase的id范围是16-31 StbM_Rb_IsPureLocalTimeBase pure的Time…

接口自动化测试框架【AIM】

最近在做公司项目的自动化接口测试,在现有几个小框架的基础上,反复研究和实践,搭建了新的测试框架。利用业余时间,把框架总结了下来。 AIM框架介绍 AIM,是Automatic Interface Monitoring的简称,即自动化…

【华为数据之道学习笔记】5-8多维模型设计

多维模型是依据明确的业务关系,建立基于维度、事实表以及相互间连接关系的模型,实现多角度、多层次的数据查询和分析。如何设计出稳定、易扩展、高可用的数据模型来支持用户消费对数据主题联接至关重要。 多维模型设计有4个主要步骤,包括确定…

xv6 文件系统(下)

〇、前言 计算机崩溃后如何恢复,是一个很重要的话题。对于内存中的数据无关痛痒,开机后重新载入就能解决问题;但是对于持久化存储设备,当你尝试修改一个文件,突然断电当你重新打开文件后,这个文件的状态是…

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)十五:基础数据模块相关功能实现

一、本章内容 本章使用已实现的公共组件实现系统管理中的基础数据中的验证码管理、消息管理等功能。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览 三、开发视频 3.1 B站视频地址: 基于VUE3+Layui从头搭建通用后台管理系统合集-验证码功能实现 3.2 西瓜…

每日OJ题_算法_滑动窗口③_力扣1004. 最大连续1的个数 III

目录 力扣1004. 最大连续1的个数 III 解析代码 力扣1004. 最大连续1的个数 III 1004. 最大连续1的个数 III - 力扣(LeetCode) 难度 中等 给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 …

uniAPP里面有router吗

uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一次代码,可发布到iOS、Android、H5、以及各种小程序等多个平台。 在 uni-app 中,路由器是用于进行页面跳转和传参的重要工具。然而,由于 uni-app 的跨平台特性&…

社科院与新加坡新跃社科联合培养博士—我想我的人生变得精彩

既然人生的幕布已拉开,就一定要积极的演出,既然脚步已经跨出,风吹坎坷也不能退步,既然我已经把希望播在这里,就一定要坚持到胜利的谢幕,人生没有什么是为了别人做的,工作不是为了老板&#xff0…

[Java][异常]异常的初探与异常的捕获+练习

分为Error和Exception Error是sun公司来处理的严重的异常 比如内存泄露这种系统级别的异常 后者的Exception就是我们在开发的时候经常遇到的异常 Exception可以分为两类,RuntimeException 运行时异常 比如数组越界异常 除了Runtime…

79-C语言-小球降落和反弹问题

简介:一个球从100m高度处落下,每次落地后反弹回原高度一半,再落下,再反弹。问:它在第十次落地,共运动了多少米,第十次反弹又多高呢? 看代码注释即可 代码如下: #inclu…

【java8 stream 集合转为树结构】

集合转为树结构 单表&#xff0c;数据有层级&#xff0c;通过parentId关联 先需要获取层级树类型的数据&#xff0c;但不想多次查询&#xff0c;需要减少查询sql次数 1.单表查询所有有效数据 2.逻辑层处理成树结构 public List<CheckVo> fun(){List<CheckVo> resul…

Web前端-HTML(常用标签)

文章目录 1. HTML常用标签1.1 排版标签1&#xff09;标题标签h (熟记)2&#xff09;段落标签p ( 熟记)3&#xff09;水平线标签hr(认识)4&#xff09;换行标签br (熟记)5&#xff09;div 和 span标签(重点)6&#xff09;排版标签总结 1.2 标签属性1.3 图像标签img (重点)1.4 链…

MySQL进阶|MySQL中的事务(一)

文章目录 数据库事务MySQL中的存储引擎InnoDB存储引擎架构什么是事务事务的状态总结 数据库事务 MySQL 事务主要用于处理操作量大&#xff0c;复杂度高的数据。比方我想要删除一个用户&#xff08;销户&#xff09;以及这个用户的个人信息、订单信息以及其他信息&#xff0c;这…

2024年软件测试入坑指南,新人必看系列

本科非计算机专业&#xff0c;在深圳做了四年软件测试工作&#xff0c;从之前的一脸懵的点点点&#xff0c;到现在会点自动化测试&#xff0c;说一点点非计算机专业人员从事软件测试的心得体会&#xff0c;仅供参考交流。 如果你是非计算机专业&#xff0c;毕业不久&#xff0…

<JavaEE> 文件IO -- File类和文件操作

目录 一、文件的概念 二、文件系统 三、文件类型 四、使用 File 类进行文件操作 4.1 File 类中的 pathSeparator 属性 4.2 File 类构造方法 4.3 File 类常用方法 一、文件的概念 什么是文件&#xff1f; 广义上的“文件”是指抽象化的操作系统中的硬件设备和软件资源&a…

第十三章 SpringCloud Alibaba 实现 Seata--分布式事务

分布式事务基础 事务 事务指的就是一个操作单元&#xff0c;在这个操作单元中的所有操作最终要保持一致的行为&#xff0c;要么所有操作 都成功&#xff0c;要么所有的操作都被撤销。简单地说&#xff0c;事务提供一种“要么什么都不做&#xff0c;要么做全套”机制。 本地事…

RAG检索增强技术在知识库智能检索场景下的应用实践

如果你对这篇文章感兴趣&#xff0c;而且你想要了解更多关于AI领域的实战技巧&#xff0c;可以关注「技术狂潮AI」公众号。在这里&#xff0c;你可以看到最新最热的AIGC领域的干货文章和案例实战教程。 一、知识检索增强的基本概述 1.1、知识检索增强技术提出的背景 1.1.1、L…