Photo by Jeffrey Betts on Unsplash
前言
在上礼拜的文章中,小弟粗略的介绍了一下软体测试,内容包括了验证与确认的重要和静态分析与动态测试以及白箱测试与黑箱测试,如果有兴趣还没看过的大哥大姐们可以稍微看看,鼠年全马铁人挑战 WEEK 02:软体测试的种类 - 第一集。(◍•ᴗ•◍)
而这礼拜的文章内容将会延续上礼拜的文章继续做延伸,主要会讲的内容包含了软体测试金字塔与非功能性测试。那我们就废话不多说,赶快开始吧~
软体测试金字塔
以前大家所看到的软体测试金字塔应该都是只有最下面三层的居多吧~ (◜◔。◔◝)
但是随着时代的变迁,测试也多了新花样,也就是最顶端的 Acceptance Test。
越往金字塔的顶端爬,规模会越来越大,数量相对会越来越少,测试时间也会被拉长。
而金字塔最底层,最接近开发者,能够在前期的时后发现错误,大大降低了处理成本。
底下将简单的介绍一下金字塔内部的各个测试种类 (ง •̀_•́)ง
单元测试 - Unit Test
什么是单元测试?
单元测试中的每个单元可以是单个功能、方法、过程、模组或对象。
简单来说也就是程式的中最最最底层的,最最最单一的东西。
测试目的是为了确保软体的每个单元或是组件按照预期执行。
单元测试基本上是由开发人员在应用程式的开发阶段中完成。
通常会使用上一篇所提到的白箱测试进行单元测试的检验。
但是计画总是赶不上变化,有些单元测试还是会由 QA 帮忙进行。
为什么要有单元测试?
能够在开发週期的早期发现错误进行修复并节省成本。能够帮助开发人员了解代码,达成快速修改的目标。举个例子
以红绿灯来说,单元测试就像是在检验红绿灯中最为基本且单一的各个元件。
像是 LED 信号灯、盖板、帽沿、装饰面板与亮壳等。最底层最单一的元件。
整合测试 - Integration Test
什么是整合测试?
在元件通过单元测试之后,会开始整合单元模组,以检查元件之间的一致性。
目的是为了确保在整合这些软体模组时,之间交互中不会出现任何缺陷。
虽然每个单元模组都通过各别的单元测试,但组合后的各模组未必能顺利执行。
通常会使用上一篇所提到的黑箱测试进行整合测试的检验。
像下图一样门闩跟拉门各自的功能都没问题,但是这两个组在一起问题就大了。
为什么要有整合测试?
确保多个模组进行整合测试,是可以统一工作的。确认是否完善异常处理,减少更多问题的发生。举个例子
以红绿灯来说,整合测试就像是在检验刚刚单元测试的元件组在一起是没问题的。
系统测试 - System Test
什么是系统测试?
系统测试可以验证完整且完全整合的软体产品,评估端到端的系统规格。
测试环境应与实际环境相似,并參考系统的需求、规格与效能要求來进行设计。
通常会使用上一篇所提到的黑箱测试进行整合测试的检验。
为什么要有系统测试?
检验整个系统软硬体功能及执行绩效是否符合需求。举个例子
以红绿灯来说,系统测试就像是结合不同的计数器或是灯号的样式进行测试。
验收测试 - Acceptance Test
什么是验收测试?
基本上是由最终用户或客户端执行的一种测试。
也称之为 User Accrptance Test (UAT)。
目的是为了将应用程式释出之前进行系统的 验证/验收。
在完成单元、整合和系统测试之后,在测试的最后阶段完成验收测试。
而如果以 QA 的角度来看,验收测试又可以被分成两种。
by QA 的 Alpha Test 跟 by Clients or End Users 的 Beta Test。
为什么要有验收测试?
确保开发人员根据需求编写的软体,是客户实际上所需要的。避免项目中的需求变更无法有效地传达给开发者而引发错误。举个例子
以红绿灯来说,验收测试就像是将整个完成的红绿灯实际的摆在测试道路上。
让一些测试人员,或是直接让使用者或客户群直接进行测试。
非功能性测试 (Non-Functional Test)
非功能测试被用于检查软体应用程式的非功能性方面,像是性能、可用性和可靠性等。
而以下就是可以做为非功能性测试的参数依据,可以根据这些参数做相对应的测试。
那实际上该注意的有哪些东西呢,就让我们继续看下去吧~
Security: 确保系统能够抵挡内部或外部来源的蓄意或突如其来的攻击。
Availability: 确保系统在长时间运作的情况下,系统能够正常运作。
Efficiency: 确保系统能够有效的处理流量、数据与回应时间。
Reliability: 确保系统在没有故障的情况下,每次的操作都能有相同的回应。
Survivability: 确保系统在修复故障后,系统能够自行恢复并继续运作。
Usability: 确保使用者在使用系统时,能够越简单易懂,越好记。
Flexibility: 确保系统能够在不同软硬体配置下工作。像最低RAM、CPU要求一样。
Scalability: 确保系统能够满足额外的需求增加与扩展的处理。
Reusability: 确保系统的部分功能能够转换到其他系统上使用。
Interoperability: 确保系统能够与其他软硬体间互相操作。
Portability: 确保系统从当前环境转移至其他软硬体能够正常运作。
以上说了这么多,但是非功能性测试的测试实在太多太广泛了。
但是只要提到非功能性测试,很常都会把性能测试也提出来说。
因为非功能性测试也包含了性能测试,所以经常被一起提出来。
关于性能测试,之后小弟会再另外写一篇文章简单的介绍一下。
结尾
就这样,以上是这篇所介绍的内容,希望内容不会太艰涩难懂。
如果有疑问或是有错误,还请各位大哥大姐提点。