Java 模型库测试的UML建模

Java 模型库测试的UML建模,java,android,uml,android-espresso,model-based-testing,Java,Android,Uml,Android Espresso,Model Based Testing,我有一些关于建模的问题。我正在做一个基于模型的测试的论文项目。我还想从专家的角度了解我是否采取了正确的方法来模拟我的场景。我正在为android应用程序的UI建模,遍历它们,生成espresso框架的测试用例和测试代码 我将简单地解释我对测试中的系统建模的方式,以及为测试用例生成测试代码的方式。我也在编写生成android代码的算法。我正在为android espresso测试框架生成代码。浓缩咖啡的结构总是需要首先找到与之互动的元素。这是通过“OnView”方法传递到诸如withIdR.id.

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

我将简单地解释我对测试中的系统建模的方式,以及为测试用例生成测试代码的方式。我也在编写生成android代码的算法。我正在为android espresso测试框架生成代码。浓缩咖啡的结构总是需要首先找到与之互动的元素。这是通过“OnView”方法传递到诸如withIdR.id.title或withText“Hello”之类的内置参数来完成的,以分别查找具有给定id或文本的元素。然后,我们附加框架所称的ViewActions或ViewMatchers,分别通过执行操作或执行断言与元素进行交互。下面是一个浓缩咖啡测试用例的示例,它找到一个文本视图,并单击文本“幸运按钮”,然后检查是否显示该文本视图

@Test
public void test () {

  onView(withText(“Lucky Button”))      //ViewMatcher
       .perform(click())             // ViewAction  .check(matches(isDisplayed())); // ViewAssertion
简单案例 让我们来看一个有两个屏幕的android应用程序。屏幕A和屏幕B。每个屏幕包含不同的元素。例如TextViewTextlabel、ImageViewImage label、E.t.c。 我使用状态图来描述屏幕可能处于的状态。对于每个状态,都有一个活动图,该图描述了对元素(如TextView、ImageView)执行的测试。我们用泳道将每个测试套件分组,并用活动动作表示测试动作。但需要输入信息。例如,活动动作可以称为isVisible,以检查工具栏设计泳道中工具栏的可见性。要实现此操作,我们需要工具栏上的信息,以便首先找到它并检查其可见性。我通过提供有关动作或状态转换的必要信息来实现这一点。下面是描述场景的状态图和活动图的示例

此状态图有2个状态。从MainActivity到NewNote的转换是一个名为openNewNote的触发器,其动作的格式为freetext。freetext操作包含必要的信息,通过这些信息,我可以在java框架中处理和提取这些信息,以生成类似上面的代码。 在框架中,我首先选择id为title的元素,然后执行click方法。 在MainActivity状态中,还包含一个子活动图,如前所述。在这个子活动图中,我们给人建模的机会,我们认为是一个知道意大利浓咖啡框架来编写测试活动活动的人。下面是测试应用程序工具栏和登录屏幕的MainActivity的活动图示例

工具栏从初始节点过渡到isVisible活动。关于转换,我们在状态图上对转换进行了如上所述的描述。在这里,我们得到freetext操作“withText:Lucky Button,matches,isDisplayed”,然后在我们的框架中处理它以获得代码

 @Test
public void test () {

  onView(withText(“Lucky Button”))      //ViewMatcher
        .check(matches(isDisplayed())); // ViewAssertion
问题。 到目前为止,这对团队是有效的,因为程序员是建模者。我将提供系统建模的文档。
我想问一下,这是否是一种有效的建模方法,是否可以在我的研究中加以描述。还有,如果您有任何意见或建议。

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

在您的案例中,更正式地定义被测SUT是什么:输入、输出、与输入和输出相关的需求。例如状态机、活动图等。 更正式地定义您想要建模的内容:SUT的并行实现,它是您的测试模型TM。它通常是抽象的,仅在SUT行为的某些有限领域有效。在您的案例中,序列图和活动图。 一致性关系:SUT符合TM的形式定义是什么?SUT和TM这两种模型比较起来如何? 什么理论可以正式和自动地证明一致性关系?这也为自动化所需的工具提供了答案。 最好的开始方式是练习以下示例:

了解至少一个大型MBT工具的所有演示示例:Microsoft Spec Explorer、Conformiq Designer。。。 粗略地用其中一个来模拟您的示例。 看看他们是如何使用UML的。我向您推荐Spec Explorer的UML扩展,它侧重于输入数据生成和场景,而不是行为-类似于您的应用程序。 了解这些工具背后的理论:符号执行、交替模拟、场景等。 如果你回答了这些问题,你也会得到答案,如果你同意的话
ch是有效的或有任何错误,我无法从您的演示中回答。

上述内容与您的实际生产模型有何关联?在我看来,你只是简单地在没有任何模型关系的情况下对离岸测试进行建模。@ThomasKilian问题是我必须生成测试代码,这就是我正在使用的过程。一种基于模型的测试数据驱动测试。我想知道这是否是使用UML模型的正确方法,或者我是否可以用我使用它的方式,如果我可以写我的研究并为它辩护,你可能可以这样设计你的测试。然而,我不是一个测试人员,与我一起工作的测试团队是基于需求进行测试的,他们正在寻找将这些测试跟踪到最终系统的方法。在你的方法中我看不到这一点。@ThomasKilian,是的,我们有需求,我们根据这些需求为我们的框架建模和编写测试感谢分享,SUT是一个android项目,由我的状态图表示。活动图是我的测试模型,从中我生成了我的测试代码。我为Espresso框架生成测试代码。在转换过程中,我会提供所需的输入。