什么是软件测试?

  经典定义:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足涉及要求进行评估的过程。

软件测试的方法有哪些?

静态测试和动态测试,也可以依据测试过程中对程序内部实现细节的可见程度分为黑盒测试、白盒测试及灰盒测试,还可以依据执行测试过程的方式分为人工测试和自动化测试。

1. 静态测试

  定义:静态测试是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。

  方法:代码检查、静态结构分析、代码质量度量等。代码检查包括代码走差、桌面检查、代码审查等方式。主要检查代码和设计的一致性,代码对标准的遵循、可读性,代码逻辑表达的正确性,代码结构的合理性等方面。可以发现违背程序编写标准的问题,程序中不安全、不明确的部分,找出程序中不可移植部分、违背程序编程风格的问题,包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构检查等内容。

  优点:发现缺陷早、降低返工成本、覆盖重点和发现缺陷的概率高。

  缺点:耗时长、技术要求较高。

2. 动态测试

  定义:通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能。

  步骤:构造测试实例、运行程序、分析结果。

  阶段:单元测试、集成测试、系统测试、验收测试。

3. 黑盒测试

  定义:功能测试、数据驱动测试,完全不考虑程序内部实现,主要对软件界面和软件功能进行测试。

  方法:等价类划分、边界值分析、错误推测法、因果图法、判定表组成等。

  缺点:如果需求规格本身有误或外部特性设计有误,用黑盒测试方法是发现不了的。

4. 白盒测试

  定义:结构测试、逻辑驱动测试,根据程序内部的逻辑实现,设计相应的测试用例,对程序所有逻辑路径进行测试。

  方法:逻辑覆盖、循环覆盖、基本路径测试等。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖和路径覆盖。

  缺点:贯穿程序的独立路径数是天文数字,但即使每条路径都测试了仍然可能有错误。第一,穷举路径测试不能查出程序违反了设计规范,即程序本身是个错误的程序;第二,穷举路径测试不可能查出程序因遗漏路径而出错;第三,穷举路径测试可能发现不了一些与数据相关的错误。

5. 灰盒测试

  定义:介于黑盒测试和白盒测试之间对一种测试方式。多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。灰盒测试不像白盒那样详细、完整,但又比黑盒测试更关注程序的内部逻辑,常常是通过一些表征性的现象、事件、标志来判断内部的运行状态。

6. 人工测试

  定义:由测试人员手工逐步执行所有的活动,并观察每一步是否成功完成。

7. 自动化测试

  定义:把以人为驱动的测试行为转化为机器执行的一种过程。

软件生命周期是什么?

  软件生命周期是指软件的产生直到报废或停止使用的整个过程,包括定义及规划、需求分析、软件设计、编码实现、软件测试、运行维护6个阶段。

软件测试的生命周期是什么?

  测试计划——测试设计——测试实现——测试执行——测试评估

Bug的生命周期是什么?

  新建——提交——指派——确认——处理——验证——关闭

一个完整的软件测试流程是什么样的?

1. 测试计划

  需求评审,编写测试计划明确测试范围、测试资源准备(硬件、测试工具等)、团队工作安排和进度、交付物。

2. 测试设计

  根据需求文档、设计文档,从功能、性能、接口等多维度分析测试项、测试子项。

  编写测试方案,通过此文档明确测试环境、测试方法、测试重点、测试维度等测试策略。

3. 测试实现

  根据合适的用例设计方法,进行测试用例的设计和编写工作,完成所有被测试系统的测试用例设计工作。

  搭建测试环境、准备测试数据、开发测试工具或编写测试脚本。

4. 测试执行

  执行自己负责模块的测试用例,记录测试结果,提交测试缺陷。

  跟踪缺陷解决情况,进行回归测试。

  优化测试用例。

5. 测试总结

  测试报告主要包含:实际测试环境、测试过程数据的总结和分析、测试遗留缺陷处理、软件版本质量的评估、后续测试建议、测试结论。