功能测试:对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。
功能测试要点 :
①功能逻辑清楚,符合使用者习惯
②系统的各种状态按照业务流程而变化,并保持稳定
③每项功能符合实际要求
回归测试:在当前版本中对上一个版本中测过的功能再重复测试1遍
回归测试原因:一旦程序某些区域被修改了(增加新的功能),就可能影响其它区域,导致受影响的区域出现新的缺陷(回归缺陷)。如果这时没有回归测试,产品就带着这样的回归缺陷被发布出去了,造成严重后果。回归测试就是为了发现回归缺陷而进行的测试。
回归测试目的: 所做的修改达到了预定的目的,如错误得到了改正,新功能得到了实现,能够适应新的运行环境等; 不影响软件原有功能的正确性。
回归测试策略:
①再测试全部用例
②基于风险选择测试
③基于操作剖面选择测试
④再测试修改的部分
⑤更智能的选择方法
常见性能问题:
性能的具体指标:
性能测试:为了发现系统性能问题或获取系统性能相关指标而进行的测试。一般在真实环境、特定负载条件下,通过工具模拟实际软件系统的运行及其操作,同时监控性能各项指标,最后对测试结果进行分析来确定系统的性能状况。
性能测试目标:
①获取系统性能某些指标数据
②为了验证系统是否达到用户提出的性能指标
③发现系统中存在的性能瓶颈,优化系统的性能
性能测试类型:
性能测试要点(理解):
也称为强度测试、负载测试。压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能、可靠性、稳定性等。
在一种需要反常(如长时间的峰值)数量、频率或资源的方式下,执行可重复的负载测试,以检查程序对异常情况的抵抗能力,找出性能瓶颈或其它不稳定性问题
压力测试(ST)类型:
① 并发性能测试(重点)
并发性能测试的过程也是一个负载测试过程,即逐渐增加并发虚拟用户数负载,直到系统出现性能瓶颈或者崩溃为止。
破坏性压力测试,通过不断加载的手段,快速造成系统的崩溃,让问题尽快地暴露出来
②疲劳强度测试
采用系统稳定运行情况下能够支持的最大负载,持续长时间运行,以发现性能问题。
渗入测试(soak test),通过长时间运行,使问题逐渐渗透出来,从而发现内存泄漏、垃圾收集(GC)或系统的其他问题,以检验系统的健壮性
峰谷测试(peak-rest test),采用高低突变加载方式进行,先加载到高水平的负载,然后急剧降低负载,稍微平息一段时间,再加载到高水平的负载,重复这样过程,容易发现问题的蛛丝马迹,最终找到问题的根源
③ 大数据量测试
独立的数据量测试:
针对某些系统存储、传输、统计、查询等业务进行大数据量测试
综合数据量测试 :
和压力性能测试、负载性能测试、并发性能测试、疲劳性能测试相结合的综合测试方案
例子:大数据量测试:10万、100万、千万条记录
大容量测试:某些字段存储10M、100M、1G等大体积数据。
负载(Workload):
将系统置于相同的高负载下,将请求之间间隔时间设为零。这样服务器会立即超载,并开始构建执行队列。
不可能/不需要对Web应用系统的所有功能进行性能测试,而是根据业务的实际操作情况和技术的角度来分析,选择关键业务
软件安全性测试:检验系统权限设置有效性、防范非法入侵的能力、数据备份和恢复能力等,设法找出上述各种安全性漏洞
测试策略:
理论上讲,只要有足够的时间和资源,没有不可进入的系统。因此系统安全设计的准则是,使非法侵入的代价超过被保护信息的价值,此时非法侵入者已无利可图。
功能性测试 vs.安全性测试:
功能性测试:软件做它应该做的事,验证正确的输出不正确的输出 /行为 / 缺陷(Bug)
安全性测试:软件不做它不应该做的事, 应用输入验证, 没有不安全的事情发生。在测试软件系统中对危险防止和危险处理设施进行的测试,以验证其是否有效
不同的安全性风险:SQL注入式漏洞;URL和API的身份验证 ;缓冲区溢出;不安全的数据存储或传递;不安全的配置管理等等
安全性测试的范围:
系统级别的安全性
应用程序级别安全性 (重点):用户权限;数据输入验证;敏感数据加密;数据存储安全性;用户口令等
安全功能测试 (Security Functional Testing):数据机密性、完整性、可用性、不可否认性、身份认证、授权、访问控制、审计跟踪、委托、隐私保护、安全管理等
安全漏洞测试 (Security Vulnerability Testing):从攻击者的角度, 以发现软件的安全漏洞为目的。安全漏洞是指系统在设计、实现、操作、管理上存在的可被利用的缺陷或弱点
安全性测试方法1:
①基于漏洞的方法, 从软件内部考虑其安全性,识别软件的安全漏洞。如借助于特定的漏洞扫描器。
②基于威胁的方法,从软件外部考察其安全性,识别软件面临的安全威胁并测试其是否能够发生
③模拟攻击测试:一组特殊的、极端的测试方法,如Fuzzing,使用大量半有效的数据作为应用程序的输入,以程序是否出现异常为标志,来发现应用程序中可能存在的安全漏洞
安全性测试方法 2:
白盒方法
用商业的统计分析工具
对源码的内审
借助工具 Coverity /Fortify 等
黑盒方法
错误注入(Fault injection)
Dumb Fuzzing
灰盒方法
Smart Fuzzing / Intelligent fuzzing
静态安全性测试的重要性:对代码进行静态扫描,提前发现潜在的安全性问题,那么会避免后期因为漏洞而付出的代价。从微观来看程序代码有哪些安全性问题。
1.语言级代码安全,如C/C++缓冲区溢出…
2.逻辑级代码安全,如身份认证与授权…
3.规范级代码安全,如内存泄漏…
安全性测试方法 3
可靠性(Reliability):产品在规定的条件下和规定的时间内完成规定功能的能力。软件可靠性与软件缺陷有关,也与系统输入和系统使用有关。理论上说,可靠的软件系统应该是正确、完整、一致和健壮的。
可靠性测试结果的评估:成熟性度量可以通过错误发现率DDP(Defect Detection Percentage)来表现。在测试中查找出来的错误越多,实际应用中出错的机会就越小,软件也就越成熟。
DDP=测试发现的错误数量/已知的全部错误数量
已知的全部错误数量是测试已发现的错误数量加上可能会发现的错误数量之和。
容错性测试(Fault-tolrent test):检查软件在异常条件下自身是否具有防护性的措施或者某种灾难性恢复的手段。
测试手段:
①输入异常数据或进行异常操作,以检验系统的保护性。如果系统的容错性好的话,系统只给出提示或内部消化掉,而不会导致系统出错甚至崩溃。
②灾难恢复性测试。通过各种手段,让软件强制性地发生故障,然后验证系统已保存的用户数据是否丢失、系统和数据是否能尽快恢复。
兼容性测试: 验证软件之间是否正确地交互和共享信息
兼容类别:
多版本测试:需要对所有可能的软件组合等价分配,验证软件之间正确交互的最小有效集合。
通常的做法:
①将软件分类。例如:字处理,电子表格,数据库,图形处理,游戏等。从每种类型中选择部分测试软件
②按软件的流行程度选择较流行的软件
③按年份,选取一定年份内的程序和版本