阿里云自助建站和华为云自助建站/药品网络营销公司
EBSE专题连载共分为“五个”篇章。此文为该连载系列的“第四”篇章,在之前的“篇章(三)”中已经结合具体研究实践阐述了“步骤二,通过系统调研确定改进方案”等内容。那么,在本篇章(四)中,我们将详细分析EBSE步骤三:批判性地反思证据以及当前问题解决。
汽车EBSE测试流程分析(一):汽车软件测试的特征和问题
汽车EBSE测试流程分析(二):关于优势和挑战的案例分析
汽车EBSE测试流程分析(三):通过系统调研确定改进方案
6. 步骤三:批判性地反思证据以及使用它来解决当前问题
价值流图(VSM)作为过程分析工具用于评估优势和劣势。该工具用于发现和消除浪费。价值流捕获了当前将产品通过主要流程步骤带给客户(流程的端到端流程)所需的所有活动(包括增值和非增值)。增值活动是为产品增加价值的活动(例如通过确保功能的质量),非增值活动是指等待时间。价值流中最大的延迟或瓶颈(即非增值)为提高流程能力提供了最大的机会。选择VSM背后的动机是因为它是一种高效的工具,我们可以通过它来完成测试过程以了解工作流程并明确地专注于从端到端的角度识别浪费。它使管理者能够从价值创造的角度后退一步,重新思考整个过程。此外,它对于汽车行业来说是很自然的,并且很容易被接受为一种改进方法,因为它起源于汽车领域(例如丰田产品开发系统)。
价值流图分两步完成。在第一步中,使用图3中的符号映射当前活动,区分增值和非增值活动。通过突发信号指示浪费和低效率。软件工程通常定义七种浪费(见表12)。之后,绘制未来状态图,其中包含对已识别浪费的改进。图1显示了从案例研究中进行的测试过程评估中获得的信息,如何映射到价值流活动。
图3:价值流图表示法
6.1.当前状态图
我们执行了一个过程活动映射,通过它我们可视化了在测试过程中执行的各种活动。本节介绍当前价值流图,其中概述了VSM和访谈中发现的浪费。流程创造的价值针对不同的团队规模确定,如表10(价值的定义)和表11(流程中的价值概述)所示。
表10:价值定义
非增值活动在测试过程的当前价值流中被识别,以便查看需要改进的地方,如图4所示。
测试过程的当前状态图,揭示了在精益软件开发/价值流映射的背景下定义的所有七种浪费。确定的七种浪费包括部分完成的工作、额外处理、交接、任务切换、再学习、延迟和缺陷(编号为W1-W7)(参见表12的浪费定义)。
这些浪费在测试过程中的不同活动中被识别出来,导致返工、等待时间增加或在整个测试活动中花费的时间效率低下。图4说明了规划的测试过程和识别的浪费。但是,在影响测试的其他活动(例如,需求管理等)中出现的问题没有显示在当前流图。其背后的原因及其对测试活动的负面影响在上一节中进行了讨论。
我们在测试过程中确定了12个区域(如图4所示的1-12),其中出现了浪费。以下是对当前流图中确定的每个子流程中发生的浪费的描述。
子过程1中识别的浪费:子过程1中观察到的浪费是部分完成的工作。未完成测试的原因是由于缺乏测试定义和匆忙完成测试(C1)而导致缺乏计划测试,最终导致以低测试覆盖率的非结构化方式进行测试。不明确的要求加剧了这种情况。
图4:当前状态图
表11:价值
表 12:浪费定义
子过程2中确定的浪费:在这个过程中,我们确定了“额外功能”和“切换”的浪费。有时在发布之前,从系统中删除的额外功能,即使它们已经实现,例如由于不稳定和不明确的要求(C03)。但是,也会对此类特性/功能进行测试。这种浪费是以编写测试计划、随后安排测试和分配资源的方式发生的。不明确的要求还需要重新学习(W3)。
子过程3中确定的浪费:如案例研究中所确定的,案例组织中的一个普遍问题是资源限制(C04)。这里发生的浪费是缺乏测试人员的可用性(W3:交接)以及作为组织结构一部分的角色和职责不明确,这阻碍了正确团队的形成,导致任务切换(W4)。
子过程4中识别的浪费:由于客户和开发组织需要大量时间来协商当前版本的候选需求,因此工作没有向前推进并被延迟(W1:部分完成的工作/W6)。据观察,此过程会重复多次,涉及与客户的多次交互,因为没有人与其他人对需求有相同的看法(C03)。为了为需求编写测试用例,必须有一套稳定而详细的需求来设计和分析下一个版本的测试。
子过程5中识别的浪费:这里的延迟再次以长时间等待(W06:延迟)的形式出现,用于引发验证要求(C03),从而最终确定要在测试活动中执行的测试用例清单。以前版本的测试用例有时不会更新。这会花费大量时间和精力来重写(W5:重新学习)以前版本的要求,并将这些测试用例包含在当前版本中。测试用例生成缺乏自动化,也是造成这种延迟的一个原因,因为只要不自动化,测试就是返工(与测试工具相关,C07)。
子过程6中确定的浪费:如前面挑战C10中所讨论的那样,有关测试的文档并不总是得到维护。以前版本的测试用例并不总是更新到测试用例存储库,这意味着未记录的测试工件(W1:部分完成的工作)。这些丢失的测试工件中的一些可能会使测试活动陷入危急情况,最终导致再次重复整个测试。
子过程区7的浪费:部分项目需要测试设备进行测试。客户的测试设备无法按时用于测试(W3:交接)。然而,在某些情况下,这种浪费会减少,因为在先前版本中使用的测试环境会被保存下来,并为产品的后续版本进行维护。正如挑战C7中所指出的,这种疏忽没有具体原因。
子过程区域8中的浪费:案例组织中执行的所有测试活动,都使用不同的工具进行管理,这通常是为了节省时间。但实际上这些工具并不能达到这个目的。相反,使用这些工具管理和映射测试工件会消耗更多资源,有时还会产生冗余,从而产生不必要的复杂性。没有一个可以管理和组织汽车领域所有测试活动的统一工具,这使它成为一个挑战(C7),从而造成称为交接(W3)的浪费,这与人员、设备等的可用性有关。
子过程区域9中的浪费:测试未作为与开发(C09)并行的活动进行。最终跟踪缺陷会消耗时间和金钱,这似乎是测试人员的负担,导致巨大的延迟(W6)。大多数团队不使用支持早期缺陷检测的验证活动,例如检查和代码审查。此处发生的另一种浪费(W4:移交)可能是由于缺乏测试人员的可用性以及使用特定测试技术(例如探索性测试或基于经验的测试)实施测试的培训。探索性和基于经验的测试基于测试人员的直觉和技能(参见C04)。尽管此类测试技术被认为是案例组织的优势,但目前只有有限数量的、有能力进行此类活动的测试人员可用。当这些有经验的测试人员退出或转移到另一个项目时,这反过来会导致测试延迟。然而,关于如何使用测试技术和工具的文档不会持续更新(有时不可用),因此不能信任执行测试 (C10)。
(关于C01-C010参见本专题连载篇章(二))
子过程区域10中的浪费:自项目开始(W1:部分完成的工作)以来,未正确引出需要包含在被测工件中的质量属性,从而导致产品质量差。部分受访者认为测试只是为了确保基本功能的质量,因此无法确保交付系统的可靠性(C08)。缺乏衡量质量水平和能够将测试结果与先前版本进行比较所必需的质量标准。对测试结果的分析有助于重新定义需要在下一版本产品中实施的质量改进。一些员工还报告了长时间的延迟(W6:延迟),因为在报告缺陷后必须等待开发人员修复缺陷。当负责代码的人在上一个项目中完成工作后,立即转移到其他项目时,这种等待时间似乎很长(见C04)。如果测试与开发并行执行,则可以解决此问题。
子过程区域11中的浪费:由于需求的波动性 (C3),需求规范没有很好地记录,从而导致对需求的误解。在开发和测试被误解的需求上投入的精力和资源是没有用的(W3:重新学习)。然后在与客户进行一系列交互之后,引出和开发必要的需求,这会导致不必要的返工和任务切换(W5)。
子过程区域12中的浪费:在以前的版本中检测到的缺陷有时没有修复(W1:部分完成的工作),这是客户同意的。但是随着系统的发展,这些缺陷很难在下一个版本中跟踪。缺乏验证活动和早期缺陷预防活动(W7:缺陷)在发布前造成混乱,当前版本中的一些未解决的缺陷留给下一个版本。这个过程在每个版本中重复多次。随着功能的增长,遗留了许多未修复的缺陷,在如此复杂的系统中很难追踪这些缺陷。
表13提供了浪费及其与挑战的关系的摘要。
6.2.未来状态图
从结果中可以明显看出,其他流程,尤其是需求收集和文档,以负面方式影响测试并导致许多浪费。我们发现最常见的浪费,即W3:交接和W1:部分完成的工作,是由于长时间延迟引发明确和稳定的测试要求而发生的。测试过程中已识别的挑战报告说,不断涌入的需求导致测试覆盖率下降,以及由于延迟测试导致的故障数量增加。当前版本中出现的故障有时没有得到修复和交付,因此相同的故障在下一个版本中重复出现,但跟踪和修复变得困难且成本高昂。因此,当前使用的测试方法不适合连续的需求流,表明有必要转向新的方法,这种方法可以管理和组织变更,同时提高质量。
表13:浪费
未来状态VSM如图5所示,本质上是敏捷的。所示过程代表一次迭代。
我们推荐使用敏捷实践(SP6)和测试管理(SP7),这有助于通过开发和测试的并行化、早期故障检测和简短的沟通方式更有效地利用测试人员的时间。敏捷还有助于在测试人员的要求方面实现高透明度,因为测试计划是针对所有迭代完成的。但是,可以针对每次迭代详细更新测试计划。特别是敏捷实践(SP6)强调需求积压和迭代资源估计,以保持它们的准确性和灵活性。同时,需要记录测试计划,因为这是能够有效地重用测试工件并使测试与每次迭代的需求活动(在SP7中提出)保持一致的先决条件。为了引出需求,用户故事被发现很有用(参见SP1)。抽象级别可能很重要,因为在一个抽象级别上对需求进行优先排序时,必须将优先级传播到其他级别(参见SP1)。
(关于SP1-SP7参见本专题连载篇章(三))
发现灵活的测试过程是项目的优势,尤其是在小型团队中。大多数时间测试是以交付更多功能(价值:V1)而不是质量的方式完成的。然而,一些测试技术,例如完全依赖于测试人员能力和技能的探索性和基于经验的测试,被发现可以提高汽车领域实施的测试过程的质量。这项研究还表明,资源限制方面的挑战,例如难以找到具有适当测试能力的从业者,他们具有执行汽车领域特定测试的专业知识和经验,成为质量整合的障碍。在这种情况下确定的浪费,可能是长时间的延迟或缺乏执行测试活动的人员(W3、W4)。8个研究项目中几乎有6个缺乏专门的测试人员。
使用质量标准/措施(SP3)有助于达成对测试的共同看法,因此交流和知识共享变得更加容易,这在进行测试的人数稀少时非常重要。敏捷测试方法可能不会自动导致质量合并,但通过适当的敏捷实践,这是可能的(参见SP6)。本研究中对Scrum master的采访清楚地表明,当正确使用敏捷方法时,它是一种力量,不仅提供灵活性和敏捷性,还提供质量。
与时间和成本限制、测试技术(C02)以及工具和环境(C07)相关的挑战,使得编写好的测试显然具有挑战性。自动化测试可以节省时间并提高测试的价值和收益。正如SP4中记录的那样,已经提出了多种工具和方法来自动执行不同类型的测试,因此选项多种多样,选择哪个选项也取决于给定上下文中的比较分析。为了进一步改善这种情况,团队可以尝试实施其他测试技术,例如探索性测试,它已经在一些项目中使用并且可以有效地发现缺陷。探索性测试已在本专题连载的篇章(二)的第4.5.2节中作为优势提到。单元测试和回归测试的自动化可以促进测试用例的重用,并为最终产品增加价值。在敏捷开发(SP6)中,测试驱动开发有助于单元测试的自动化,因为自动化测试是在编写新功能之前编写的。基于SLR本专题连载的篇章(二)的第4.5.2节中确定并建议了多种支持测试的工具,这些工具已在汽车行业中使用。
图 5:未来状态图
从这项研究中可以合理地说,测试不像开发新代码那样受到重视。从访谈中可以看出,测试的优先级较低,这不利于测试中的知识共享和知识转移。在这方面,能力管理可以被认为是测试活动必不可少的,它可以通过知识转移和共享来提高测试方面的技能和知识(参见SP2)。此外,我们认为,如果可以在项目开始时估计所需的测试人员,并以轮换方式分配且与多个团队分享他们的知识,那会更好。这也将帮助他们提高每次迭代的能力水平,从而改进测试。
针对已识别机会的解决方案提案基于SLR和访谈(考虑到所提到的价值和好处)。在本研究范围内无法验证解决方案建议。然而,建议取自同行评审的文献,这些文献在行业中得到验证,并且与本研究调查的公司使用敏捷的经验非常一致。此外,解决方案已提交给提供反馈的从业者。提出的未来状态过程已经包含了他们的反馈。
更多内容,请关注“汽车EBSE测试流程分析(五):步骤四,评估和反思EBSE过程”。
相关文章:

汽车EBSE测试流程分析(四):反思证据及当前问题解决
EBSE专题连载共分为“五个”篇章。此文为该连载系列的“第四”篇章,在之前的“篇章(三)”中已经结合具体研究实践阐述了“步骤二,通过系统调研确定改进方案”等内容。那么,在本篇章(四)中&#…...

如何在Spring MVC中使用@ControllerAdvice创建全局异常处理器
文章目录 前言一、认识注解:RestControllerAdvice和ExceptionHandler二、使用步骤1、封装统一返回结果类2、自定义异常类封装3、定义全局异常处理类4、测试 总结 前言 全局异常处理器是一种 🌟✨机制,用于处理应用程序中发生的异常ÿ…...

2023/08/05【网络课程总结】
1. 查看git拉取记录 git reflog --dateiso|grep pull2. TCP/IP和OSI七层参考模型 3. DNS域名解析 4. 预检请求OPTIONS 5. 渲染进程的回流(reflow)和重绘(repaint) 6. V8解析JavaScript 7. CDN负载均衡的简单理解 8. 重学Ajax 重学Ajax满神 9. 对于XML的理解 大白话叙述XML是…...

log_softmax比softmax更好?
多类别分类的一个trick 探讨一下在多类别分类场景,如翻译、生成、目标检测等场景下,使用log_softmax的效果优于softmax的原因。 假设词典大小为10,一个词的ID为9(即词典的最后一个词),使用交叉熵作为损失函…...

[LeetCode - Python]344.反转字符串(Easy);345. 反转字符串中的元音字母(Easy);977. 有序数组的平方(Easy)
1.题目 344.反转字符串(Easy) 1.代码 class Solution:def reverseString(self, s: List[str]) -> None:"""Do not return anything, modify s in-place instead."""# 双指针left,right 0, len(s)-1while left < right:temp s[left]s[…...

【SOP】最佳实践之 TiDB 业务写变慢分析
作者: 李文杰_Jellybean 原文来源: https://tidb.net/blog/d3d4465f 前言 在日常业务使用或运维管理 TiDB 的过程中,每个开发人员或数据库管理员都或多或少遇到过 SQL 变慢的问题。这类问题大部分情况下都具有一定的规律可循,…...

带有参数的 PL/SQL 过程/函数从选择查询返回表
技术标签: 【中文标题】带有参数的 PL/SQL 过程/函数从选择查询返回表【英文标题】:PL/SQL Procedure/function with params to return a table from(of) a select query【发布时间】:2020-12-01 11:17:49【问题描述】: 如何创建带参数的 (…...

文件的权限
1、修改文件的所属者和所属组 2、修改文件某一类人(所属者、所属组、其他人)的权限 一、用户对于普通文件的权限 二、用户对于目录文件的权限 三、访问控制列表ACL 四、特殊权限(了解) wuneng创建了几个文件,xiaoming对…...

vue3集成echarts最佳实践
安装 echarts npm install echarts --save 两种引用方式 非虚拟 dom import * as echarts from echarts;var chartDom document.getElementById(mychart); var myChart echarts.init(chartDom); var option;option {title: {text: Referer of a Website,subtext: Fake Da…...

一位年薪40W的测试被开除,回怼的一番话,令人沉思
一位年薪40W测试工程师被开除回怼道:“反正我有技术,在哪不一样” 一技傍身,万事不愁,当我们掌握了一技之长后,在职场上说话就硬气了许多,不用担心被炒,反过来还可以炒了老板,这一点…...

网络适配器和MAC地址
点对点信道:由于目的地只有一个选项,所以数据链路层不需要使用地址。 而在广播信道中: 各个主机如何判断信号是不是发给自己的? 当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都…...

react-player静音不能自动播放问题
现象 移动端不能自动播放 原因 取决于您使用的浏览器,但muted如果您不想与autoplay用户交互,则必须使用视频。 Chrome 的自动播放策略很简单: 始终允许静音自动播放。在以下情况下允许自动播放声音: 用户与域进行了交互&#x…...

培训Java技术要多久才能学会?答案都在这里啦
培训Java技术要多久才能学会?这是想学习Java开发的很多人都会问到的一个问题。而这个问题的答案其实并不是那么简单,因为学Java的时间长短受到众多因素的影响。本文将从个人基础、学习动力和学习效率三个方面来为您解答这个问题。 1. 个人基础 自己的基础对于学习…...

Java中使用HttpPost发送form格式的请求
在Java中使用HttpPost发送form格式的请求,可以使用Apache HttpClient库来实现。以下是一个示例代码: import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client…...

C语言----字节对齐
一:字节对齐的概念 针对字节对齐,百度百科的解释如下: 字节对齐是字节按照一定规则在空间上排列,字节(Byte)是计算机信息技术用于计量存储容量和传输容量的一种计量单位,一个字节等于8位二进制数,在UTF-8编…...

Next.js入门介绍(服务端渲染)
Next.js 一 目录 不折腾的前端,和咸鱼有什么区别 目录一 目录二 前言三 设置四 多页面五 链接六 样式七 共享组件八 布局组件九 实战 9.1 目录结构 9.2 UI 组件 9.3 Markdown 内容 9.4 Pages 入口和 API 9.4.1 服务端渲染 9.5 Public 静态资源 9.6 resor…...

模板Plus
文章目录 1.非类型模板参数的引入2.标准库和普通数组3.模板的特化 1.非类型模板参数的引入 //非类型模板参数 -- 常量 template<class T, size_t N 10> class array { private:T _a[N]; };int main() {array<int> a1;array<int, 100> a2;array<double, …...

spring事务和数据库事务是怎么实现
Spring事务的原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行: 获取连接 Connection con DriverManag…...

el-date-picker设置默认当前日期
HTMl部分: <el-form-item label"拍摄时间:"><el-date-pickerv-model"searchData.filmingTimeRange"type"daterange"align"right"unlink-panelsrange-separator"至"start-placeholder"…...

vue中使用this.$refs获取不到子组件的方法,属性方法都为undefined的解决方法
问题描述 vue2中refs获取不到子组件中的方法?,而获取到的是undefined 原因及解决方案: 第一种、在循环中注册了很多个ref 因为注册了多个ref,获取是不能单单知识refs.xxx,需要使用数组和索引来获取具体一个组件refs[…...

Linux命令200例:df用于显示文件系统的磁盘空间使用情况
🏆作者简介,黑夜开发者,全栈领域新星创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 &…...

Service not registered 异常导致手机重启分析
和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、Service not registered 异常导致手机重启二、Service not registered 解决方案 一、Service not registered 异常导致手机重启 1.重启 的部分Log如…...

深度解读|一站式ABI平台 Smartbi Insight V11 能力再升级
纵观过去,我们发现汽车和BI的发展有异曲同工之妙。 100来年,汽车的动力从蒸汽到燃油再到新能源,汽车的操控方式从手动到自动再到智能无人驾驶。而在BI领域,自1958年BI的概念提出后,底层数据准备从报表开发、Cube多维模…...

vConsole手机调试模式uniapp和原生h5
手机打开调试模式的方法 尽量放在页面头部,底部有可能不行 原生 <script src"https://cdn.bootcss.com/vConsole/3.3.0/vconsole.min.js"></script> <script>// init vConsolevar vConsole new VConsole();console.log(Hello world)…...

Flutter Dart语言(05)异步
0 说明 该系列教程主要是为有一定语言基础 C/C的程序员,快速学习一门新语言所采用的方法,属于在C/C基础上扩展新语言的模式。 1 async和await 在Dart语言中,虽然没有像其他语言(如Java、C、Python)中的传统多线程概…...

滇医通微信小程序分析笔记
注意 本文章仅供学习交流使用,如果你是铁粉你就会知道博主之前发布过一篇相关的文章,但是由于代码涉及到法律相关所以就隐藏了,两年的时间过去了,因为女朋友已经早早安排上了,所以就搁置了,本次不做代码分…...

IoTDB在springboot2中的(二) 查询
上一章我们处理的基本的构建接入,以及插入的处理,那么接下来我们进行查询的操作处理。 我们继续在IoTDBSessionConfig工具类中加入查询的方法处理 /*** description: 根据SQL查询最新一条数据* author:zgy* param sql sql查询语句,count查询…...

SpringBoot 底层机制分析【Tomcat 启动+Spring 容器初始化+Tomcat 如何关联Spring 容器】【下】
😀前言 本篇博文是关于SpringBoot 底层机制分析实现,希望能够帮助你更好的了解SpringBoot 😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大…...

NLP(六十五)LangChain中的重连(retry)机制
关于LangChain入门,读者可参考文章NLP(五十六)LangChain入门 。 本文将会介绍LangChain中的重连机制,并尝试给出定制化重连方案。 本文以LangChain中的对话功能(ChatOpenAI)为例。 LangChain中的重…...

C字符串与C++ string 类:用法万字详解(上)
目录 引言 一、C语言字符串 1.1 创建 C 字符串 1.2 字符串长度 1.3 字符串拼接 1.4 比较字符串 1.5 复制字符串 二、C字符串string类 2.1 解释 2.2 string构造函数 2.2.1 string() 默认构造函数 2.2.2 string(const char* s) 从 C 风格字符串构造 2.2.3 string(co…...