Lecture 14. System Testing 系统测试
集成测试是考虑把不同模块拼在一起,系统测试是把硬件软件网络等等环境全都结合在一起进行测试。(类似于模拟用户使用的感觉)
测试分类
系统测试种类非常多,听到名字知道是干啥的就行了。
系统测试不一定要把这所有的方面都测试到。
一致性测试 conformance testing
???
是黑盒测试。
已经有国标或 ISO 标准,看看是否符合。比如,在小米和华为上面是否运行结果一致。
一般在通讯软件当中比较重要。
文档测试 documentation testing
???
文档也是软件的一部分。
就是验证文档(印刷版、在线文档、帮助文档、提示文档、过程管理文档等)是否足够充分。按照文档执行一遍不同的系统功能,看看跟文档描述的是否一致。
人体工程学测试 Ergonomic testing
也就是测试一下,这个东西是否是反人类的设计,是否有别扭的地方、丑的地方、测试易用性。之前的测试基本都是测试是否运行正常,而人体工学测试比较偏主观感受。
功能测试 Functional testing
有点类似于单元测试,验证系统的行为是否和预期的一样。测试一下每一个接口是否跟规格说明书一致。
互操作测试 Interoperability testing
看看这个软件跟其他软件之间的信息沟通、交互。比如浏览器打开一个🔗可能会启动 QQ。再比如 360 全家桶之间就有非常完善的关联。
用于确保跟其他一次性产品之间可以配合。
性能负载测试 Performance/Load testing
检查一下响应时间(运行速度)、并发性(多用户同时使用)、吞吐量(throughput,短时间内是否能够处理较大量数据)、性能计数器(performance counter,类似任务管理器,记录运行过程的性能数据)等等。
可移植性测试 Portability testing
比如能否同时用于 32/64 位操作系统,能否同时用于触屏设备和非触屏设备,能否同时在脱机和联机网络环境运行,等等……
回归测试 Regression testing
就是当软件发生一点小变化(修了一个 bug,新增一个功能,修改一个原有功能等),会不会产生新的 bug。差不多就是重新测试一下之前的测试。
通常回归测试都是自动化进行(参考 Lecture 15 内容)的。要不然每次稍微有一点改动都要重新测一大堆,太麻烦了。
发布测试 Release testing
???
基本都做完了,作为最终阶段,发布之前进行测试。验证是否能正常的运行。
压力测试 Stress testing
测试一下,如果负载超过了规格说明书的要求,能不能行。差不多就是看看,能够承受的极限范围是啥。比如有些商品会说,适用范围零下五十度以内之类的。
安全性测试 Security testing(外来攻击角度)
故意模拟一些攻击行为。受到外部攻击之后能否正常工作?
安全测试 Safety testing(使用角度)
看看会不会有安全隐患,比如会不会由于用户操作不当对用户造成伤害。比如假如用户不小心碰到导线,你能否及时的自动断电。
鲁棒性测试 Robustness testing
如果发生了一点小错误,会直接崩溃还是依然能跑?
验收测试 Acceptance testing
测试的主体是用户而不是开发人员。
由用户检查是否满足要求。
系统级别功能测试 System level functional testing
??
测试环境
测试工具在系统接口给予 SUT 一个输入,然后获得输出。~~(SUT 是啥???)~~
有的接口是同步(synchronous)的,有的是异步(asynchronous)的。同步就是必须获得输出之后才能继续输入,异步可以不管输出继续输入(输入形成队列)。
GUI 的例子
好像很杂。
Navigating the interface
注意:这部分涉及到测试用例表格的设计
Functional tests
注意:这部分涉及到测试用例表格的设计
现场测试 field testing(即 α & β 测试)
alpha 测试
开发完了,开发者模拟真实的运行环境
beta 测试
已经通过了 alpha 测试,征集志愿者用户在他们自己的环境下进行测试。规模通常比 alpha 测试大一点。相比 alpha 测试更偏向于真实的运行环境。比如 alpha 测试人员都是专业人士,可能不会做很傻的事情,但是 beta 测试当中可能会有用户傻不愣登的去酒吧前台问厕所在哪里。
beta 而是要注意,测试规模团体应该尽量地大一点、人群不要太单一。并给测试者提供一点回报、礼品,鼓励用户负责任的上报问题。也要对测试志愿者的信息进行保密。
验收测试
通常,系统测试是,开发者自己先测试,然后 alpha/beta 测试,最后用户来验收测试。