我一直在研究不同的测试技术,并且想知道是否有人使用状态转换图而不是经常使用的标准时钟和电灯开关作为“现实世界”示例。
我还想知道使用向导时向导的每个页面是否都算作一个单独的状态?

评论

这里有两个问题。首先是要求提供其他状态转换图的信息。第二个问题是关于向导与状态引擎状态之间关系的问题。我认为第一个问题应该改写为“在设计软件测试用例时还使用哪些其他状态转换图?”这一行。第二个问题应分解为自己的问题。

同意Tristaan​​Ogre-我认为这里有一个或多个值得回答的问题,但当前的措辞令人困惑。

我想我不是以你们两个人的方式阅读Teague的问题-对我来说,关于向导的问题是整体问题的一部分,它是为了尝试提供一个可能与现实生活相关的示例。 (Dale的答案很好地使用了它)。我确实认为它可以改进-但是我不会读它为“正在使用其他哪些状态转换图”,而是“如何将状态转换图应用于现实世界的测试情况?”

我同意@testerab。我认为,这两个问题都是很不错的问题(不过,我都希望扩大两个问题!),但它们也息息相关,以至于留在同一职位上仍然可行。我认为,如果他们之间的联系不太紧密,我们应该将其分解为两个问题。

感谢您提供所有答案和评论。我将在以后提出问题时尝试并更加具体。非常感谢@testerab,您的回答和对问题的理解也大有帮助。@ Dale Emery也感谢如此详细的答复,它消除了我对状态转换图的大部分疑问。

#1 楼

我如何看待测试状态模型。状态是系统准备以计划的方式对一组已定义事件进行响应的状态。您知道在以下情况下系统处于新状态(与之前相比):


现在响应的事件集与刚才的集不同。
现在,系统对给定事件的响应与之前对相同事件的响应不同。

什么才算是状态。 “算作一个单独的状态”不仅取决于系统及其行为(实际的或计划的),还取决于建模的目的。您的目的可以帮助您确定要包括哪些细节,要排除哪些细节。如果您尝试通过向导测试可能的路径,则可能需要将每个页面建模为状态。另一方面,如果您要测试向导如何验证用户的输入,则可能不太在乎每个页面作为单独的状态。

So:什么是您为状态建模的目的?您要测试什么?包括与此目的相关的状态。

请注意,确定要放入模型的内容和遗漏的内容始终是一个挑战。如果您发现图表变得过于混乱,状态和事件处于多个详细级别(例如,工作流转换与错误检测和纠正的详细信息),或者您的转换线遍布各地,请考虑将不同级别放置在不同的位置图。

示例进行探索。这些相对简单,因此易于练习。而且它们比普通的电灯开关还丰富,因此更具启发性。


为汽车的巡航控制建模。
启动PowerPoint,将其放入在“演示”模式下,然后按B键。然后再说一次。然后按W键。还有哪些其他键可以做有趣的事情?幻灯片显示涉及哪些状态?
在缺陷跟踪系统中绘制缺陷的生命周期(或可能的生命周期)的状态模型。
通过银行的批准流程来建模贷款申请的可能流程,或者通过保险公司的索赔来建模保险索赔的可能流程。过程。

从状态模型中生成测试思想。

对于每个状态,请问:


我该怎么办可能导致系统改变状态?我还能做些什么?
如果我导致该状态无法显示该模型的事件怎么办?
在此状态下我还没有尝试过哪些事件?
哪些变量可能参与这种状态?如果我更改这些资源,该怎么办?
在这种状态下,系统可以访问哪些系统资源(例如数据库事务,内存,域模型中的项,文件等)。如果这些资源不可用或已更改怎么办?
我可以直接将系统置于此状态,而不是转换模型的方式吗? (一个示例:在Web应用程序上,在某些工作流程中保存书签。完成或放弃工作流程。单击书签。系统如何处理?)
可能还有其他状态,未显示在模型中?

对于事件,请问:


我尚未从哪个状态尝试过此事件?
如果我要怎么办?
如果我以不同的顺序执行这些事件该怎么办?
如果我在某个事件发生的状态下执行此事件该怎么办?模型如何显示无响应?
我该如何以不同的方式来执行此事件(例如,不同的数据,不同的时间,不同的输入机制[粘贴与键入,菜单选择与按钮按下与键盘快捷键,...])?
还可能有哪些其他事件未在模型中显示?

要进行转换,请问:


如果我在系统处于运行状态时进行操作会怎样?进行过渡吗?
我可以使系统进行模型无法进行的过渡吗?没看?
我还没有尝试过什么转换?

使用多种表示形式。


绘制泡泡线状态图。
显示相同的状态状态模型作为表格。在侧面,列出可能的状态。在顶部,列出可能的状态。每个单元代表从开始状态(在侧面列出)到结束状态(在顶部列出)的过渡。在每个单元格中,显示将导致转换的事件。
将相同的状态模型显示为不同的表。在侧面,列出可能的状态。在顶部,列出可能的事件。每个单元代表系统在该状态下对该事件的响应。在每个单元格中,显示在该事件的起始状态下发生事件时系统进入的新状态。

比较表示形式,注意每个细节使每个细节更易于查看,而哪个更难。例如,在气泡图中,很容易看到流量,而更难于看到系统可能对给定事件做出响应的所有方式。您还看到其他什么区别?

给模型和创建自己的模型。建立实际行为模型的行为是探索系统或功能的好方法。另外,他人提供给您的模型通常是期望行为的模型。它们可能与实际行为不符。将每个“所需行为”模型都视为要验证的东西。

评论


+1这是一个很好的答案。我一直在重新阅读它,然后思考着:“但是你怎么把那么多的单词包装得如此之多,并使它变得如此清晰和直接呢?”

– testerab
2011年6月1日下午0:31

+1我不是很了解这个问题,但是,您确实回答了一个我什至不知道自己在问的问题!

– Lyndon Vrooman
2011年6月1日的1:16

我喜欢这个答案。当然,这有点读,但这是一本好书!

–corsiKa♦
2011年6月2日22:26

#2 楼

状态转换测试可能是软件测试中最常用的方法。每次测试人员执行一个动作时,都会记录状态,然后考虑下一组可能的动作,它们实质上是在测试状态之间的转换。

有时状态转换图有助于简化具有多个状态的复杂系统状态和这些状态之间的转换,并可以帮助测试人员发现漏洞,或帮助测试人员将注意力集中在重要的路径上。

状态转换测试也是基于模型的测试的基础。

有关状态转换测试的简单示例和简单图表,请参见http://www.testingmentor.com/imtesty/2011/02/21/state-transition-testing-thinking-in-models /

#3 楼

状态转换图在某些情况下是一种方便的工具,但我不会将它们称为“软件测试技术”。

我不知道这与“沼泽标准”有什么关系时钟和电灯开关”。

评论


嗨,乔,有机会请您详细说明为什么状态转换不是测试技术吗?我的确给人以有效的印象。

– DuncN
2011年6月3日10:17



DuncaN-这不是技术。图是工具。

–乔·斯特拉泽(Joe Strazzere)
2011年6月6日21:16

我认为“沼泽标准时钟和电灯开关”是指测试教科书倾向于在解释状态转换图时使用电灯开关或数字时钟/手表作为示例的趋势。

– Tom77
2011年6月16日15:16

#4 楼

当您试图了解系统的工作原理时,状态转换图可以非常方便地进行通信-如果您没有绘制出不同的状态,它可以帮助您发现可能错过的转换在您面前的白板上。

这是一个真实的例子。让我们选择一个在线零售商。我们将研究订单-它们是可能具有几种不同状态的商品的一个很好的例子,您可能想测试商品在这些状态之间的移动方式,以及在订单进入状态时允许对订单执行哪些操作不同的状态。

以下是状态:


安全检查-一些订单将通过例行安全检查进行
,然后再执行已下订单
已下订单-系统上已下订单,并且正在等待库存

已分配商品-已将部分或全部库存
分配给了订单
库存警告-某些物品缺货
付款-在此阶段,您
应该能够看到每个物品的发货日期

付款错误-那里
付款时出现问题
进行中-订单在
仓库系统中,实际上
从货架上取货。为时已晚,现在不能更改订单
详细信息/货运地址!
发货-它已离开仓库
,并正在向您运送
已开具发票
计划取消-取消请求
已收到并已确认
已取消-现在已处理请求。

那里有11个不同的状态,单个订单不会遍历所有状态。您可能会看到一些有意义的序列-例如已下订单,已分配货物,已付款,正在处理,已发货。但是,如果您只是尝试将序列列表放在一起,则很可能会错过过渡,应该测试一下您是否能够轻松地在图中发现。

绘制图表会揭示的另一件事是您所掌握的知识方面的空白-例如,您可能会想知道-我可以在任何阶段提出取消请求吗?还是只有某些状态可以达到“计划取消”的状态-也许我只能在没有分配货物的情况下取消订单,或者也许我可以在任何阶段取消直到“进行中”。如果我的订单处于付款错误状态-我可以从那里去哪里?如果我成功付款,订单会进入什么状态?如果我不这样做,它会去哪里?有时间限制吗?

尝试从给定的示例中绘制状态转换图,并了解您现在可以填写的内容。您不足以填充的内容,或者所获取的信息不明确的地方-这些是您要向业务分析师或产品所有者提出的问题。

有帮助吗?

评论


要记住的一件事是,有时您不希望“状态发生”。例如,添加项目,添加项目,结帐,等待添加更多项目。有时,您不打算这样做,但是现在您处于另一种状态。我们可以称其为“从结帐转为购物”。我们的图表显示我们应该处于“购物”状态,但是由于我们已经弄乱了内部状态,因此它可能已经陷入困境。找到这些“偶然状态”可能非常困难。修复它们可能会更加困难!

–corsiKa♦
2011年6月2日22:28

是的-如果您可以设法利用恶意软件绕过例如恶意软件,它们对于恶意用户也可能是一个有利可图的安全漏洞。付款。

– testerab
2011年6月6日19:27

#5 楼

我使用状态转换图来测试应用程序的视频播放器功能。该功能与DVD播放器基本相同。我发现这对这项特殊功能很有用。

我还没有,而且可能不会使用状态转换图来测试向导。