用于模型库测试的UML建模

时间:2017-05-12 19:49:53

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

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

我会简单地解释一下我在测试系统的方式,并为测试用例生成测试代码。 (我正在编写算法来生成android代码)。我正在为android espresso测试框架生成代码。浓咖啡的结构总是需要首先找到要与之互动的元素。这是通过将“OnView()”方法传入其中的参数(如withId(R.id.title)或withText(“Hello”)来完成的,以分别找到具有给定Id或Text的元素。然后,我们通过分别执行操作或执行断言来附加框架调用ViewActions或ViewMatchers以与元素交互的内容。下面是一个espresso测试用例的例子,它找到一个文本视图,点击文本“Lucky button”并检查它是否显示。

@Test
public void test () {

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

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

enter image description here

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

enter image description here

工具栏从初始节点转换为isVisible活动。在转换过程中,我们按照上面关于状态图转换的说明进行描述。在这里我们得到自由文本动作“withText:Lucky Button,matches,isDisplayed”,然后在我们的框架中处理它以获取代码。

 @Test
public void test () {

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

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

1 个答案:

答案 0 :(得分:1)

如果不深入细节,我建议退一步,开始更广泛的事情:

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

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

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

如果您回答这些问题,如果您的方法有效或有任何错误,您也可以得到答案,我无法回答您提出的问题。