java - 用于模型库测试的 UML 建模

标签 java android uml android-espresso model-based-testing

我有一些与我的问题建模相关的问题。我正在研究基于模型的测试的论文项目。还想从专家的角度了解我是否采用正确的方法来建模我的场景。我正在对 Android 应用程序的 UI 进行建模,遍历它们,生成测试用例并为 espresso 框架生成测试代码。

我将简单地解释我对被测系统进行建模以及为测试用例生成测试代码的方式。 (我也在编写算法来生成android代码)。我正在为 android espresso 测试框架生成代码。 Espresso 的结构总是需要首先找到与之交互的元素。这是通过“OnView()”方法传入参数(如 withId(R.id.title) 或 withText(“Hello”))来分别查找具有给定 Id 或 Text 的元素来完成的。然后,我们附加框架调用的 ViewActions 或 ViewMatchers 来分别通过执行操作或执行断言来与元素进行交互。下面是一个 espresso 测试用例的示例,它找到一个带有文本“幸运按钮”的 TextView ,单击它并检查它是否显示。

@Test
public void test () {

  onView(withText(“Lucky Button”))      //ViewMatcher
       .perform(click())             // ViewAction  .check(matches(isDisplayed())); // ViewAssertion

简单案例 让我们以一个有两个屏幕的 Android 应用程序为例。屏幕 A 和屏幕 B。每个屏幕包含不同的元素。例如。 TextView(文本标签)、ImageView(图像标签)等 我使用状态图来描述屏幕可以处于的状态。对于每个状态,都存在一个 Activity 图,该 Activity 图描述了要对元素执行的测试,例如 TextView 、 ImageView 。我们将每个测试套件分组在泳道中,并用 Activity 操作来表示测试操作。但需要输入信息。例如, Activity 操作可以调用 isVisible 来检查 ToolBarDesign 泳道中工具栏的可见性。为了实现此操作,我们需要工具栏上的信息来首先找到它并检查其可见性。我通过提供有关 Action 或状态转换的必要信息来做到这一点。下面是描述该场景的状态图和 Activity 图的示例。

enter image description here

该状态图有 2 个状态。从 MainActivity 到 NewNote 的转换是一个名为 openNewNote 的触发器,其操作采用自由文本格式。 freetext 操作包含必要的信息,我可以通过这些信息在 java 框架中进行处理和提取,以生成如上所述的代码段。 在框架中,我首先选择带有 id title 的元素,然后执行 click 方法。 另外,在 MainActivity 状态中包含一个子 Activity 图,如前所述。在此子 Activity 图中,我们为人员建模(我们认为具有 espresso 框架知识的人员)提供了编写 Activity 操作以进行测试的机会。下面是 MainActivity 的 Activity 图示例,它测试应用程序的工具栏和登录屏幕。

enter image description here

工具栏从初始节点转换到 isVisible Activity 。关于转换,我们按照上面在状态图上的转换所解释的那样进行描述。这里我们获取自由文本操作“withText:Lucky Button,matches,isDisplayed”,然后在我们的框架中对其进行处理以获取代码。

 @Test
public void test () {

  onView(withText(“Lucky Button”))      //ViewMatcher
        .check(matches(isDisplayed())); // ViewAssertion

问题。 到目前为止,这对团队来说是有效的,因为程序员是建模者。我将提供用于系统建模的文档。 我想问这是否是一种有效的建模方式并且可以在我的研究中进行描述。另外如果您有任何意见或建议。

最佳答案

在不深入讨论细节的情况下,我建议退后一步,从更广泛的角度开始:

  • 更正式地定义您的案例中的被测系统 (SUT):输入、输出、关联输入和输出的要求。例如状态机、 Activity 图等。
  • 更正式地定义您想要建模的内容:SUT 的并行实现,即您的测试模型 (TM)。它通常比较抽象,并且仅在 SUT 行为的某些有限区域中有效。在您的情况下,顺序图和 Activity 图。
  • 一致性关系:SUT 符合 TM 的正式定义是什么?这两个模型 SUT 和 TM 有何不同?
  • 什么理论可以形式化地、自动地证明一致性关系?这也给出了自动化所需工具的答案。

最好的开始方法是练习示例:

  • 了解至少一种大型 MBT 工具的所有演示示例:Microsoft Spec Explorer、Conformiq Designer ...
  • 在其中一个示例中粗略地建模您的示例。
  • 了解他们如何使用 UML。我向您推荐 Spec Explorer 的 UML 扩展,它专注于输入数据生成和场景,而不是行为 - 类似于您的应用程序。
  • 了解这些工具背后的理论:符号执行、交替模拟、场景等。

如果您回答了这些问题,您也就知道了您的方法是否有效或是否存在任何错误,而我无法根据您所提供的内容来回答这些问题。

关于java - 用于模型库测试的 UML 建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43945478/

相关文章:

java - 崩溃后,Mongodb java 驱动程序无法重新连接到主节点

c# - 将 UML 图导入 Visual Studio

uml - 使用 UML 最显着的缺点是什么?

java - 如何为 MongoDB 等 NoSql 绘制 UML 图?

java - Hibernate,按主键搜索返回表中的所有内容

java - 哈希集实现

java - 使用 Mockito 的通用 "any()"方法

Android:将蓝牙经典扫描与低功耗扫描分开,或区分经典设备与低功耗设备

android - ListView 在 onCreate 中两次添加项目

android - 如何在 Google Play 服务中使用条码检测打开手电筒?