跳转至

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 的例子

好像很杂。

注意:这部分涉及到测试用例表格的设计

Functional tests

注意:这部分涉及到测试用例表格的设计

现场测试 field testing(即 α & β 测试)

alpha 测试

开发完了,开发者模拟真实的运行环境

beta 测试

已经通过了 alpha 测试,征集志愿者用户在他们自己的环境下进行测试。规模通常比 alpha 测试大一点。相比 alpha 测试更偏向于真实的运行环境。比如 alpha 测试人员都是专业人士,可能不会做很傻的事情,但是 beta 测试当中可能会有用户傻不愣登的去酒吧前台问厕所在哪里。

beta 而是要注意,测试规模团体应该尽量地大一点、人群不要太单一。并给测试者提供一点回报、礼品,鼓励用户负责任的上报问题。也要对测试志愿者的信息进行保密。

验收测试

通常,系统测试是,开发者自己先测试,然后 alpha/beta 测试,最后用户来验收测试。