每个计算机系统在某个时候都容易受到攻击,经常被应用程序代码错误或错误引入系统。尽管现代计算系统和网络往往高度复杂,但它们通常依赖于与系统和用户建立网络连接并交换数据,而这些系统和用户不能全部由单个组织、公司、民族国家等控制。由于缺乏整体控制,再加上复杂性,因此很难尽可能安全地实施任何类型的系统。

简单地说,没有一个有用的系统可以100安全。但是,在安全控制和可用性之间找到适当的平衡只能通过了解漏洞如何栩栩如生以及如何解决这些漏洞来完成。毋庸置疑,安全性是限制攻击者利用软件的基本机制。但是,现代应用程序面临着几个安全挑战,如果不正确解决这些挑战,可能会在应用程序中注入严重的缺陷。虽然测试可以在质量保证中发挥重要作用,但它具有一系列不利条件,可能不利于企业的发展。

让我们首先研究一下今天测试专业人员面临的一些挑战:

第三方代码: 当今的应用程序是通过不同来源构建的不同组件的集合,包括内部,外包,开源,商业构建和其他。由于快速,低成本生产软件的市场压力,软件行业正在使用第三方开发的很大一部分代码。根据安全供应商Veracode的一项研究,应用程序中存在第三方代码对公司来说是一个严重的安全风险。第三方库中的错误可能导致主机应用程序整体变得脆弱。第三方代码中的安全漏洞暴露了严重的担忧,因为这些漏洞会影响大量应用程序。

动态安全策略: 信息安全策略指定了组织采用的一组策略,以保护其管理层同意的信息。它清楚地描述了不同的当事方及其在不同级别上的信息的各自部分。信息安全策略文档包括策略的范围,信息的分类,安全处理每个类别的信息的管理目标等。在传统系统中,这些安全策略本质上是静态的,即程序员只能在编译时指定安全策略。但是,现代系统与外部环境相互作用,在外部环境中,安全策略无法预先知道并无法应用。因此,对于这样的情况,安全策略本质上是动态的,例如,根据通过外部环境接收的消息的类型来决定用户的权限。因此,一种机制本质上是基于对环境的动态观察,允许在运行时做出对安全至关重要的决策。

软件复杂性: 由于行业中的普遍做法,软件-作为过程和产品-变得越来越复杂。原始软件的功能有限,用户有限,但是由于技术的进步和对软件的依赖性增加,该软件不仅非常复杂,而且规模巨大,并且可以扩展操作环境。复杂的软件具有更多的代码行,并且在模块之间以及与环境之间具有更多的交互。It系统的复杂性和功能不断增加,使其成为难以防御的剥削对象,从而形成了适合对手利用的目标。

鉴于这些挑战,QA从业人员越来越难以适应不断变化的技术格局。测试成为当今企业的一个问题的一些原因包括:

1.耗时: 在当今快节奏的产品交付周期中,QA的核心问题在于它根本不够快。企业需要具有竞争力,才能在有限的时间内交付最佳产品,并且测试过程通常很耗时。

2.人工测试下降: 传统的测试过程急剧下降,尤其是在开发了更多的 “敏捷” 方法和测试自动化技术之后。人们普遍认为,自动化测试优于手动测试。但是,真的吗?

虽然自动化具有许多优点,并有助于生产可靠的系统,提高测试工作的质量,减少测试工作和最小化时间表; 然而,手动测试也是至关重要的,并且在某些情况下通常是 “不可替代的”。毫无疑问,手动软件测试的结果质量会因许多因素而有很大差异。但是,可以轻松避免手动测试的不足。

3.测试自动化的问题: 测试自动化在提高结果质量,加快过程速度,增加测试覆盖率和最大程度地减少结果可变性方面为软件测试过程提供了巨大的好处。然而,自动化不是灵丹妙药; 它伴随着一些问题。这些包括:

不确定性和缺乏控制: 测试自动化的一个非常普遍的经验是,很难知道发生了什么。也就是说,到底在测试什么,测试开发和测试执行的进度如何。这种不确定性使得测试自动化成为一项有风险的投资。可扩展性和可维护性差: 软件测试自动化可能是一项昂贵的投资。如果操作不当,它可以解决手动测试执行问题,但会产生新的测试自动化生产问题。方法差和测试质量令人失望: 测试自动化方法可能具有较差的可重用性,通常是由于不良的自动化框架或体系结构。如果不能重复使用它们,则开发和维护测试自动化脚本的成本也无法分散到整个测试中,从而导致总体成本更高。

技术与人员问题: 没有多少工具可以同时满足您的所有需求并为您的组织负担得起。通常出售测试工具时,声称它们提供 “轻松” 的自动化,包括某种形式的复杂记录和回放。但是,隐含的假设是,测试人员-甚至是没有工程背景的测试人员-自动执行自己的测试。实际上,随着系统的变化,大多数测试人员将无法充分维护测试。

软件测试现在面临的挑战需要一个集成的解决方案; 这意味着新的解决方案必须与所有传统解决方案一起运行。但是,不应为了寻找新的东西而放弃发达和实践良好的概念。