有两种安全要求:
- 安全功能(例如密码应该被散列)
- 安全特性(例如无 SQL 注入)
安全功能绝对应该有一个精确的测试用例,这些都是可以测试的。
另一方面,“安全功能”要求实际上要求否定:无注入、无XSS、无溢出、无后门......
虽然可以测试这些以证明不满足要求,但您无法证明它们是. “你不能在……中测试安全性”
就像任何其他非功能性需求一样,单个测试用例不足以证明需求。例如正常运行时间要求:“系统将同时支持 2000 个用户,1 周内不会崩溃”。你能证明这不会发生吗?不,您可以针对它进行测试,如果它失败了,您会知道的,但您不能肯定不同 在不同的情况下,一组用户不会导致它崩溃。
更好的是额外的要求(正如@beth所说)进行审查,并且要求应该围绕审查本身:谁可以做,什么类型的审查,需要修复什么等。
重要的部分是要明确您定义的要求类型:消极的、“保证”类型的安全功能要求,或积极的安全功能。
后者可以有常规的测试用例,前者可以通过不同的方式进行检查。如果您不确定它是哪种类型的需求,您可能需要进一步分解它。
(例如,“密码必须是安全的”应翻译为:“密码应存储为加盐散列”、“散列应为加密安全算法”、“数据存储上的强 ACL”、“不要在电子邮件或网页中公开密码“等等。其中一些是功能特性,一些是非功能性安全需求。有些可以通过测试用例进行测试,有些可以通过 pentest 进行测试,还有一些可以通过代码审查进行测试。