软件工程与计算(二十二)软件开发过程模型

news2024/10/6 21:34:27

(自顶向下,逐层细化) 

目录

一.软件开发的典型阶段

1.需求工程

2.软件设计

3.软件构造

4.软件测试

5.软件交付

6.软件维护

二.软件生命周期模型

三.软件过程模型

四.构建-修复模型

五.瀑布模型

六.增量迭代模型

七.演化模型

八.原型模型

九.螺旋模型

十.Rational统一过程

十一.敏捷过程


一.软件开发的典型阶段

1.需求工程

目标:建立能够妥善解决用户问题的软件系统解决方案,简单地说就是定义“软件系统要完成哪些功能

任务:需求开发(包括需求获取、分析、规格说明、验证)和需求管理(持续进行,直到软件生命周期终结)

软件开发人员:软件需求工程师and软件需求分析师

需求开发的两个阶段:

  • 系统需求开发:为了获得整个系统的期望目标(即完成业务需求处理),包括软件系统和硬件系统(软件系统通常会承担主要的需求)
  • 软件需求开发:以承载的系统需求为出发点,建立软件系统解决方案,使其满足系统需求

常见建模方法与技术:结构化分析方法(DFD和ER图),面向对象分析方法(用例图描述系统功能,概念类图描述系统静态结构,顺序图)

关注点:首要是理解现实,次要是建立高质量的软件系统~

主要制品:需求分析模型and软件需求规格说明文档~

2.软件设计

目标:使用各种抽象软件实体建立系统的结构,搭建系统的实现框架

开发人员:软件设计师

划分为以下3个类:

  • 体系结构设计:系统的高层设计,将软件系统划分为不同的子系统和模块
  • 软件详细设计:在高层设计的基础上,使用模块、过程、类等软件抽象实体完成各个子系统内部的细粒度设计
  • 人机交互设计:建立用户之间的交互机制,使得系统具有量化的易用性

(前两者均存在面向对象方法和结构化方法两种实现途径)

3.软件构造

目标:构建软件

开发人员:程序员——编程实现和构造高质量软件产品

主要任务:编程、测试与调试等子活动

主要制品:源代码和可执行程序

4.软件测试

目标:保证软件产品的质量

主要划分为3个层次:

  • 单元测试:验证一个系统构造单元内部的实现质量
  • 集成测试:验证系统各个构建单元和部件按照要求进行集成的质量
  • 系统测试:验证系统产品符合用户级客户要求的质量

主要任务:测试计划、测试执行和测试报告

主要制品:测试用过的高质量软件产品和测试报告

5.软件交付

目标:将软件产品交付给用户和客户

主要任务:部署、用户培训、文档支持等

关注:交付的有效性,让客户和用户真正掌握软件产品,能够顺利地使用软件产品完成工作任务

重视点:项目总结和项目评价

6.软件维护

目标:保障用户从接收产品到软件生命终结之间的正常使用

任务:完善性维护、适应性维护、修正性维护and预防性维护

(可由开发人员进行,也可以由专门的维护人员进行)

关注点:软件系统如何在效益和质量的总和平衡下演化


分享一张详细归纳的好图:

二.软件生命周期模型

每个阶段都有明确的典型输入/输出、主要活动和执行人、各个阶段形成明确、连续的顺序过程

(特定软件系统的生命周期简要描述了该系统的开发活动历史,而一个软件生命周期模型则描述了新的软件系统该如何开发)

三.软件过程模型

与简略的软件生命周期模型不同,软件过程模型进一步详细说明各个阶段的任务、活动、对象及其组织、控制过程,可以被看做是网络化的活动组织

因为要在整体上遵守软件生命周期的约束,所以不同的软件生命周期模型展开以后是不同的软件过程模型~

四.构建-修复模型

1.背景与动机:最早也是最自然产生软件的开发模型,完全依靠开发人员的个人能力进行开发

2.描述:依靠个人分享和理解直接构造软件的第一个版本,提交给用户使用;发现缺陷后就直接修改代码修改缺陷,直到全部完成后进行交付,然后进入维护阶段

3.特点

  • 没有对开发工作进行规范和组织,随着难度提升开发活动会超出个人的控制模型
  • 没有分析需求的真实性,给软件开发带来很大危险
  • 没有考虑软件结构的质量
  • 没有考虑测试和程序的可维护性,且没有任何文档——维护工作十分困难

4.常用情况

  • 软件规模很小(几百行程序)
  • 对软件质量要求不高
  • 只关注开发活动,对后期维护的要求不高,甚至不需要进行维护

五.瀑布模型

1.背景与动机:将软件开发活动划分为不同的阶段,并且保证每一个阶段工作的正确性和有效性~

2.描述:自上而下,相互衔接,从一个阶段到另一个阶段的有序的转换序列~

虽然像瀑布流水逐级而下,瀑布模型允许活动出现反复和迭代~

3.特点

明显优势:为开发活动定义了清晰的阶段划分,这让开发者能够以关注点分离的方式更好地进行那些复杂的软件项目的开发活动~

局限性:

  • 对文档的过高期望
  • 对开发活动的线性顺序假设
  • 客户、用户参与不够
  • 里程碑粒度过粗

4.常用情况

  • 需求非常成熟稳定,没有不确定的内容
  • 所需的技术成熟
  • 复杂度适中

六.增量迭代模型

1.背景与动机:实际开发中绝大多数复杂系统都是需要迭代完成的~

2.描述:在项目开始时,通过系统需求开发和核心体系结构设计活动完成项目队前景和范围的界定,然后再将后续开发活动组织为多个迭代、并行的瀑布式开发活动~

比较显著的要求是,需要在项目早期就确定项目的目标和范围,因此项目需求要比较稳定和成熟~

3.特点:

优点:

  • 更加符合软件开发的实践情况,具有更好地适用性~
  • 并行开发可以帮助缩短软件产品的开发时间~
  • 加强用户反馈,降低开发风险~

缺点:

  • 需要软件有开放式的体系结构,以便于不断加入构件
  • 很难再项目开始就确定前景和范围

4.常用情况:实践中广泛应用

七.演化模型

1.背景与动机

和增量相同,都采用迭代式;不同点在于演化模型主要用在需求变更频繁或者不确定性较多的领域

2.描述

将软件开发活动组织为多个迭代、并行的瀑布式开发活动——主要任务是澄清和明确系统的核心需求,建立和交付核心系统~

对需求的反馈是演化模型进行迭代预测、开发活动组织和控制的主要依据,因此它也是“需求驱动

3.特点

优点:

  • 具有更好地适用性,尤其是其演化式迭代安排能够适用于需要频繁变更需求的软件系统~
  • 并行开发可以缩短软件产品的开发时间~
  • 渐进交付可以加强用户反馈,降低开发风险~

缺点:

  • 无法在项目早期阶段确定项目范围,所以项目的整体计划、进度调查,尤其是商务协商事宜无法准确把握
  • 后续迭代开发活动式在前导迭代的基础上进行修改和扩展的,这容易让后续迭代忽略分析与设计工作,蜕变为构建修复方式

4.常用情况

不稳定领域的大规模软件系统

八.原型模型

1.背景与动机

简单的说,原型产生于真正产品构建之前,一种情况是,它被扩展之后成为真正的产品,另一种情况是,它模拟真正产品但不会出现在真正产品之中,而在真正产品中出现的是比原型质量更好地改进和替代~(第一种称为演化式原型,第二种称为抛弃式原型

(基本特征不是注重演化式而是注重抛弃式原型)

2.描述

将需求开发活动展开为抛弃式原型开发的迭代,充分利用抛弃式原型解决新颖领域的需求不确定问题~

3.特点

优点:

  • 对原型方法的使用加强了与客户、用户的交流,可以让最终产品取得更好地满意度
  • 适用于存在大量不确定性的领域

缺点:

  • 原型方法能够解决风险,但是自身也能带来新的风险,例如原型方法成本太高
  • 实践中,很多项目负责人不舍得抛弃“抛弃式原型”,导致降低产品质量

4.常用情况:存在这大量不确定性的新颖领域进行开发活动组织

九.螺旋模型

1.背景与动机

解决软件开发的越来越高的风险~

基本思想:尽早解决比较高的风险(尽量早发现)

2.描述

基于风险驱动,完全按照风险解决的方式组织软件开发活动~

风险解决的基本思路是:

确定目标、解决方案和约束——评估方案,发现风险——寻找解决风险方法——解决风险方案~

3.特点:

优点:可以降低风险,减少项目因风险造成的损失

缺点:

  • 风险解决需要使用原型手段,也就会存在原型带来的风险(与原型相同)
  • 模型过于复杂,不利于管理者依据其组织软件开发活动

4.常用情况

在高风险的大规模软件系统开发中有着较多的应用

十.Rational统一过程

1.背景与动机

多种过程模型方法互不相容,各有自己的优点和最佳实践方法,又都有自己的局限性;为了减少过程模型方法上选择的困难,同时由充分吸收和利用各种过程模型方法下的最佳实践方法,Rational公司提出了统一过程(RUP)——总结和借鉴传统的各种有效经验,建立最佳实践方法的集合,并提供有效的过程定制手段~

2.描述

模型概述:横轴以时间来组织,是过程展开的生命周期特征,体现开发过程的动态结构;纵轴以内容来组织,是自然的逻辑活动,体现开发过程的静态结构

核心实践方法:

  • 迭代式开发:过去被反复证明的最佳实践方法
  • 管理需求:重视需求工程中除了需求开发之外的需求管理活动
  • 使用基于组件的体系结构:它帮助建立一个可维护、易开发、易复用的软件体系结构
  • 可视化建模:利用UMl进行建模
  • 验证软件质量:尽早和持续地开发验证,以尽早发现缺陷,降低风险和成本
  • 控制软件变更:适应90年代以后需求变更越来越重要的事实

3.特点

优点:

  • 有一套软件工程工具的支持,这可以帮助RUP有效地实施
  • 根据其定制机制不同,可以用于小型或者大型项目的开发
  • 吸收和借鉴了传统的最佳实践方法,能够保证软件开发过程的组织是基本有效合理的

缺点:

  • 没有考虑过交付之后的软件维护问题
  • 裁剪和配置的工作不是一个简单的任务

4.常用情况:RUP是重量级过程,能够胜任大型软件团队开发大型项目时的活动组织

十一.敏捷过程(Agile)

1.背景与动机

传统的软件过程模型过于强调纪律,忽视了个人能力,尤其是过度强调计划、文档和工具~

人们开始总结实践中的经验和最佳实践方法,尝试建立轻量级的过程方法

2.描述

思想与原则

敏捷练满宣言所声明的价值观:

  • 个体和互动:高于流程和工具
  • 工作的软件:高于详尽的文档
  • 客户合作:高于合同谈判
  • 响应变化:高于遵循计划

极限编程:极限利用简单、有效地方法解决问题

3.特点

方法众多,各有特点也各有缺点

4.常用情况

适用于快速变化或者时间压力较大的项目~

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

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

相关文章

优维产品最佳实践第12期:IT资源管理首页丰富

​ 背 景 当我们进入平台后,默认跳转至IT资源管理首页,因此该页面的优化与丰富将极大的提高平台使用者的体验和效率。优化后的首页可以更好地展示常用模型、小产品、外部系统、以及保存的所有关系查询和快速查询条件,使用户能够更快捷、方便…

抖音同城热搜榜上榜技巧有哪些

抖音同城热搜榜上的话题通常是具有一定热度和社会关注度的。因此,在制作视频时,可以关注一些热门话题,如社会热点、明星八卦、节日庆典等。以社会热点为例,可以关注一些突发事件、政策变革等,这样可以在短时间内吸引大…

SystemVerilog Assertions应用指南 Chapter1.20“ $past”构造

1.20“ $past”构造 SVA提供了一个内嵌的系统任务“$past”,它可以得到信号在几个时钟周期之前的值。在默认情况下,它提供信号在前一个时钟周期的值。结构的基本语法如下 $past (signal_name ,number of clock cycles) 这个任务能够有效地验证设计到达当前时钟周期的状态所采用…

数据分析案例-基于snownlp模型的MatePad11产品用户评论情感分析

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

【配置本地仓库yum源的两种方式】

一、使用下载的rpm包搭建本地仓库yum源 ​  使用自己下载的rpm包搭建本地仓库,需要用createrepo去创建仓库元数据。 1、下载需要的软件包 在一台可以联网的服务器上下载。或者通过其他方式下载自己需要的软件包。 # 下载所需工具依赖包到 /mypath [roottest ~]…

深入理解TDD(测试驱动开发):提升代码质量的利器!

在日常的软件开发工作中,我们常常会遇到这样的问题:如何在繁忙的项目进度中,保证我们的代码质量?如何在不断的迭代更新中,避免引入新的错误?对此,有一种有效的开发方式能帮助我们解决这些问题&a…

redis哨兵机制

为什么要有哨兵机制? 在 Redis 的主从架构中,由于主从模式是读写分离的,如果主节点(master)挂了,那么将没有主节点来服务客户端的写操作请求,也没有主节点给从节点(slave&#xff0…

使用Matplotlib画多y轴图

使用Matplotlib画多y轴图 代码成品图 代码 import matplotlib.pyplot as plt import mpl_toolkits.axisartist as AA from mpl_toolkits.axes_grid1 import host_subplot%matplotlib inline config {"font.family": "serif","font.size": 14,&…

文件批量下载

网页可能暂时无法连接,或者它已永久性地移动到了新网址。 把uploads前面的 / 去掉 public function downFile(){// 网页可能暂时无法连接,或者它已永久性地移动到了新网址。 把uploads前面的/去掉$files ["uploads/20231018/868ac3fe78e40c67…

【React】高频面试题

1. 简述下 React 的事件代理机制? React使用了一种称为“事件代理”(Event Delegation)的机制来处理事件。事件代理是指将事件处理程序绑定到组件的父级元素上,然后在需要处理事件的子元素上触发事件时,事件将被委托给…

通过Django Admin+HttpRunner1.5.6实现简易接口测试平台

这篇文章主要介绍了通过Django AdminHttpRunner1.5.6实现简易接口测试平台,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前言 这是一个使用HttpRunner开发接口平台的简单Demo。 新建Django项目 这是一个使…

lesson1-C++类和对象(上)

个人主页:Lei宝啊 愿所有美好如期而遇 目录 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 5.类的作用域 6.类的实例化 7.类的对象大小的计算 8.类成员函数的this指针 1.面向过程和面向对象初步认识 在C语言中&#xff0…

Python 框架学习 Django篇 (五) Session与Token认证

我们前面经过数据库的学习已经基本了解了怎么接受前端发过来的请求,并处理后返回数据实现了一个基本的登录登出效果,但是存在一个问题,我们是将所有的请求都直接处理了,并没有去检查是否为已经登录的管理员发送的,如果…

基于ssm网上鲜花店

功能如下图所示 摘要 基于SSM(Spring、Spring MVC、MyBatis)的网上鲜花店,是一款全面电子商务平台,为用户提供了多层次、多功能的鲜花购物体验。该系统的架构结构使得用户可以注册、浏览商品、购物车管理、下单和支付等一系列操作…

智慧园区内涝积水解决方案

在当今园区化快速发展的背景下,智慧园区已经成为园区可持续发展的重要组成部分。然而,智慧园区的规划和运营需要一个综合性的方法,以应对各种挑战,其中之一是积水管理。为了有效地解决这一问题,WITBEE万宾针对智慧园区…

Linux 僵尸进程处理

现象 查看: # 查看僵尸进程 ps -aux |grep Z## ps -aux |grep Z|wc -l 定位僵尸进程 ## ps -A -ostat,ppid,pid,cmd |grep -e ^[Zz] 杀死僵尸进程 使用Kill -HUP 僵尸进程ID来杀死僵尸进程,往往此种情况无法杀死僵尸进程,此时就需要杀死僵尸进程的父进程。 kill -HUP …

051校园短期闲置资源置换平台

大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路…

【异步爬虫】requests和aiohttp中代理IP的使用

前言 在进行爬虫开发时,我们常常需要使用代理IP来隐藏自己的真实IP地址,以避免被一些网站限制或封禁。requests和aiohttp是两个非常常用的工具,本文将分别介绍如何在它们中使用代理IP,希望可以帮助大家更好地进行异步爬虫开发。 …

1024程序员节特辑 | 解密Spring Cloud Hystrix熔断提高系统的可用性和容错能力

目录 1、Spring Cloud Hystrix 的背景和意义2、Spring Cloud Hystrix 的架构设计3、Spring Cloud Hystrix 的主要组件4、Spring Cloud Hystrix 熔断器的底层原理和整体架构5、Spring Cloud Hystrix 命令6、Spring Cloud Hystrix 熔断器7、Spring Cloud Hystrix参数说明8、Sprin…

点云平面拟合新国标怎么应对?

文章目录 一、应用背景二、算法原理三、代码实现首先我们看一下平面度的概念: 平面度:测量点集合中,在平面上方且距离基准平面最远的点到平面的距离+在平面下方且距离基准平面最远的点到平面的距离。 一、应用背景 在旧标准中,使用最小二乘法去拟合全部点,以拟合平面作为…