AIGC与软件测试这点事儿
本文将从测试的 定义、周期、种类、分类、质量、原则、常用工具 等多个维度来整体聊一聊软件测试这点事儿。
文章最后,我们来说一说 AIGC与软件测试的结合点 。
定义
“软件测试是使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别”
通俗来讲,就是在软件中发现缺陷的过程。
周期
软件测试贯穿了项目各个阶段,每个阶段都有对应的测试对象。
- 需求分析阶段: 包括各类需求规则说明书等;
- 软件架构设计阶段: 包括API接口文档/测试等;
- 编码实现阶段: 包括了源代码等;
- 系统运行阶段: 包括了软件功能主体。
种类
- 单元测试: unit test,简称UT,是测试级别最小的底层结构、类、函数、组件等,我们可以看作是单一的程序模块用例测试;
- 集成测试: system integration test,简称IT,系统由不同的模块组装起来,可以看作为组装测试;
- 系统测试: system test,简称ST, 我们测试人员充当用户角色对软件的功能主体进行测试,包括了功能、性能、界面、可靠性、、兼容性等。一般软件开发结束,测试人员会对整个软件整体进行测试,多模块进行测试;
- 验收测试: 一般分为了四大类
- α测试:就是所谓的内测!
- β测试:为公测;
- UAT(user acceptance test)测试:主要由客户方的业务人员来操作软件进行测试;
- γ测试:可以认为候选版本,与正式环境的软件基本一致。
常见分类
- 功能测试: 根据功能的测试用例,我们对产品的各个页面进行功能验证,从而来检查产品是否符合预期;
- 接口测试: 一般是指系统组件间的一种测试,我们知道,现在项目软件开发基本都是前后端开发模式,大部分功能都是通过API调用来保证数据报文的交互传输;
- 性能测试: 当系统用户数量/数据量达到一定量级,我们可以通过一些自动化的测试工具(来模拟正常、峰值以及异常负载状态,对系统的各项性能指标进行测试,主要目的有定位性能瓶颈、排查性能隐患、保障系统的质量、提供用户体验;
- 兼容性测试: 作为非功能测试的一部分,主要用来保证应用层序与不同计算环境的兼容性(比如:浏览器的兼容性);
- 安全测试: 在软件产品的生命周期已经完成到发布结束,主要验证产品是否符合安全需求定义和产品质量标准的过程;
- 自动化测试: 一般分为web端自动化测试和移动端自动化测试,在一定程度增强了测试效率,将人为驱动测试转化为机器执行的一种过程,此类测试对开发能力、脚本能力有所要求。
......
质量
根据ISO组织指定标准,主要有6大特性:
- 功能性: 软件功能需要满足用户显式或者隐式的功能;
- 易使用性: 便捷用户使用软件,例如:提供上手快的操作文档;
- 可靠性: 软件必须实现需求中指明的具体功能,除了要满足用户需求正常运行,还需要保障发生故障时能继续运行;
- 效率性: 类似于软件的性能:主要体现在响应时间、资源利用;
- 可维护性: 要求软件具有将某个功能修复之后继续使用的能力;
- 可移植性: 具备跨平台能力。
原则
在实际的实践和研究中,行业总结了7条软件测试基本原则:
原则一:测试证明软件存在缺陷(Testing shows presence of defects): 测试本质就是证明软件存在缺陷,而不是软件没有任何缺陷,我们容易形成一个错误的认知:没有发生bug就说明没有缺陷;
原则二:穷尽测试是不可能的(Exhaustive testing is impossible): 对于验证的功能,准备好的测试数据、输入和测试场景的组合不能全部列举,由于时间限制,我们可以采用一些策略,比如:精准测试、二八原则、等价划分等;
原则三:尽早介入测试(Testing Early): 与“早起的虫子被鸟吃”道理一致,缺陷修复成本与其发现时间成本成反比,越晚修复其修复成本将会成指数级增长;
原则四:缺陷具有集群性(Defect Clustering): 一般指在某些模块中会发现大部分bug,所以我们需要了解项目模块的”重要“或”敏感”模块;
原则五:杀虫剂悖论(Pesticide Paradox): 同样的一个测试用例不能重复的执行多次,软件可能对它产生免疫;
原则六:测试是上下文相关的(Testing is context dependent): 对于不同的项目,我们需要考虑业务场景不一致,从而采用不同的测试方法;
原则七:无错误谬论(Absence of error - Fallacy): 任何一款软件不可能没有bug;
常见工具
1、Postman
Postman是一款接口测试工具,它不仅可以调试简单的css、html、脚本等简单网页基本信息,还可以发送几乎所有类型的HTTP请求!Postman简化了API生命周期的每个步骤并简化了协作。Postman在发送网络HTTP请求方面可以说是Chrome插件类产品中的代表产品之一。
2、Jmeter
Jmeter是Apche公司开发的一个100%的纯Java桌面应用,它是接口功能、自动化、性能测试的工具。具有高可扩展性、支持HTTP、HTTPS、TCP、等多种协议,还可以自己编写Java脚本对协议进行扩展。具备开源免费、支持多协议、功能强大等优点。
3、Fiddler
Fiddler是一款http协议调试代理工具,目前最常用的http抓包工具之一,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件)。
4、Selenium
Selenium是一个Web应用程序测试工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium可以直接运行在浏览器上,它支持所有主流的浏览器,支持不能浏览器版本IE(7, 8, 9, 10, 11),支持多浏览器:Mozilla Firefox,Safari,Google Chrome,Opera等。
AIGC与软件测试的结合点
综上所述,软件测试其实很类似于金融的风险管理,是一个极其专业且核心的环节,都是在与未来的不可知做博弈的系统性工程,那么这正是用 AIGC技术 生成 合成数据 所擅长的领域。
合成数据可以解决软件测试过程中 生产数据不可用、脱敏数据有效性衰减、测试数据生成效率低、覆盖度不足 等诸多问题。
之前写过很多关于 AIGC 生成 合成数据 在软件测试领域应用的文章,我附在下方可以查阅。
另外,微信搜索“ 宽客进化 ”公众号,关注并后台回复关键词“ AIGC2023 ”可获取 《腾讯发布 AIGC 发展趋势报告》 完整版PDF。