为了准备ISTQB认证,我发现他们实际上把静态分析称为静态测试,而一些工程书籍将静态分析和测试区分开来,这是一种动态活动。我认为静态分析不是真正意义上的测试,因为它不测试,它检查/验证。但我很想听听这里真正的专家的意见。谢谢
发布于 2012-11-09 10:41:38
在许多方面,你的问题是最近的一些讨论的必然结果,关于界限是在哪里。
例如
很简单,这条线取决于您所遵循的标准和生命周期。
就我个人而言,作为ISO/IEC 12207的倡导者,我把静态代码分析坚定地放在了验证阵营,因为它是一个评审活动,而动态分析是一个测试活动,因此是一个验证阶段。
顺便说一句,我从来没有听说过SCA被称为静态测试,所以我搜索了.维基百科将其定义为SCA的同义词。我更喜欢使用术语静态分析,并限制测试,以涵盖实际的执行。
我对ISTQB不太熟悉,所以我不能为你划出具体的认证线。
发布于 2013-03-24 01:17:49
软件测试的传统定义之一是执行程序,目的是查找bug。例如,这就是格伦·迈尔斯的定义。在测试计算机软件时,我们基本上遵循了这个定义。我仍然看到了这一点--例如,维基百科说:“测试技术包括但不限于为了发现软件错误(错误或其他缺陷)而执行程序或应用程序的过程。”
根据该定义,静态分析不能进行测试,因为它分析代码而不执行它。
我目前使用的定义是,为了了解与质量相关的信息,测试是对软件产品或服务的经验调查。(例如,请参阅BBST课程(我为BBST提供的免费课程视频在http://www.testingeducation.org)。
根据这个定义,静态分析可能是测试。如果您认为SCA是一个经验活动(换句话说,类似于运行一个实验),那么您应该认为SCA将在我的定义下进行测试。相反,如果您认为SCA更像理论分析而不是运行实验,那么您应该认为SCA不是测试。
我个人没有意见。我在编写代码时使用SCA,我觉得这是我在编程时所做工作的一部分。感觉不像是测试。但是我也做了很多单元测试和监视单元测试的代码覆盖,当我这样做的时候,这也感觉像是集成编程活动的一部分,而不是测试。主要而言,我不在乎人们是否调用SCA (或单元测试)测试。对我来说,更重要的问题是他们是否做过,如果做了,他们是否擅长。
还有其他几种被广泛使用的软件测试定义。有些人(和一些组织)坚持他们有一个真正的定义。我想这是他们的真命天子。但是有足够的不同的真实定义,我发现接受多样性是生活的一个事实,并通过问他们说事情的时候他们的意思是什么而与他们一起工作更有用。
因此,根据您最喜欢的测试定义,SCA是否正在测试(或不明确),但在其他人最喜欢的定义下,答案可能是不同的。如果你正在学习ISTQB考试,相关的定义是ISTQB的定义。我不记得了,但你可以在你的学习材料里查一查。
顺便说一下,静态分析是一个宽泛的术语。分析代码以检查某些特定编码错误(甚至是与指定编码样式不一致)的程序正在进行静态分析。分析代码以确定算法在理论上是否正确(以及实现是否符合该算法)的人或程序也是如此。后一种情况称为正确性的证明。这是静态分析的一个实例,而不是它的全部。
顺便说一句,正确性的证明不能证明运行的程序是正确的。他们可以证明某些类型的错误是不存在的。但是,如果分析源代码(例如用Java编写的代码),则没有分析实际运行的代码,因为Java被编译器转换为其他代码。此外,您不知道这些Java代码将如何与内存管理器、打印机驱动程序、视频显示等交互。这些交互可能导致程序失败,但静态分析将对它们视而不见。另一类日益常见的风险涉及多线程执行。看上去像是一个线性的命令序列,可以部分并行地执行。有时,事情会以意想不到的顺序执行(错误的事情会先完成,因此可能内存位置有过时的信息或信息不应该放在那里),结果就是失败,即使它不会在另一台计算机上发生故障。最后,我从来没有见过一个无错误规范,所以证明某些代码完全符合规范的观点并不能保证程序是无错误的。
所以..。形式分析是有用的,但它不能取代所有(其他类型的)测试。
发布于 2012-11-09 12:50:09
我同意,我不认为静态分析是测试。静态分析比测试更强大,因为它是一种形式上的证据,证明某一段代码符合其规范。因此,它保证一段代码对所有输入都做它应该做的事情。换句话说,它可以保证没有错误。
另一方面,测试是在有限数量的不同输入上进行的。因此,它只能表示错误的存在,而不是错误的缺席。这是静态分析和测试的最大区别。
然而,由于一阶逻辑的不完备性,对所有程序进行静态分析是非常困难、耗时和根本不可能的。
https://softwareengineering.stackexchange.com/questions/175252
复制相似问题