给大家30秒的时间,一起来思考这是什么?
这是某系统登陆模块功能的初始类图。
随着现代软件的不断复杂化,代码图(Code Graphs)为测试人员提供了一种直观的方法,让复杂的代码逻辑易于理解。本文将深入探讨代码图,通过挖掘到的真实场景和实际示例,展示可视化代码图如何增强软件测试人员的能力以及如何开展测试工作。
代码图指的式用于表示代码结构、类之间关系或代码元素之间交互的图形化工具,常见类型包括类图、时序图、活动图、组件图等多。
代码图由以下两个部分组成:
以组合关系的类图为例:
代码可视化通过图形化展示代码结构和关系,团队成员在软件测试过程中使用代码图有着诸多好处,如改善彼此之间的沟通和协作、提高效率和专注度等。这有助软件测试人员更快速迪理解代码逻辑和关系,减少阅读和理解代码的时间成本。
代码图的重要作用在于有助于缩小技术和非技术人员之间的差距。测试人员可以轻松地向经理、客户或对代码不熟悉的成员解释代码流程。
曾担任西门子软件工程师的Stelios Manioudakis以自身为例,充分说明了代码图改善沟通与协作的作用。
在早期做软件测试时,他曾参与了一个开发新健身追踪器应用的项目。他们通过睡眠追踪算法分析传感器数据,来确定睡眠阶段(浅睡眠、深睡眠)并生成睡眠报告。但在测试算法过程中,他们遇到了不少的困难,因为非技术人员很难仅通过代码来理解算法逻辑。
这时候,代码图就派上用场了。他们采用可视化算法流程以及不同传感器读数和睡眠模式计算的决策点,让产品经理和UI设计通过代码图了解需要测试的潜在场景,例如不安稳的睡眠模式或缺失的传感器数据。
除此之外,代码图还促进了与开发人员的协作。在代码审查期间,测试人员和开发人员参考代码图可以更好识别预期逻辑和实际实现之间的潜在差异。最终,健身追踪应用中的睡眠追踪算法成功通过测试,代码图功不可没。
测试人员通过代码图能够更高效地规划、编写和执行测试,减少重复性工作,从而提高测试覆盖率和质量。
以新闻推送算法为例,该算法根据用户的兴趣和互动情况,对用户进行个性化推荐。最初,测试人员需要仔细逐行检查代码,这种既耗时又费力的方法很难确定所有潜在的测试场景。但代码图以一种直观的方式将各个影响因素展示出来,例如用户偏好、帖子互动和内容新鲜度。不仅如此,代码图还提供了清晰的决策点和分支路径。
显而易见,使用代码图比逐行检查代码的方法快得多。这使测试人员能够优先考虑算法的关键领域,确保全面测试,并为用户提供更可靠、更个性化的新闻推送体验。
在代码重构后或团队新成员需要查看代码时,文档能够帮助团队成员更快地理解程序流程和潜在的测试要点。
举个例子:某个电子商务平台的库存管理系统是多年前建立,如今维护变得越来越复杂,新功能也越来越难实现。在系统调整过程中,面对复杂的库存管理逻辑,代码图将从产品添加、更新到订单处理、库存水平管理直观地展示出来。
由此,测试人员能够确保调整后的库存管理系统得到高效维护,代码图其中的作用不言而喻。
代码图能够揭示纯文本代码审查中可能遗漏的问题,因为越混乱的代码图表示代码越复杂,这越容易出错。
举个例子,医院的预约安排系统在更新过程中引入了一项新功能:允许患者在线重新安排预约。新功能在经过代码审查和测试用例设计后,如果没有发现重大问题即可投入使用。
然而,鉴于涉及处理冲突预约特定部分的复杂性,测试人员决定采用代码图进行进一步检查和验证。代码图展示了纯文本审查中可能忽略的潜在问题:
于是,测试人员根据代码图对新功能进行了重新调整:
测试人员利用代码图能主动识别潜在问题,并与开发人员合作解决这些问题。由此,这能够确保医院预约安排系统的完善性与可靠性。
代码图与结构化编程的原则(序列、选择和重复)无缝契合。这些基本结构直接映射到特定的图形模式,从而简化了对这些常见结构的测试。
(1) 简化的测试设计: 结构化编程强调明确定义的结构,如序列、选择(if-else)和重复(循环)。代码图将这些结构直接映射到特定模式:
(2) 更轻松地实现测试用例可视化:通过识别代码图中这些熟悉的模式,测试人员可以快速了解程序的流程和相应的测试用例。例如,图中的循环模式表示需要测试用例覆盖循环的各种迭代,包括边界条件和预期行为。
循环数是基于代码图复杂度的度量,有助于评估程序测试的难度。复杂度越高(路径越多),测试就越彻底。但让我们深入了解更多细节。
这里有一个简单的例子,考虑一个具有两个连续的 if-else 语句的简单程序:
if condition1: # statements for if condition1 is true else: if condition2: # statements for if condition2 is true else: # statements for both conditions false
节点:
边:
相应的代码图将具有包含三个决策点和多个执行路径的分支结构。此图的循环数为 4(节点 - 边 + 2)。与结构更简单的程序相比,这表明逻辑可能更复杂,并且需要更多测试用例。
通过了解这些好处,软件测试人员可以利用代码图来有效地导航程序逻辑,设计有效的测试用例,并有助于交付高质量的软件。
让我们详细解释一下如何得出圈数 4。
由于我们有 3 个决策点,但由于起点而加 1 是计算循环复杂度的常用方法,因此最终的数字是 3 + 1 = 4。
记住:
虽然代码图具有改善沟通与协作、提高效率与专注度等优点,但测试人员还要需要注意以下事项:
通过理解和解决这些限制,测试人员可以有效地利用代码图。在承认其固有的局限性以及将其与其他测试方法相结合的必要性的同时,可以进行全面而高效的测试。
禅道软件团队自主研发的企业IM软件中集成了开源应用draw.oi,将聊天和协同有机结合在一起,文中所有代码图均用此功能完成。通过利用代码图,软件测试人员可以更深入地了解程序逻辑。他们可以设计更有效的测试用例,并为交付高质量的软件做出贡献。
我们必须承认一点,随着软件格局的不断发展,代码图将继续成为确保应用程序的可靠性和稳健性的重要工具。
* 参考资料:Stelios Maniooudakis 的 Code Graphs: A Guide for Testers