【测试开发】概念篇 - 从理解需求到认识常见开发、测试模型

📢博客主页:https://blog.csdn.net/2301_779549673
📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 JohnKi 原创,首发于 CSDN🙉
📢未来很长,值得我们全力奔赴更美好的生活✨

在这里插入图片描述

在这里插入图片描述

文章目录

  • 🏳️‍🌈一、什么是需求
    • 1.1 用户需求
    • 1.2 软件需求
  • 🏳️‍🌈二、开发模型
    • 2.1 什么是“模型”
    • 2.2 软件的生命周期
    • 2.3 常见开发模型
      • 2.3.1 瀑布模型
      • 2.3.2 螺旋模型
      • 2.3.3 增量模型、迭代模型
      • 2.3.4 敏捷模型
    • 2.4 测试模型
      • 2.4.1 V模型
      • 2.4.2 W模型(双V模型)
  • 👥总结


11111111
11111111
11111111
11111111
**** 11111111

🏳️‍🌈一、什么是需求

在多数软件公司,会有两部分需求,一部分是用户需求一部分是软件需求

1.1 用户需求

用户需求: 可以简单理解为甲方提出的需求,如果没有甲方,那么就是终端用户使用产品时必须要完成的任务。该需求一般比较简略,通常是一句话。

用户的需求是五花八门,往往只是一句话
比如:实现一个声控灯,实现一个软件的登录功能

1.2 软件需求

或者叫功能需求,该需求会详细描述开发人员必须实现的软件功能。软件需求是测试人员进行测试工作的基本依据。

用户需求和软件需求有什么不同呢?看看下面的案例

女朋友饿了的例子
用户需求:
女朋友说,我饿了,这是一个用户需求.很简略.
软件需求:
需要你和她反复的沟通了解更加详细具体的需求,来制定解决方案
比如你问她,"想吃啥?"她说,“随便”
“吃米饭炒菜?”“不想吃”;“那你想吃啥?”“随便”
“吃油泼面?”“不想吃”;“那你想吃啥?”“随便”
最终理解清楚用户需求之后,知道女朋友想吃的是你做的红烧肉,那么再去研究肉怎么买,怎么做等等的具体步骤,是软件需求.

🏳️‍🌈二、开发模型

2.1 什么是“模型”

你以为的模型

在这里插入图片描述
实际的模型

在这里插入图片描述
随着软件工程学科的发展,人们对计算机软件的认识逐渐深入。

软件工作 的范围不仅仅局限在程序编写,而是扩展到了整个软件生命周期如软件基本概念的形成、需求分析、设计、实现、测试、安装部署、运行维护,直到软件被更新和替换新的版本。软件工程还包括很多技术性的管理工作,例如过程管理、产品管理、资源管理和质量管理,在这些方面也逐步地建立起了标准或规范。

2.2 软件的生命周期

认识具体的开发模型之前先了解软件的生命周期。

什么是生命周期?

  • 生命周期指的是从生命的开始到生命结束的一段时间。以人为例,人类的生命周期是从生命孕育的开始,中间会经历幼年,童年,少年,青年,老年,最终直至死亡。

案例:
假如我想要建造一套房子(别问,问就是一个人造房子),房子的生命周期(流程)是什么样的?

在这里插入图片描述
因此,我们就得到了软件(开发)的生命周期:

  • 需求分析–计划–设计–编码–测试–运行维护

对于软件的生命周期中,每个阶段都在做什么呢?

在这里插入图片描述
在这里插入图片描述

2.3 常见开发模型

2.3.1 瀑布模型

在这里插入图片描述

瀑布模型 在软件工程中占有重要地位,是所有其他模型的基础框架。瀑布模型的每一个阶段都只执行一次,因此是线性顺序进行的软件开发模式。

瀑布模型的一个最大缺陷在于,可以运行的产品很迟才能被看到。这会给项目带来很大的风险,尤其是集成的风险。因为如果在需求引入的一个缺陷要到测试阶段甚至更后的阶段才发现,通常会导致前面阶段的工作大面积返工,业界流行的说法是:“集成之日就是爆炸之日”。

尽管瀑布模型存在很大的缺陷,例如,在前期阶段未发现的错误会传递并扩散到后面的阶段,而在后面阶段发现这些错误时,可能已经很难回头再修正,从而导致项目的失败。但是目前很多软件企业还是沿用了瀑布模型的线性思想,在这个基础上做出自己的修改。例如细化了各个阶段,在某些重点关注的阶段之间掺入迭代的思想。在瀑布模型中,测试阶段处于软件实现后,这意味着必须在代码完成后有足够的时间预留给测试活动,否则将导致测试不充分,从而把缺陷直接遗留给用户

瀑布模型优缺点总结:
在这里插入图片描述

瀑布模型存在很严重的项目风险,那瀑布模型就不能够被采用了吗?

  • 瀑布模型的适用场景:需求固定的小项目

然而企业中存在许多些规模庞大、复杂度高、风险大的项目,这种情况下可以哪种模型呢?

2.3.2 螺旋模型

在瀑布模型的基础上,给各阶段引入了原型和风险分析,原型是基本版本

一般在软件开发初期阶段需求不是很明确时,采用渐进式的开发模式螺旋模型是渐进式开发模型的代表之一。

这对于那些规模庞大、复杂度高、风险大的项目尤其适合。 这种迭代开发的模式给软件测试带来了新的要求,它不允许有一段独立的测试时间和阶段,测试必须跟随开发的迭代而迭代。因此,回归测试的重要性就不言而喻了。

在这里插入图片描述

在这里插入图片描述

适用场景: 规模庞大、复杂度高、风险大的项目。

2.3.3 增量模型、迭代模型

在这里插入图片描述

增量开发能显著降低项目风险,结合软件持续构建机制,构成了当今流行的软件工程最佳实践之一。

增量开发模型,鼓励用户反馈,在每个迭代过程中,促使开发小组以一种循环的、可预测的方式驱动产品 的开发。因此,在这种开发模式下,每一次的迭代都意味着可能有需求的更改、构建出新的可执行软件 版本,意味着测试需要频繁进行,测试人员需要与开发人员更加紧密地协作。

与此类似的有一个迭代开发,增量开发和迭代开发往往容易被人混淆,但是其实两者是有区别的。增量是逐块建造的概念,迭代是反复求精的概念。

例如画一幅人物画
在这里插入图片描述
增量模型是先画人的头部,再画身体,再画手脚……迭代模型是先画整体轮廓,再勾勒出基本雏形,再细化、着色…

适用场景: 大型项目,需求不明确

2.3.4 敏捷模型

在早期,迭代瀑布模型非常流行来完成一个项目。但是现在开发人员在使用它开发软件时面临着各种各样的问题主要困难包括在项目开发期间处理来自客户的变更请求以及合并这些变更所需的高成本和时间。为了克服瀑布模型的这些缺点,在1990年代中期提出了敏捷软件开发模型。

敏捷模型主要旨在帮助项目快速适应变更请求。因此,敏捷模型的主要目的是促进项目的快速完成。要完成这项任务,需要敏捷。敏捷性是通过使过程适应项目,删除对特定项目可能不是必需的活动来实现的。此外,避免任何浪费时间和精力的事情。

在敏捷模型中,需求被分解成许多可以增量开发的小部分。敏捷模型采用迭代开发。 每个增量部分都是在迭代中开发的。每次迭代都旨在小而易于管理,并且只能在几周内完成。一次为客户计划、开发和部署一个迭代。没有制定长期计划。

敏捷模型中有一个非常重要的《敏捷宣言》,宣言内容:

  1. 个体与交互重于过程和工具 - 强调高效的沟通
  2. 可用的软件重于完备的文档 - 强调请文档,文档不应该作为工作验收的标准
  3. 客户协作重于合同谈判 - 能够主动迎接变化,即使了解当下的需求
  4. 响应变化重于遵循计划 - 能够主动迎接变化

宣言中主要运用了对比的手法,然而,在每对比对中,后者并非全无价值,但我们更看重前者

通过敏捷宣言可以总结出敏捷模型的四个特点: 轻文档,轻流程,重目标,重产出。

敏捷开发有很多种方式,其中 scrum 是比较流行的一种。

Scrum是敏捷模型中的一种,又称为迭代式增量软件开发模型。

在scrum模型中,主要有三个角色五个重要会议
三个角色:

scrum由 product owner(产品经理)scrum master(项目经理)team(研发团队) 组成。·

  1. 其中 product owner(产品经理) 负责整理 user story(用户故事),定义其商业价值,对其进行排序,制定发布计划,对产品负责。
  2. scrum master(项目经理),负责召开各种会议,协调项目,为研发团队服务。
  3. team(研发团队),则由不同技能的成员组成,通过紧密协同,完成每一次迭代的目标,交付产品。

迭代开发
与瀑布不同,scrum将产品的开发分解为若干个小sprint(迭代) ,其周期从1周到4周不等,但不会超过4周。参与的团队成员一般是5到9人。每期选代要完成的userstory是固定的。每次迭代会产生一定的交付。

在这里插入图片描述

scrum的基本流程如上图所示:

  • 产品负责人负责整理userstory(用户故事),形成左侧的 productbacklog(产品待办列表) 。
  1. 发布计划会议: productowner负责讲解userstory,对其进行估算和排序,发布计划会议的产出就是制定出这一期迭代要完成的story列表,sprint backlog。
  2. 迭代计划会议: 项目团队对每一个story进行任务分解,分解的标准是完成该story的所有任务,每个任务都有明确的负责人,并完成工时的初估计。
  3. 每日例会: 每天scrum master召集站立会议,团队成员回答昨天做了什么今天计划做什么,有什么问题。
  4. 演示会议: 迭代结束之后,召开演示会议,相关人员都受邀参加,团队负责向大家展示本次迭代取得的成果。期间大家的反馈记录下来,由po整理,形成新的story。
  5. 回顾会议: 项目团队对本期迭代进行总结,发现不足,制定改进计划,下一次迭代继续改进,以达到持续改进的效果。

在这里插入图片描述

敏捷中的测试
轻文档和快速迭代

  • 敏捷模型中强调轻文档,所以测试人员不应使用传统的Excel编写测试用例的方法,更多的使用思维导图、探索性测试(强调自由度,设计和执行同时进行,根据测试结果不断调整测试计划)、自动化测试等
  • 敏捷讲求合作,在敏捷项目组中,测试人员应多主动跟开发人员了解需求、讨论设计、一起。研究bug出现的原因。

2.4 测试模型

测试模型中有两个非常重要且具有标志性的测试模型: V模型W模型

2.4.1 V模型

在这里插入图片描述

V模型最早是由Paul Rook在20世纪80年代后期提出的,目的是改进软件开发的效率和效果。是瀑布模型的变种。

优点:

  • 明确的标注了测试过程中存在的不同类型的测试,并且清楚的描述了这些测试阶段和开发过程期间.
    各阶段的对应关系,有效提升测试的质量和效率。
  • V模型指出:
    • 单元和集成测试应检测程序的执行是否满足软件设计的要求;
    • 系统测试应检测系统功能、性能的质量特性是否达到系统要求的指标;
    • 验收测试确定软件的实现是否满足用户需要或合同的要求。

缺点:
仅仅把测试作为在编码之后的一个阶段,未在需求阶段就介入测试。缺点同瀑布模型。

2.4.2 W模型(双V模型)

V模型中 未将测试前置的问题 在W模型中得以解决。

在这里插入图片描述

W模型增加了软件各开发阶段中应同步进行的验证和确认活动。W模型由两个V字型模型组成,分别代表测试与开发过程,图中明确表示出了测试与开发的并行关系。

特点:

  • 测试的对象不仅是程序,需求、设计等同样要测试,测试与开发是同步进行的

优点:

  • 有利于尽早地全面的发现问题。例如,需求分析完成后,测试人员就应该参与到对需求的验证和确认活动中,以尽早地找出缺陷所在。同时,对需求的测试也有利于及时了解项目难度和测试风险,及早制定应对措施,显著减少总体测试时间,加快项目进度。

缺点:

  • 需求、设计、编码等活动被视为串行的;
  • 测试和开发活动也保持着一种线性的前后关系,上一阶段完全结束,才可正式开始下一个阶段工作。
  • 重流程,无法支持敏捷开发模式。对于当前软件开发复杂多变的情况,W模型并不能解除测试管理面临着困惑。

👥总结

本篇博文对 【测试开发】概念篇 - 从理解需求到认识常见开发、测试模型 做了一个较为详细的介绍,不知道对你有没有帮助呢

觉得博主写得还不错的三连支持下吧!会继续努力的~

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

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

相关文章

核函数(Kernel function)

核函数 核函数在GPU上进行并行执行 注意: 限定词__global__修饰 [双下划线]返回值必须是void 形式: _global_ void kernel_function( argument arg){ ​ printf(“hello world from the GPU\n”); } void __global__kernel_function( argument arg){ ​ printf(“hello worl…

数据结构与算法:区间dp

前言 区间dp也是动态规划里很重要的一部分。 一、内容 区间dp的根本原理就是把大范围问题分解成若干小范围的问题去求解。一般来讲,常见的用法有对于两侧端点去展开可能性和对于范围上的划分点去展开可能性。 二、题目 1.让字符串成为回文串的最少插入次数 class Soluti…

AI Agent 入门指南:从 LLM 到智能体

AI. AI. AI. 最近耳朵里是不是总是被这些词轰炸?特别是“Agent”、“AI Agent”、“智能体”、“Agentic”…… 感觉一夜之间,AI 就从我们熟悉的聊天框里蹦出来,要拥有“独立思考”和“自主行动”的能力了? 说实话,一…

开启docker中mysql的binlog日志

1.登陆docker服务器,输入docker ps查看服务: 2.进入mysql服务 进入到mysql的服务容器后,输入mysql -u*** -p***登陆 mysql 客户端查看是否开启binlog 输入 : show variables like log_bin; 3.输入quit退出mysql客户端 4.之后在docker的mysql服务容器里查询mysql的配置文件所在…

Kotlin 中 List 和 MutableList 的区别

在 Kotlin 中,List 和 MutableList 是两种不同的集合接口,核心区别在于可变性。 Kotlin 集合框架的重要设计原则:通过接口分离只读(read - only)和可变(mutable)操作,以提高代码的安…

【能力比对】K8S数据平台VS数据平台

🔥🔥 AllData大数据产品是可定义数据中台,以数据平台为底座,以数据中台为桥梁,以机器学习平台为中层框架,以大模型应用为上游产品,提供全链路数字化解决方案。 ✨AllData数据中台官方平台&…

Fastjson 从多层级的JSON数据中获取特定字段的值

使用 Fastjson 的 JSONPath.eval 可以通过 JSONPath 表达式直接定位多层级 JSON 中的目标字段,避免逐层调用 getJSONObject() 的繁琐操作。以下是具体实现方法和示例: 核心思路 通过 JSONPath.eval 方法,传入 JSON 对象(或 JSON…

端口安全基本配置

1.top图 2.交换机配置 交换机swa <SWA> system-view [SWA] vlan batch 10 20[SWA] interface GigabitEthernet0/0/1 [SWA-GigabitEthernet0/0/1] port link-type trunk [SWA-GigabitEthernet0/0/1] port trunk allow-pass vlan 10[SWA] interface GigabitEthernet0/0/2 …

hadoop集群建立

建立Hadoop集群的步骤指南 建立Hadoop集群需要系统规划和多个步骤的配置。以下是详细的建立流程&#xff1a; 一、前期准备 硬件需求 多台服务器(至少3台&#xff0c;1主2从) 每台建议配置&#xff1a;至少4核CPU&#xff0c;8GB内存&#xff0c;100GB硬盘 稳定的网络连接(…

从零开始学java--集合类(2)

集合类 目录 集合类 Queue 队列的使用&#xff1a; 双端队列&#xff08;Deque&#xff09; Map和Set 概念&#xff1a; 模型&#xff1a; Map 常见方法说明&#xff1a; 注意&#xff1a; TreeMap和HashMap的区别&#xff1a; Set 常见方法说明&#xff1a; 注…

【HarmonyOS 5】鸿蒙发展历程

【HarmonyOS 5】鸿蒙发展历程 一、鸿蒙 HarmonyOS 版本年代记 鸿蒙 1.0&#xff1a; 2019 年 8 月 9 日&#xff0c;华为在开发者大会上正式发布鸿蒙 1.0 系统&#xff0c;这一版本首次应用于华为荣耀智慧屏产品中&#xff0c;标志着华为正式进军操作系统领域。该版本初步展现…

SpringBoot教学管理平台源码设计开发

概述 基于SpringBoot框架开发的​​教学管理平台​​完整项目&#xff0c;帮助开发者快速搭建在线教育平台。该系统包含学生端、教师端和管理后台&#xff0c;实现了课程管理、随堂测试、作业提交等核心功能&#xff0c;是学习SpringBoot开发的优质案例。 主要内容 1. 系统架…

人工智能端侧热度再起

在科技浪潮汹涌澎湃的当下,人工智能端侧正悄然掀起新一轮的热度风暴。曾经,人工智能更多停留在概念层面,仿佛是遥不可及的未来幻想;而后,它逐渐落地,在特定领域崭露头角,却也显得有些曲高和寡。但如今,人工智能端侧正以前所未有的态势融入我们的生活,从智能手机的语音…

相同的数(简单)

深度优先搜索 如果两个二叉树都为空&#xff0c;则两个二叉树相同。如果两个二叉树中有且只有一个为空&#xff0c;则两个二叉树一定不相同。 如果两个二叉树都不为空&#xff0c;那么首先判断它们的根节点的值是否相同&#xff0c;若不相同则两个二叉树一定不同&#xff0c;…

网络安全等级保护有关工作事项[2025]

公安部发布公网安〔2025〕1846号文件&#xff0c;关于对网络安全等级保护有关共工作事项的进一步说明 一、备案相关问题 1、如何执行系统备案动态更新工作? 全面梳理与重新填报&#xff1a; 答复&#xff1a;运营者需**全面梳理已备案系统**的情况&#xff0c;对于已完成定…

c++类【发展】

类的静态成员&#xff08;用static声明的成员&#xff09;,在声明之外用例单独的语句进行初始化&#xff0c;初始化时&#xff0c;不再需要用static进行限定。在方法文件中初始化。以防重复。 特殊成员函数 复制构造函数&#xff1a; 当使用一个对象来初始化另一个对象…

宁德时代区块链+数字孪生专利解析:去中心化身份认证重构产业安全底座

引言&#xff1a;当动力电池巨头瞄准数字孪生安全 2025年5月6日&#xff0c;金融界披露宁德时代未来能源&#xff08;上海&#xff09;研究院与母公司宁德时代新能源科技股份有限公司联合申请的一项关键专利——“身份验证方法、系统、电子设备及存储介质”。这项技术将区块链…

cesium之自定义地图与地图叠加

在appvue中,cesium支持更换不同的地图资源,代码如下 <template><div id"cesiumContainer" ref"cesiumContainer"></div> </template><script setup> import * as Cesium from cesium; import "./Widgets/widgets.css&…

STL?string!!!

一、引言 在之前的文章中&#xff0c;我们一同学习了有关类和对象、模板、动态内存管理的相关知识&#xff0c;那么接下来一段时间我们将要趁热打铁&#xff0c;一起来手撕C库中最重要的一个库----STL中的一些容器&#xff0c;在手撕它们之前&#xff0c;我将先介绍一下对应的容…

低版本GUI配置SAProuter

1、注意配置SAProuter时&#xff0c;必须添加后面的/H/ 如&#xff1a;/H/sap.sapzx.cn/H/ 2、或者有时需要配置service文件&#xff08;C:\WINDOWS \system32\drivers\etc\service&#xff09; sapmsEP1 3600/tcp