【愚公系列】软考高级-架构设计师 078-软件测试
🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏
🚀前言
🔎1.软件测试的定义
软件测试是对软件系统或组件进行评估,以验证它们是否符合指定的需求,并找出软件中的缺陷。它是软件开发生命周期中的一个关键步骤,旨在确保软件的质量、功能和可靠性。
🔎2. 软件测试的目的
- 发现缺陷:检测软件中存在的错误、缺陷或漏洞。
- 验证和确认:确保软件系统按照预期的方式工作,并满足所有的需求和规范。
- 提高质量:通过反复测试和修复,提高软件的总体质量。
- 减少风险:通过提前发现并修复问题,减少软件在生产环境中出现故障的风险。
- 保证用户满意度:确保最终产品满足用户的需求和期望。
🔎3.软件测试的分类
-
按测试目标分类:
- 功能测试:验证软件的功能是否按照需求文档的描述正确实现。
- 非功能测试:评估软件的性能、可靠性、安全性、可用性等非功能性需求。
-
按测试级别分类:
- 单元测试:测试软件的最小可测试单元(通常是函数或方法)。
- 集成测试:测试多个单元组合后的行为,确保它们协同工作。
- 系统测试:对整个系统进行全面测试,验证系统的整体功能和性能。
- 验收测试:由最终用户或客户进行,确认软件是否满足其需求和期望。
-
按测试方法分类:
- 黑盒测试:测试人员不关注软件内部结构,仅根据需求文档和功能描述进行测试。
- 白盒测试:测试人员了解并使用软件内部结构和代码实现来设计测试用例。
- 灰盒测试:结合黑盒测试和白盒测试的方法,部分了解内部结构但主要关注功能和输出。
-
按测试执行时间分类:
- 静态测试:不执行代码,通过审查、分析和检查文档和代码发现问题。
- 动态测试:执行代码,通过运行软件来发现缺陷。
🔎4.软件测试的基本流程
- 需求分析:了解和分析测试需求,确定测试的范围和重点。
- 测试计划:制定详细的测试计划,包括测试策略、测试环境、测试工具、测试资源等。
- 测试设计:设计测试用例,编写测试脚本,准备测试数据。
- 测试执行:按照测试计划执行测试用例,记录测试结果。
- 缺陷管理:记录、跟踪和管理在测试过程中发现的缺陷,直到这些缺陷被修复和验证。
- 测试报告:生成测试报告,总结测试活动,评估软件质量,并提供改进建议。
🔎5.软件测试的工具和技术
- 测试管理工具:如JIRA、TestRail、Quality Center等,用于管理测试计划、用例和缺陷。
- 自动化测试工具:如Selenium、QTP、LoadRunner等,用于自动化执行测试用例。
- 性能测试工具:如JMeter、LoadRunner,用于测试软件的性能和负载能力。
- 静态分析工具:如SonarQube、Coverity,用于静态分析代码质量和安全性。
🚀一、软件测试
🔎1.测试原则
系统测试:为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试。
测试原则:
- 应尽早并不断的进行测试,比如V模型,从设计的时候就开始测试;
- 测试工作应该避免由原开发软件的人或小组承担;
- 在设计测试方案时,不仅要确定输入数据,而且要根据系统功能确定预期的输出结果;
- 既包含有效、合理的测试用例,也包含不合理、失效的用例;
- 检验程序是否做了该做的事,且是否做了不该做的事;严格按照测试计划进行;
- 妥善保存测试计划和测试用例;
- 测试用例可以重复使用或追加测试;
🔎2.测试方法
软件测试方法可分为静态测试和动态测试。
🦋2.1 静态测试
静态测试指被测试程序不在机器上运行,而采用人工检测和计算机辅助静态分析的手段对程序进行检测。静态测试包括对文档和代码的静态测试,具体方法包括桌前检查、代码审查和代码走查。这种方法能够有效地发现30%-70%的逻辑设计和编码错误。
-
桌前检查:
- 定义:在编写代码后,开发人员自行仔细查看代码,以捕捉可能的错误、逻辑问题或风格不一致的问题。
- 作用:这是个人层面的检查,有助于在代码提交前修复问题,提高代码质量。
-
代码审查:
- 定义:团队成员共同检查某个人编写的代码,通过集体评估代码质量,发现潜在问题,并确保代码符合团队的标准和最佳实践。
- 作用:提高代码的稳定性和可维护性。
-
代码走查:
- 定义:一种更广泛的审查实践,通常包括团队的开发人员、测试人员和其他相关人员。深入检查代码的各个方面,包括逻辑、性能和安全性。
- 作用:确保代码在整体上健壮、高效且符合预期要求。
通过采用静态测试方法,能够在代码运行之前发现和修复许多潜在问题,显著提高软件的质量和可靠性。
🦋2.2 动态测试整理
动态测试是指在计算机上实际运行程序进行软件测试。常用的测试方法包括白盒测试、黑盒测试、灰盒测试和自动化测试。
1、黑盒测试
黑盒测试关注于测试软件的功能(功能性测试),而不考虑内部实现细节。测试人员根据软件的需求规格和功能来设计测试用例,而不需要了解代码的具体结构。
- 定义:只观察软件的输入和输出,以确定软件是否按预期工作。
- 举例:
- 测试一个在线登录系统时,设计测试用例,包括输入不同的用户名和密码组合,然后观察系统的响应。验证是否成功登录、失败登录时是否有适当的错误提示等,而不考虑系统内部的代码结构。
2、白盒测试
白盒测试关注于测试软件的内部逻辑和代码结构(结构性测试),以确保代码按照预期方式执行。测试人员需要了解软件的代码,以设计测试用例,覆盖不同的代码路径和分支情况。
- 定义:检查代码,确保其执行符合预期,包括不同的代码路径和分支情况。
- 举例:
- 测试一个计算器应用时,检查代码,确保加法、减法、乘法和除法等操作都正确实现。编写测试用例,测试各种输入情况,例如正数、负数、小数等,以确保代码在不同情况下都能正确执行。
3、灰盒测试
灰盒测试结合了黑盒测试和白盒测试的方法。测试人员了解部分内部结构,但主要关注功能和输出。这种方法适用于需要部分内部知识的测试场景。
- 定义:结合内部结构和功能测试的优势,以提高测试覆盖率和效果。
3、自动化测试
自动化测试使用工具和脚本自动执行测试用例,提高测试效率和覆盖率。
- 定义:利用自动化工具编写和执行测试脚本,以减少人工测试的工作量和错误。
- 工具:如Selenium、QTP、LoadRunner等。
通过使用动态测试方法,可以在实际运行软件时发现和修复问题,确保软件的功能和性能符合预期,提高软件的质量和可靠性。
🔎3.测试阶段
🦋3.1 单元测试
- 定义:单元测试也称为模块测试,测试的对象是可独立编译或汇编的程序模块、软件构件或面向对象软件中的类(统称为模块)。
- 测试依据:软件详细设计说明书。
🦋3.2 集成测试
- 定义:集成测试的目的是检查模块之间,以及模块和已集成的软件之间的接口关系,并验证已集成的软件是否符合设计要求。
- 测试依据:软件概要设计文档。
🦋3.3 系统测试
-
定义:系统测试的对象是完整的、集成的计算机系统;测试的目的是在真实系统工作环境下,验证完成的软件配置项能否和系统正确连接,并满足系统/子系统设计文档和软件开发合同规定的要求。
-
测试依据:用户需求或开发合同。
-
主要内容:
- 功能测试:主要采用黑盒测试方法,验证软件功能是否符合预期。
- 健壮性测试:验证软件在异常或极端条件下的表现。
- 性能测试:包括响应时间、吞吐量、并发用户数和资源利用率等指标。
- 用户界面测试:验证用户界面的易用性和一致性。
- 安全性测试:确保软件安全,防止未经授权的访问和数据泄露。
- 安装与反安装测试:验证软件的安装和卸载过程是否顺利、无错误。
-
执行团队:系统测试通常由独立的测试团队执行,他们并不直接参与软件的开发过程。
🦋3.4 确认测试
确认测试主要用于验证软件的功能、性能和其他特性是否与用户需求一致。测试依据是需求文档。确认测试是软件或产品开发的最后一个阶段,在系统测试完成后进行。主要目标是确保软件或产品满足最终用户的期望和需求。根据用户的参与程度,确认测试通常包括以下类型:
-
内部确认测试:
- 定义:主要由软件开发组织内部按照软件需求规格说明(SRS)进行测试。
- 作用:确保软件在开发组织内部达到需求规格。
-
Alpha测试:
- 定义:用户在开发环境下进行测试。
- 作用:让用户提前体验软件,并反馈问题以便开发团队进行修正。
-
Beta测试:
- 定义:用户在实际使用环境下进行测试。通过此测试后,产品才能交付用户。
- 作用:在真实环境中测试软件的性能和稳定性,并收集用户反馈。
-
验收测试:
- 定义:针对SRS,在交付前由用户进行的测试。测试对象为完整的、集成的计算机系统。
- 作用:在真实的用户工作环境下,检验软件系统是否满足开发技术合同或SRS。验收测试的结论是用户确定是否接收该软件的主要依据。
🦋3.5 回归测试
回归测试的目的是在软件变更之后,验证变更部分的正确性和对变更需求的符合性,以及确保软件原有的、正确的功能、性能和其他规定的要求不受影响(即不能把其他好的模块改错)。
- 定义:测试软件变更后,确保新功能和修复的正确性,同时保证已有功能不受影响。
- 作用:确保每次软件变更后,系统依然稳定且符合预期要求。
🚀二、练习
🔎1.题目一
题目:
软件确认测试也称为有效性测试,主要验证( )。确认测试计划通常是在需求分析阶段完成的。根据用户的参与程度不同,软件确认测试通常包括( )。
选项:
-
主要验证什么
- A. 系统中各个单元模块之间的协作性
- B. 软件与硬件在实际运行环境中能否有效集成
- C. 软件功能、性能及其它特性是否与用户需求一致
- D. 程序模块能否正确实现详细设计说明中的功能、性能和设计约束等要求
-
包括哪些类型
- A. 黑盒测试和白盒测试
- B. 一次性组装测试和增量式组装测试
- C. 内部测试、Alpha、Beta和验收测试
- D. 功能测试、性能测试、用户界面测试和安全性测试
解析:
-
主要验证什么:
- A. 系统中各个单元模块之间的协作性:这通常属于集成测试的范畴,主要目的是确保各模块间的接口和协作正确。
- B. 软件与硬件在实际运行环境中能否有效集成:这更偏向于系统测试或硬件兼容性测试。
- C. 软件功能、性能及其它特性是否与用户需求一致:确认测试的主要目标是验证软件是否满足用户需求和期望,因此此选项是正确的。
- D. 程序模块能否正确实现详细设计说明中的功能、性能和设计约束等要求:这通常属于单元测试的范畴。
-
包括哪些类型:
- A. 黑盒测试和白盒测试:这是测试方法,而不是确认测试类型。
- B. 一次性组装测试和增量式组装测试:这是集成测试的方法。
- C. 内部测试、Alpha、Beta和验收测试:这些是确认测试的不同类型,依据用户的参与程度划分。因此此选项是正确的。
- D. 功能测试、性能测试、用户界面测试和安全性测试:这些是系统测试的内容,不是根据用户参与程度划分的类型。
答案:
- C. 软件功能、性能及其它特性是否与用户需求一致
- C. 内部测试、Alpha、Beta和验收测试
🔎2.题目二
题目:
软件测试一般分为两个大类:动态测试和静态测试。前者通过运行程序发现错误,包括( )等方法;后者采用人工和计算机辅助静态分析的手段对程序进行检测,包括( )等方法。
选项:
-
动态测试方法
- A. 边界值分析、逻辑覆盖、基本路径
- B. 桌面检查、逻辑覆盖、错误推测
- C. 桌面检查、代码审查、代码走查
- D. 错误推测、代码审查、基本路径
-
静态测试方法
- A. 边界值分析、逻辑覆盖、基本路径
- B. 桌面检查、逻辑覆盖、错误推测
- C. 桌面检查、代码审查、代码走查
- D. 错误推测、代码审查、基本路径
解析:
-
动态测试:
- 动态测试是通过运行程序发现错误的方法,通常包括:
- 边界值分析:测试输入数据的边界值,属于动态测试。
- 逻辑覆盖:如条件覆盖、分支覆盖等,属于动态测试。
- 基本路径测试:检测程序的所有独立路径,属于动态测试。
- 因此,选项 A(边界值分析、逻辑覆盖、基本路径)正确。
- 动态测试是通过运行程序发现错误的方法,通常包括:
-
静态测试:
- 静态测试是通过人工和计算机辅助静态分析的手段对程序进行检测的方法,通常包括:
- 桌面检查:开发团队成员或专家对代码进行人工检查。
- 代码审查:正式的检查活动,通常由一个团队来评审代码。
- 代码走查:开发人员逐行阅读代码,查找潜在错误。
- 因此,选项 C(桌面检查、代码审查、代码走查)正确。
- 静态测试是通过人工和计算机辅助静态分析的手段对程序进行检测的方法,通常包括:
答案:
- A. 边界值分析、逻辑覆盖、基本路径
- C. 桌面检查、代码审查、代码走查
🚀感谢:给读者的一封信
亲爱的读者,
我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。
如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。
我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。
如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。
再次感谢您的阅读和支持!
最诚挚的问候, “愚公搬代码”
- 点赞
- 收藏
- 关注作者
评论(0)