1.简介
IEEE和ISO正在定义软件测试架构这一概念。软件测试架构概念标准化的一个重要方面是了解从事这项工作的人所需要的技能。在工业界和本文中,这些人都被称为软件测试架构师。
现代系统中包括大量的软件,会引入很多风险。测试团队经常做不到完全理解系统的全局,制订的测试计划和策略就不够深入全面。此外,测试行业并不完全理解架构的概念,工程师们在定义软件测试架构和测试环境中遇到很多挑战。正是由于缺乏对测试架构的理解,导致系统发布后失效的可能性增加,同时面临在安全性、可靠性、互操作性、功能、使用方式和其他领域的许多挑战。
有些公司会设置"软件测试架构师"的职位,而有些公司可能只是将这些人称为系统或软件工程师,但要求他们拥有搭建软件测试架构和环境相关的知识和技能。目前甚至还有专门针对这个头衔的认证。然而,整个行业对于这个角色还是缺乏共识。
本文不仅阐述了软件测试架构师应该具备的工作技能和基本知识,还包括对于这些所需技能的思考,旨在为ISO/IEEE/IEC29119软件测试系列标准工作提供参考。本文考虑的场景是:由软件驱动的复杂系统可能需要一个架构师。针对复杂软件系统,测试架构师的责任是:制订适当的测试计划、测试策略、测试架构和测试环境。
2.什么情况下需要一个软件测试架构师?
并非每个软件测试项目都需要测试架构师这样有经验的人员。许多软件系统的测试架构比较简单,已经包括在测试计划和策略中。例如,一个单机运行的低风险的PC程序,我们只需要编写简单的手工测试用例,不需要工具支持。那么测试架构就是一个加载了程序的独立的PC。有许多系统可能类似于这种情况,然而,复杂的软件系统数量正在增加,因此催生了对于软件测试架构师的需求。
需要软件测试架构的复杂软件系统的包括:
1)具有复杂数据分析功能的人工智能系统
2)包含许多站点/供应商的大数据分析系统
3)有许多用户的虚拟现实和游戏系统
4)云计算系统
5)拥有数百万台设备的移动系统
6)嵌入式系统
7)物联网网络
8)嵌入式连接系统(如现代汽车)
基本上,任何一个复杂的软件系统,其内部和外部的软件系统相互作用,都可能需要某种程度的软件测试架构(STA)。这就需要专门的人员在测试早期和策略制订时负责设计软件测试架构,其工作需要贯穿整个软件开发生命周期。在图1中,每个复杂的系统本身有一个软件架构,必须为它制订测试计划以及定义测试架构(编者注:比较含糊,可以参考软件测试架构师究竟干哪些工作?)。此外,世界上的每个地区、航空航天、消费者、城市和其他元素都可以通过云计算相互连接起来。这些世界范围内的互联的系统,最好是在一个超级STA(编者注:更含糊)中进行评估和测试。复杂的软件和测试架构的复杂性随着软件元素、风险和连接的增加而急剧增加。软件元素的数量、风险和连接的增加,软件和测试结构的复杂性也随之激增。
图1复杂系统无处不在
3.软件测试架构师的职责
软件测试架构师的定义:软件测试架构师时运用策略、方法、实践、流程和战术来开发软件测试架构的专业人员。(编者注:从这个定义中,说明“测试架构”这个概念很重要,需要实现明确定义,但没有明确定义,是这篇论文的缺陷)
在此基础上,测试架构师的职责包括:
一个高级别的测试技术专家(编者注:测试技术专家可以是一个测试架构师,但写在这里有些突兀),制定适当的测试策略、技术方法和自动化的测试计划,在整个软件生命周期内保障系统的整体质量。
支持管理层完成一个成功的产品和项目。(编者注:比较含糊,团队每个人都有这样的职责)
掌握软件测试行业的最新方法和技术,并根据需要在产品生命周期内将其传递给其他工程师。
定义测试系统的软件架构,包括:测试环境、测试基础设施和测试自动化。注:测试系统包括环境、工具和操作,以支持测试工作。
搭建、监测和维护最佳的测试系统、测试架构和测试技术(编者注:测试系统包含了测试架构,测试技术不能搭建,而是规划)。
与其他项目领域(例如硬件、软件、运维等)的角色和利益相关者合作,以确保正确的集成。
和管理层保持在测试计划和情况等方面的持续沟通(编者注:这可能是测试经理/测试总监的主要职责,测试架构师和CTO、研发技术总监等沟通更多)。
识别测试系统的架构要求和限制,从而改进流程,并根据需要选择测试自动化方法、数据、工具等。
记录和跟踪测试架构的风险。
根据需要,创建测试系统模型,包括不同的视图和层次。
通过定义、验证和维护测试架构来划分测试系统的逻辑单元(编者注:可归入第4条)。
和测试人员一起定义和说明测试架构以及测试系统的设计理念。
软件测试架构师具有与系统架构师、硬件和网络架构师同等的权力和责任,并且同等重要。
4.测试架构师的关键经验和技能
软件测试架构师应该是一个经过多年培训、具备丰富的知识和技能的资深专业人员。他们在产品领域的知识和技能涉及测试、软件、系统和其他工程领域。具体来说,这些架构师需要熟练掌握的知识和技能如下:
1)对需求的业务理解能力、架构和开发能力、测试和质量方面的技能、沟通能力和领导力。
2)与工程部门、管理部门和利益相关方的紧密合作。(编者注:“紧密合作”不是能力,是不是改为“沟通协调能力”?)
3)在测试计划、测试策略,和测试架构方面培训和指导他人。(编者注:同上,感觉是职责,不是能力)
4)成本和进度估算能力。
5)产品领域的知识和计划能力,包括:
· 对被测软件系统的理解。
· 支持产品的合作伙伴和供应商。(编者注:是知识和能力吗?更像职责)
· 测试管理、标准、认证和指导。(编者注:有点乱,“管理、标准、认证和指导”不是一类东西)
· 制订测试和项目过程改进目标。(编者注:更像职责,改为“过程改进知识、PMBOK”)
· 对软件开发生命周期的理解--传统的、精益的、敏捷的和其他的。
· 测试/V&V方法和技术。
· 测试设计、执行和后期分析。(编者注:+“相关知识”,而且和上面“测试/V&V方法和技术”有交叉/叠加,违背MECE原则)
· 测试架构。(编者注:为何不放在第一条?)
· 测试环境,包括:硬件、软件、工具、操作、仿真,注入技术,组件、用户、原型、数据库、分析及其他适用的元素。
· 采用先进的或适当的方法制订测试计划和测试策略。(编者注:继续违背MECE原则)
· 测试自动化,高效地落实项目计划并实现测试目标。
· 测试和质量计划。
· 开发团队流程和计划。
· 工程和测试的全球视野。
· 件集成、部署和操作。
5.辅助性知识和技能领域
除了与软件测试相关的知识和技能外,测试架构师还需要了解并能够实践其他工程领域的技能,包括:
· 硬件
· 软件
· 系统
- 运营和部署
· 管理、社会技能、领导力和沟通
· 开发和流程
- 系统和软件的要求
- 设计(包括可测试性)
- 实施技术
- 质量保证
- 配置管理(针对硬件和软件)
· 安全
- 安全设计
- 加密和数据传输
- 渗透测试(编者注:属于前面测试范畴)
· 质量特性(编者注:这不是辅助,而是基本的知识/技能,比前面“成本和进度估算能力”更重要)
- 可维护性
- 性能
- 互操作性和集成性
- 可靠性
- 其他必要的质量特性系统所需的其他质量特性
· 识别潜在的项目/测试风险和影响(编者注:“测试风险”不是辅助,而是基本的知识/技能)
· 编写文档和进行技术交流。(编者注:对架构师来讲,技术交流能力也是基本的技能)
接下来,还有一些"非"工程和难以量化的概念,这些概念非常重要,包括:艺术、审美以及使科技人员及其技能脱颖而出的人为因素方面。
最后,批判性思维是测试架构师的一项辅助性的关键技能。使用多种技能进行思考是必要的,能够从抽象的STA计划演化成具体的设计细节,再到最终的测试结果。架构师必须从系统的"全局"开始,运用各种技能来实现一个优雅的最佳的STA解决方案,然后将其细化为测试设计。有创造力的测试架构师了解并实践许多技能领域,善于使用适合系统领域的各种模式(图1的例子)。测试架构师需要考虑不同的负面测试情况,这些情况可能被系统和软件架构师忽略,由此产生的STA可能比原来的被测系统更复杂。