软件测试基础

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件测试基础相关的知识,希望对你有一定的参考价值。

什么是Bug?

在我看来 BUG可以分为三种:错误、缺陷、故障、失效

    软件错误是指在软件生存周期内的不希望或不可接受的人为错误,其结果是导致软件缺陷的产生。
    软件缺陷是存在于软件(文档、数据、程序)之中的那些不希望或不可接受的偏差。其结果就是软件运行于某一特定条件时会出现软件故障,这时称软件缺陷被激活。
    软件故障是指软件运行过程中出现的一种不希望或不可接受的内部状态,此时若无适当措施加以及时处理,便产生软件失效。
    软件失效是指软件运行时产生的一种不希望或不可接受的外部行为结果。

错误、缺陷、故障、失效 这几种bug的的分类在很多时候同样可以用来粗略的区分bug的优先级。 不过还是需要细分才能具体确定



什么是软件测试?为什么要进行软件测试?

软件测试:它应该是一种行为。检查软件的正确性,完整性,安全性和质量的过程。类似于流水线上的质检员。
换句话说,软件测试是一种实际输出与预期输之间的审核或者比较过程。
软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。

软件测试的目的:

软件测试基于不同的立场,存在着两种完全不同的目的。从用户的角度出发,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑用户是否可以接受该产品。而从软件开发者角度出发,则希望测试成为表明软件产品不存在错误的过程,验证该软件已正确地实现了用户需求,确立人们对软件质量的信心。

 

软件测试的原则是什么?

1)应该尽早地和不断地进行软件测试。由于原始问题的复杂性,软件的复杂性和抽象性,软件开发各个阶段的多样性,以及参加开发各种层次人员之间的配合关系等因素,使得开发的每个环节都可能产生错误。所以不能把软件测试看成是软件开发的独立阶段,而应该把它贯穿到软件开发的各个阶段中。坚持软件开发的各个阶段的技术评审,这样才能在开发过程中尽早发现和预防错误,把软件错误尽量在早期发现,杜绝某些隐患、提高软件质量。

软件测试不光是有测试人员来完成的,很多部门很多人员都可能会参与其中,举个简单的例子:开发人员需要做单元测试、开发之间需要联测、产品的一个确认性测试(是否满足自己的需求)、用户的使用性测试(终端用户在使用过程中,也会发现很多的问题,问题的本身可能不是程序的缺陷,而是产品的易用性,产品的友好型等等  用户的行为在软件测试中也有专门的测试类别,我们会在后面的介绍中指出)

(2)测试用例应该由测试输入预置条件和与之对应的预期输出结果这两部分组成。测试之前应该根据测试要求正确选取需要执行的测试用例。

(3)程序员应该避免检查/测试自己的程序。测试工作需要严格的作风,客观的态度和冷静的情绪。人们常常由于各种原因具有一种不愿否定自己工作的心态,认为揭露自己程序中的问题总不是一件愉快的事。这一心态就成为测试自己程序的障碍。另外,程序员对软件规格说明理解错误而引入的错误则更难发现。如果由别人来测试程序员编写的程序,可能会更客观、更有效、并且等容易取得成功。要注意的是,这点不能和程序调试相混淆。调试由程序员自己来做可能更有效。测试人员应该持有怀疑的态度,怼天怼地怼自己。 

(4)在设计测试用例时,应该包括合理的输入条件和不合理的输入条件。合理的输入条件是指能够验证程序正确的输入条件,而不合理的输入条件是指异常的临界的,可能引起问题异变的输入条件。在测试程序时,人们往往更多的考虑合法的和期望的输入条件,而忽略了不合法和意想不到的输入条件。事实上,软件在投入运行之后,用户的使用往往不遵循事先的约定,使用了一些意外的输入。如果开发的软件遇到这种情况时不能做出适当的反应,给出相应的信息,那么就容易产生故障,轻则产生错误的结论,重则导致软件失效。因此软件系统处理非法命令的能力在测试时也必须考虑。用不合理的输入条件测试程序时,往往比用合理的输入条件进行测试能够发现更多的错误。

(5)充分注意程序测试中的群集现象。测试中不要以为找到程序中的几个错误,问题就已经解决,不需要继续测试了。经验表明,测试后程序中残存的错误数目与该程序中中已发现的错误数目或检错率成正比。根据这个规律,应当对错误群集的程序段进行重点测试,以提高测试投资的效益。在测试软件程序时,若发现的错误越多,则残存在程序中的错误数目可能就越多,这种错误群集性现象,已为许多程序的测试实践所证明。例如美国IBM公司的OS/370操作系统中,47%的问题仅与该系统4%的程序模块有关。这种现象对测试很有用。如果发现某一程序模块比其它的程序模块有更多的程序错误趋向时,则应该化更多的时间和代价测试这个程序模块。

(6)严格执行测试计划,排除测试的随意性。测试计划应包括:所测软件的功能,输入和输出,测试内容,各项测试的进度安排,资源要求,测试资料,测试工具,测试用例的选取,测试的控制方式和过程。系统的组装方式,跟踪规程,以及回归测试的规定等和测试结束准则。

(7)应对每一个测试结果做全面检查。这是一条最明显的原则,但常常被忽视。有些错误的征兆在输出实测结果时已经明显地出现了,但如果不仔细地全面检查测试结果,就会使这些错误被遗漏掉。所以在设计测试用例时必须对预期的输出结果明确定义,对实测结果仔细分析检查,抓住征候,充分暴露问题。测试是一个长久的过程,每个版本可能会迭代的测试很多次。从拿到版本的冒烟测试 到 版本稳定的第一轮测试,第二轮测试、bug的回归测试、到最后的验收测试及预发布、现网的冒烟测试

(8)妥善保存测试计划,测试用例,出错统计和最终分析结果,为维护提供方便。

(9)所有的测试应该追溯到用户需求。正如我们所知,软件的测试目标在于揭示错误。而最严重的错误(从用户角度上看)是那些程序不能满足用户需求的错误。

(10)测试应该从“小规模”开始,逐步转向“大规模”即渐增式build测试(测试V图![image](http://www.mscto.com/uploads/allimg/090123/0I10H208-0.jpg))。

  

以上是关于软件测试基础的主要内容,如果未能解决你的问题,请参考以下文章

论如何设计一款端对端加密通讯软件

;~ 小部分AutoHotkey源代码片段测试模板2019年10月9日.ahk

C++ 解释器/控制台/片段编译器

201555332盛照宗—网络对抗实验1—逆向与bof基础

CTS测试CtsWindowManagerDeviceTestCases模块的testShowWhenLockedImeActivityAndShowSoftInput测试fail项解决方法(代码片段

VsCode 代码片段-提升研发效率