如何进行需求测试/需求评审

2023-11-05

由于软件系统的复杂性,在需求分析阶段可能存在着开发方对委托方业务需求理解不全面、不准确的情况。在这种情况下,如果不进行相关的质量控制,往往会造成开发结果与用户需求不一致的后果。需求测试的目的就在于保证软件设计最大可能地满足有关用户的所有需求,降低额外风险和未预料的成本。

    通过开展需求测试,测试人员应能及时发现需求定义中存在的问题,使相关单位在认知上达成一致,采取有效的预防措施,降低变更的成本;更好地理解产品的功能性和非功能性需求,为制定测试计划和用例打下基础。

    人工的静态分析是需求测试中最常使用的手段,测试人员可以通过需求评审和设计测试用例的方式来测试需求。

    一、需求评审

    需求评审必须要有用户或用户代表参与,同时还需要包括项目的管理者、系统工程师、相关开发人员、测试人员、市场人员、维护人员等。在项目开始阶段就应当确定不同级别、不同类型的评审必须要有哪些人员的参与,否则,评审可能会遗漏部分人员的意见,导致需求的缺失。

    对需求的评审应从以下几个方面进行: 
    完整性:每一项需求都必须将所要实现的功能描述清楚,以使开发人员获得设计和实现这些功能所需的所有必要信息。
    正确性:每一项需求都必须准确地陈述其要开发的功能。
    一致性:一致性是指与其它软件需求或相关标准规定不相矛盾。
    可行性:每一项需求都必须是在已知系统和环境的限制范围内可以实施的。
    无二义性:对所有需求说明都只能有一个明确统一的解释,由于自然语言极易导致二义性,所以尽量把每项需求用简洁明了的语言表达出来。 
    健壮性:需求的说明中是否对可能出现的异常进行了分析,并且对这些异常进行了容错处理。 
    必要性:每项需求的制定都是必要的且能够追溯的。
    可测试性:每项需求都能通过设计测试用例或其它的验证方法来进行测试。
    可修改性:每项需求只应在软件需求说明书中出现一次,这样更改时易于保持一致性。 
    可跟踪性:应能在每项软件需求与它的根源和设计元素、源代码、测试用例之间建立起链接,这种可跟踪性要求每项需求以一种结构化的方式编写并单独标明。


    二、设计测试用例

    设计概念性测试用例可以发现需求的错误、二义性、不可测性、缺失等方面问题,为了获得最大的效果,要求测试人员能够独立的去对需求进行思维,从一个不同于开发的角度上进行分析,这可能会是一个逆向的思维过程,在这个过程中,测试人员可以采取需求建模的方式对需求进行分析。

    需求的建模包括把需求转换成图形模型或形式化语言模型。需求的图形化分析模型包括数据流图、实体关系图、状态转化图、对话图和类图。这些图形化模型可以借助于自动化分析工具本身提供的检测手段来对需求进行测试,而这类检测主要可以提供描述上的完整性检查,需求项之间的不一致性检查等方面的功能。同时,使用这类自动分析工具有助于获得需求的质量特性,包括:有效性、一致性、可靠性、可用性、正确性、可维护性、可测试性、可扩展性、可交互性、可重用性等。

    需求测试不等同于后面阶段集成测试或者系统测试,后面的测试都是软件已经编写完成的条件下,判断软件是否会出错。而需求测试,只是验证需求是否真正是用户所期望的。对于需求的功能测试,可以用快速开发工具建立界面原型,用户通过原型的操作来确定是否需求跟他的期望相同。对于用户不合理的需求,测试人员应能够分辨,并跟用户进行核对,确定用户的真实需求。可以说需求测试是需求测试人员和用户共同来执行的。


------

关于需求评审,首先我觉得应该解决的是可用的评审可用资源问题,只有把这个问题解决了,其评审结果才可以采信,否则不过形式尔耳。

关于需求评审的一些必备资源,我这里选列了相关角色,如下列:

* 业务专家或是熟悉该业务的人员(通常也叫业务方代表)

* 文档审查人员

* 架构师

* 需求分析师

* 需求评审组织人员及记录人员

当然,除了人员意外,必要的时间、场地和上层决策者的支持也是不可或缺的。

这些资源一旦准备停当,接下来就是如何安排评审事宜的问题了。我这里简单列下以往曾做过的一轮需求评审的过程:

* 准备阶段(P)

o 争取上层决策者的支持与谅解

o 筹备相关的资源,包括人力、时间计划,评审场地

o 在正式评审之前,将相关的需求记录(文档或其他形式)发布给每个参与评审的人员手中,并确保其有足够的时间可以通阅需求并做好评审前的相关质疑与确认记录

o 在正式评审之前,会议组织者应先收集相关评审人员的各项需求评审建议和意见,对存在争议和疑惑的需求说明必须做好讨论的安排

o 发布经确认后的评审计划或时间表

* 实施阶段(D)

o 由评审组织者召集各评审人员集中评议,可以以正式的会议等形式组织,此处以会议为形式做说明

o 与会人就某具体的问题进行讨论,讨论的优先级如下所列

* 最重要的业务内容,一般是按流程、功能、细节来排定

* 争议或疑问较多的地方

* 部分有争议的地方

* 对于没有提出疑义的地方,可以快速流过

o 最后,要注意一定要回顾已提出问题和有结论的地方

o 由会议记录人员整理会议的纲要,记录各与会人员的相关意见,并在会后递交纪要

* 检查再实施阶段(C)

o 对评审得出结论的问题进行再次确认和修正补充

o 确定下次评审的时间

o 按照第一阶段的流程再次进行组织,并确认结果

o 对大多数组织,两次评审可以解决大部分的问题,对于悬而未决的问题,如影响范围有限,则可以延后讨论解决

* 总结阶段(A)

o 就以上内容做最后的确认,需求定稿,各方签字确认。

o 今后的变更转入需求变更流程,其后产生的评审为小范围内评审。


给出了一项检查清单,作为文档审查人员审查需求的参考检查表使用,大家可以在进行需求评审时参考使用。

建议一:分层次评审

我们知道用户的需求是可以分层次的,一般而言可以分成如下的层次:

* 目标性需求:定义了整个系统需要达到的目标;

* 功能性需求:定义了整个系统必须完成的任务;

* 操作性需求:定义了完成每个任务的具体的人机交互;

目标性需求是企业的高层管理人员所关注的,功能性需求是企业的中层管理人员所关注的,

操作性需求是企业的具体操作人员所关注的。对不同层次的需求,其描述形式是有区别的,参与评审的人员也是不同的。如果让具体的操作人员去评审目标性需求,可能会很容易地导致“捡了芝麻,丢了西瓜”的现象,如果让高层的管理人员也去评审那些操作性需求,无疑是一种资源的浪费或者就会出现案例三的情形。

建议二:正式评审与非正式评审结合(邮件等得方式)

正式评审是指通过开评审会的形式,组织多个专家,将需求涉及到的人员集合在一起,并定义好参与评审人员的角色和职责,对需求进行正规的会议评审。而非正式的评审并没有这种严格的组织形式,一般也不需要将人员集合在一起评审,而是通过电子邮件、文件汇签甚至是网络聊天等多种形式对需求进行评审。2种形式各有利弊,但往往非正式的评审比正式的评审效率更高,更容易发现问题。因此在评审时,应该更灵活地利用这2种方式。

建议三:分阶段评审

应该在需求形成的过程中进行分阶段的评审,而不是在需求最终形成后再进行评审。分阶段评审可以将原本需要进行的大规模评审拆分成各个小规模的评审,降低了需求返工的风险,提高了评审的质量。比如可以在形成目标性需求后进行一次评审,在形成系统的初次概要需求后进行一次评审,当对概要需求细分成几个部分,对每个部分进行各个评审,最终再对整体的需求进行评审。

建议四:精心挑选评审员

需求评审可能涉及的人员包括:需方的高层管理人员、中层管理人员、具体操作人员、IT主管、采购主管;供方的市场人员、需求分析人员、设计人员、测试人员、质量保证人员、实施人员、项目经理以及第三方的领域专家等等。在这些人员中由于大家所处的立场不同,对同一个问题的看法是不相同的,有些观点是和系统的目标有关系的,有些是关系不大的,不同的观点可能形成互补的关系。为了保证评审的质量和效率,需要精心挑选评审员。首先要保证使不同类型的人员的都要参与进来,否则很可能会漏掉了很重要的需求。其次在不同类型的人员中要选择那些真正和系统相关的,对系统有足够了解的人员参与进来,否则很可能使评审的效率降低或者最终不切实际的修改了系统的范围。

建议五:对评审员进行培训

在很多情况下,评审员是领域专家而不是进行评审活动的专家,他们没有掌握进行评审的方法、技巧、过程等,因此需要对评审员进行,同样对于主持评审的管理者也需要进行培训,以便于参与评审的人员能够紧紧围绕评审的目标来进行,能够控制评审活动的节奏,提高评审效率,避免发生案例一和案例二中出现的现象。对评审员的培训也可以区分为简单培训与详细培训2种。简单培训可能需要十几分钟或者几十分钟,需要将在评审过程中的需要把握的基本原则,需要注意的常见问题说清楚。详细培训则可能要需要对评审的方法、技巧、过程进行正式的培训,需要花费较长的时间,是一个独立的活动。需要注意的是被评审人员也要被培训。

建议六:充分利用需求评审检查单

需求检查单是很好的评审工具,需求检查单可以分成2类:

需求形式的检查单和需求内容的检查单。需求形式的检查可以由QA人员负责,主要是针对需求文挡的格式是否符合质量标准来提出的,需求内容的检查是由评审员负责的,主要是检查需求内容是否达到了系统目标、是否有遗漏、是否有错误等等,这是需求评审的重点。检查单可以帮助评审员系统全面地发现需求中的问题,检查单也是随着工程财富的积累逐渐丰富和优化的。

建议七:建立标准的评审流程

对正规的需求评审会需要建立正规的需求评审流程,按照流程中定义的活动进行规范的评审过程。比如在评审流程定义中可能规定评审的进入条件,评审需要提交的资料,每次评审会议的人员职责分配,评审的具体步骤,评审通过的条件等等。通过评审流程执行可能会避免出现案例五之类的问题。

建议八:做好评审后的跟踪工作

在需求评审后,需要根据评审人员提出的问题进行评价,以确定哪些问题是必须纠正的,哪些可以不纠正,并给出充分的客观的理由与证据。当确定需要纠正的问题后,要形成书面的需求变更的申请,进入需求变更的管理流程,并确保变更的执行,在变更完成后,要进行复审。切忌评审完毕后,没有对问题进行跟踪,而无法保证评审结果的落实,使前期的评审努力付之东流。

建议九:充分准备评审

评审质量的好坏很大程度上取决于在评审会议前的准备活动。常出现的问题是,需求文档在评审会议前并没有提前下发给参与评审会议的人员,没有留出更多更充分的时间让参与评审的人员阅读需求文档。

更有甚者,没有执行需求评审的进入条件,在评审文档中存在大量的低级的错误或者没有在评审前进行沟通,文档中存在方向性的错误,从而导致评审的效率很低,质量很差。对评审的准备工作,也应当定义一个检查单,在评审之前对照检查单落实每项准备工作

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何进行需求测试/需求评审 的相关文章

  • python之列表详解

    文章目录 一 创建列表 1 基于弱数据类型语言的定义 2 通过全局函数list 定义 3 创建空列表 二 访问列表的值 1 通过下标索引 2 通过for循环遍历 3 通过while循环遍历 三 列表的分片 四 列表方法 1 append 列
  • linux-文件管理

    linux 二 文件和用户管理 7 19 1 文件管理 Windows 以根目录的方式组织文件C D E linux 以根目录的方式组织文件 二层目录 bin 二进制 普通用户使用的命令 dev 驱动 设备 home 普通用户的家 用户装自
  • spring学习(三) --- 创建bean

    上一节简单的介绍了下spring中bean的注册过程 就是解析配置文件 将bean的信息以BeanDefinition形式存放 这一节看一下bean的创建过程 其创建流程如下 实例化bean 属性赋值 初始化 销毁 创建过程 创建的主要逻辑
  • Hutoo --- 日期时间工具-DateUtil

    使用前安装Hutoo工具MAVEN依赖
  • ~/.bashrc 和 ~/.profile文件的区别

    bashrc 是 Bash shell 的配置文件 在用户每次启动新的 Bash 会话时加载 它包含一些用户自定义的环境变量 别名以及其他与 Bash shell 相关的设置 可以在 bashrc 文件中添加自定义的 shell 函数 命令
  • Gin框架的路由、重定向、数据解析、中间件和同步异步

    安装 go get u github com gin gonic gin Gin 路由 入门 gin Default 中 Default 中的代码 engine New 默认用了两个中间件 日志和恢复 engine Use Logger R
  • Java中的Semaphore信号量机制

    目录 什么是信号量机制 Semaphore工作流程 Semaphore使用方式 什么是信号量机制 信号量机制是一种通过使用计数器来控制共享资源访问的机制 计数器计数的是共享资源的访问许可 如果计数器大于0则允许访问 如果为0 则拒绝访问 J
  • 在matlab中实现图像的自相关和互相关

    图像的自相关 clear I1 imread lenna bmp bmp 输入图像1 参考图像 I1 I1 1 figure 1 显示输入图像1 colormap gray 255 image I1 axis off FI1 fft2 I1
  • XCode14 & iOS16适配 pod签名

    一 iOS16手机开启开发者模式 developer mode disable iOS16手机未打开开发者模式时 1 Xcode 无法选中 iOS16的设备 报错 developer mode disable 2 无法打开升级前编译的App
  • 解决 Axios 跨域问题,轻松实现接口调用

    跨域是指访问另外一个域的资源 由于浏览器的同源策略 默认情况下使用 XMLHttpRequest 和 Fetch 请求时是不允许跨域的 跨域的根本原因是浏览器的同源策略 这是由浏览器对 JavaScript 施加的安全限制 Axios 跨域
  • 使用python简单创建自动点击脚本,使用的是pyautogui

    所有代码在最后面 首先引入包 首先引入包 import pyautogui 鼠标控制包 import time 时间包 后面要用 然后获取需要点击的坐标 for i in range 5 通过循环加延迟 获取鼠标位置 mouse pyaut
  • 推荐 9 个经典前后端分离项目

    前后端分离是现在主流的架构设计模式 它初衷是用 单一职责 原则把代码质量提上去从而达到节省人力和减少沟通时的信息损失的目的 本文推荐九个前后端分离的开源项目 都是采用最流行的技术栈 本文推荐的开源项目已经收录到 Awesome GitHub
  • 黑苹果Mac系统快捷键修改

    由于苹果机的键盘和普通PC机的键盘不同 因此苹果机的快捷键也会与普通PC不同 这对于我们这些经常使用键盘的人来说非常不便 下面附上两者的不同 普通键盘 苹果键盘 修改快捷键 我推荐的软件是KeyBindingsEditor 它很好用 另外需
  • The Evaluation of Language Model (语言模型的性能评价方法 Perplexity)

    The Evaluation of Language Model 语言模型的性能评价 语言模型 Language Model 以下简称LM 直观理解 用于判断一句话是否从语法上通顺 Question 1 训练好的LM效果是好还是坏 如何评价
  • L2-014 列车调度 (25 分)详解

    火车站的列车调度铁轨的结构如下图所示 两端分别是一条入口 Entrance 轨道和一条出口 Exit 轨道 它们之间有N条平行的轨道 每趟列车从入口可以选择任意一条轨道进入 最后从出口离开 在图中有9趟列车 在入口处按照 8 4 2 5 3
  • kali渗透--msf简单使用

    使用MSF Metasploit 利用MS12 020 RDP远程代码执行漏洞 实验环境准备 1 一台 winXP 作为受害者 最好拍摄好一个快照 IP 10 1 1 2 2 kali 作为攻击者 IP 10 1 1 1 3 将攻击者和受害
  • 常用命令图解 & & git 错误 fatal: Not a valid object name: ‘master‘.

    亲测可用 若有疑问请私信 常用命令图解 转自Git 常用命令详解 二 阳光岛主的博客 CSDN博客 git命令 Git 是一个很强大的分布式版本管理工具 它不但适用于管理大型开源软件的源代码 如 linux kernel 管理私人的文档和源
  • Python画各种爱心

    目录 一行代码画爱心 拆解 输出 I U 填充型 动态画红心 桃心 线性 立体红心 玫瑰 树 一行代码画爱心 print n join join Love x y len Love if x 0 05 2 y 0 1 2 1 3 x 0 0
  • 学科竞赛管理系统服务器错误,学科竞赛管理系统

    系统功能模块如下 1 平台首页 整个平台首页分为政策文件 竞赛列表 在线报名 成果展示 通知公告 新闻中心 联系方式 系统登录 下载中心 快速导航等功能模块 所有模块内容全部支持系统后台进行添加 编辑 删除等操作 2 竞赛管理 1 竞赛项目
  • TensorRT/parsers/caffe/caffeParser/caffeParser.h源碼研讀

    TensorRT parsers caffe caffeParser caffeParser h源碼研讀 前言 TensorRT parsers caffe caffeParser caffeParser h delete this std

随机推荐

  • mysql中的枚举enum_mysql中枚举类型之enum详解

    enum类型就是我们常说的枚举类型 它的取值范围需要在创建表时通过枚举方式 一个个的列出来 显式指定 对1至255个成员的枚举需要1个字节存储 对于255至65535个成员 需要2个字节存储 最多允许有65535个成员 先通过sql语句创建
  • Latex 算法Algorithm

    在计算机科学当中 论文当中经常需要排版算法 相信大家在读论文中也看见了很多排版精美的算法 本文就通过示例来简要介绍一下 algorithms 束的用法 该束主要提供了两个宏包 包含两种进行算法排版的环境 algorithm 和 algori
  • java base64转文件_java之文件与base64字符之间的相互转换

    package cn xuanyuan util import java io File import java io FileInputStream import java io FileOutputStream import sun m
  • 大数据 机器学习 分类算法_13种用于数据科学的机器学习分类算法及其代码

    大数据 机器学习 分类算法 The roundup of most common classification algorithms along with their python and r code 吨 他的Roundup与他们的Pyt
  • WSL安装JDK8

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 下载地址 JDK URL https www oracle com technetwork java javase downloads jdk8 downloads 213
  • 压缩感知进阶——有关稀疏矩阵

    上一篇 初识压缩感知Compressive Sensing 中我们已经讲过了压缩感知的作用和基本想法 涉及的领域 本文通过学习陶哲轩对compressive sensing CS 的课程 对压缩感知做进一步理解 针对其原理做出讲解 本文较为
  • poi 导出excel工具类包含导出内容为List<Map<String,Object>>,List<List<Object>>

    导入jar
  • JVM结构和GC垃圾回收

    JVM知识 一 JVM结构 1 类加载子系统 用于将class字节码文件加载到JVM中 2 JVM运行时数据区 又被称为内存结构 线程共享数据 1 堆 放对象的地方 2 方法区 元空间 存储类的模板信息 xxx class的模板信息 堆中同
  • C++ 大话设计之《备忘录模式》(优缺点,设计原理,常用场景)

    备忘录模式是一种行为型模式 优点 备忘录模式的主要优点是提供了一种可以恢复状态的机制 当用户需要时能够比较方便地将数据恢复到某个历史的状态 它实现了内部状态的封装 除了创建它的发起人之外 其他对象都不能够访问这些状态信息 此外 它简化了发起
  • 【Tableau小练习】销售数据的分析思路

    概要 电商数据分析案例 分析思路 从整体到局部 关键指标 销售额 通过宏观的数据 找出最明显的数据趋势 结合品牌自身的营销活动 再下钻挖掘详细的价值信息 成果展示 Tableau Public https public tableau co
  • 17_Nginx_PostRead阶段

    文章目录 post read 阶段 获取真实的用户IP地址 基于变量使用用户ip realip 模块 realip 模块的指令 post read 阶段 获取真实的用户IP地址 tcp 四元组 src ip src port dst ip
  • 本地镜像如何推送到docker 仓库

    要将本地镜像推送到Docker仓库 需要按照以下步骤操作 1 首先 使用 docker login 命令登录到Docker仓库 输入用户名和密码进行身份验证 2 然后 使用 docker tag 命令为本地镜像添加标签 语法为 docker
  • 39_MoreThanHalfNumber 数组中超过一半的元素

    数组中有一个数字出现的次数超过数组长度的一半 请找出这个数字 你可以假设数组是非空的 并且给定的数组总是存在多数元素 示例 1 输入 1 2 3 2 2 2 5 4 2 输出 2 1 利用hashmap统计数组中元素出现的次数 如果次数大于
  • Elasticsearch 搜索数组字段

    我的个人博客 逐步前行STEP 1 搜索 数组字段 tags 中同时存在元素 str a str b query bool filter term tags str a term tags str b 2 搜索 数组字段 tags 中存在元
  • vue怎么vw布局好用_vue2.x使用响应式vw布局(px自动转为vw)

    浏览器支持一览 1 依赖包引入 yarn add postcss px to viewport opt postcss viewport units cssnano cssnano preset advanced dev 2 更改项目根目录
  • [519]matplotlib(三)

    带误差线的条形图 import matplotlib pyplot as plt 输入数据 mean values 1 2 3 variance 0 2 0 4 0 5 bar labels bar 1 bar 2 bar 3 绘制图形 x
  • python3刷leetcode第165题165.compare version number

    class Solution def compareVersion self version1 str version2 str gt int version1 version1 split version2 version2 split
  • 入门ResNet,在Cub200数据集上复现Resnet50

    1 背景问题 1 如果只是单纯地把卷积层和池化层进行堆叠 造成的问题就会有梯度消失和梯度爆炸 梯度消失是指当在某一层进行BP的时候 误差为一个小于零的数 那不断相乘 就会趋近于零 梯度爆炸则是指某一层的开始误差都是大于1的数 直接相乘就会导
  • centos7 sh 注释_shell 中的单行注释和多行注释

    导读 关于 shell 中的单行注释和多行注释的问题 本文档介绍两种实用的方法 1 单行注释 众所周知 比如想要注释 echo Hello World root Jaking vim test sh echo Hello World 2 多
  • 如何进行需求测试/需求评审

    由于软件系统的复杂性 在需求分析阶段可能存在着开发方对委托方业务需求理解不全面 不准确的情况 在这种情况下 如果不进行相关的质量控制 往往会造成开发结果与用户需求不一致的后果 需求测试的目的就在于保证软件设计最大可能地满足有关用户的所有需求