目录
|
软件有效性验证是对所开发出的产品与用户的期望做一致性检验的过程。因此,软件的验证不同于简单的正确性检验。
(1)软件检验,即是否在正确地建立一个产品。
(2)软件有效性验证,即是否在建立一个正确的产品。
这样的一个定义似乎仅仅是文字游戏,但是却从本质上刻画了二者的区别。
软件检验就是要检查所实现的软件是否符合它的规格描述。应该说这样的检查只考虑软件与需求阶段得到的软件规格说明书的一致性。而有效性验证却是一个更宽泛的过程,包括对软件是否满足用户的需要进行检验。很显然,检验需求规格说明书与检验客户需求是明显不同的事。
软件检验和有效性验证的费用很高,对于大型系统尤其如此。因此,认真并尽早规划软件检验和有效性验证能获取较高的收益。
在软件的检验和验证过程中,不可避免地会发现系统中存在的缺陷并修正这些缺陷。排除缺陷的过程就是一个调试的过程,这一过程通常会与其他软件检验和有效性验证活动交叉进行。但是,测试和调试本质上是两个不同的过程。检验和有效性验证是在证明一个程序存在缺陷,而调试却是定位和修改缺陷的过程。
调试过程是一项复杂的任务,充满了艰巨的脑力劳动。图1所示为调试过程的示意图。
定位错误并不是一个简单的过程,因为程序失败的位置通常并不是错误的真实位置,需要调试人员做大量的额外工作来确定错误的根源。经验在定位和设计修复错误方案时具有重要的意义。
错误修复后需要重新审查程序并执行先前能发现错误的测试过程,这一环节就是回归测试。回归测试的目的是检验错误是否被正确地修复,即修复过程是否引入了新的错误。
软件的检验和有效性验证是软件生命周期中跨越阶段的一个过程,从需求评审、设计评审、代码检查到软件测试。在软件开发的每一个阶段都有软件验证的活动在进行。
根据软件检验和有效性验证是否需要有可运行的程序,将软件验证的方法分为两大类。
(1)静态检查,即对系统生命周期各个阶段产生的文档进行分析和检查。这个检查活动贯穿软件开发过程的每一个阶段。这个阶段虽然可以采用一些对文档进行自动分析的技术,但本质上是一种静态检查,无须执行系统。
(2)动态检查,即软件测试。通过使用事先设定好的测试数据对软件的实现进行运行检查,观察软件的运行结果与预期结果是否一致来判断程序中存在的缺陷。测试是软件验证中的动态技术,需要有可动态运行的系统或原型。
图2所示图中给出了静态检查和动态测试与软件过程各阶段的关系,箭头表明检验技术可以在哪个阶段位用。