什么是软件测试?
测试就是寻找bug发现缺陷。
1.测试定义
软件测试就是验证软件产品特性是否满足用户需要
测试人员验证软件是不是符合用户的需求
验证的标准是什么=>需求
2.为什么要有测试
测试是为了保证软件质量
3.软件测试的特点
软件测试只是一种样本试验,具有不可穷尽性
软件测试发展史
软件测试的发展史可以追溯到计算机技术的早期阶段,随着计算机技术的不断发展和软件规模的不断扩大,软件测试也逐渐从简单的调试演变为一个独立的、专业的领域。以下是软件测试发展史的详细概述:
一、早期阶段(20世纪50年代前)
- 背景:在计算机诞生之初,由于技术水平的限制,软件规模较小,且主要由科学家或技术人员编写和调试。
- 特点:此时的软件测试尚未形成独立的概念,主要以调试为主,即在编程过程中发现并修正错误。
二、调试为主的阶段(20世纪50年代)
- 背景:随着计算机的普及和应用范围的扩大,软件规模和复杂性逐渐增加。
- 特点:这一阶段的软件测试仍然以调试为主,但已经开始有人思考如何证明程序满足了需求。
三、证明为主的阶段(1957年-1978年)
- 关键事件:
- 1957年,Charles Baker在《软件测试发展》一书中首次对调试和测试进行了区分,提出了测试的概念。
- 调试(Debug):确保程序做了程序员想让它做的事情。
- 测试(Testing):确保程序解决了它该解决的问题。
- 特点:软件测试逐渐从调试中分离出来,成为一个独立的阶段。测试的主要目的是确认软件是否满足需求,即“做了正确的事情”。
四、破坏为主的阶段(1979年-1982年)
- 特点:这一阶段的软件测试开始注重通过破坏性的测试来发现软件中的错误和缺陷。测试人员会尝试各种可能的输入和边界条件,以尽可能多地发现软件中的问题。
五、评估为主的阶段(1983年-1987年)
- 关键事件:
- 1983年,美国国家标准局(National Bureau of Standards)发布“Guideline for Lifecycle Validation, Verification and Testing of Computer Software”,提出了验证(Verification)和确认(Validation)的概念。
- 这一时期,软件测试开始被应用在整个软件生命周期中,并不仅仅局限于编码完成后。
- 特点:软件测试不再仅仅是发现错误的过程,还包括对软件质量的评估。测试人员会结合需求分析、设计文档等资料,对软件进行全面、系统的测试。
六、预防为主的阶段(1988年至今)
- 特点:
- 随着敏捷开发等新型开发模式的兴起,测试驱动开发(TDD)、持续集成(CI)等理念逐渐被接受和应用。
- 测试不再仅仅是编码完成后的验证和确认工作,而是贯穿于整个软件开发生命周期中。
- 预防为主的思想逐渐成为主流,即尽可能在软件开发的早期阶段就发现并修复问题,以降低后期修复的成本和风险。
- 技术发展:
- 自动化测试工具的出现大大提高了测试效率和准确性。
- 性能测试、安全测试、兼容性测试等非功能测试逐渐成为软件测试的重要组成部分。
- 灰盒测试、敏捷测试等新型测试方法不断涌现并得到广泛应用。
软件测试和研发的区别
1.工作内容
开发:通过各种编程语言去实现软件的需求
测试:写测试用例,执行测试,自动化测试,性能测试,开发测试平台
通过各种手段去验证软件是否符合用户需求
2.技术上区别
开发:技术要求(深,精)
测试:技术要求(广)
测试和调试的区别
测试和调试在软件开发过程中是两个不同的阶段,它们各自承担着不同的职责和目标。以下是测试和调试之间的一些主要区别:
1. 目标与目的
- 测试:其主要目的是找出软件中存在的错误或缺陷。测试人员会设计并执行各种测试用例,以确保软件按照预定的规格和需求运行。测试的目标是验证软件的正确性、可靠性和性能。
- 调试:调试的目的是定位并修复软件中的错误。当测试发现错误后,开发人员会进行调试,通过分析错误现象、查看日志和源代码等方式,找出错误的根本原因并进行修正。
2. 执行者
- 测试:通常由专门的测试人员执行。他们具备测试知识和技能,能够设计并执行有效的测试用例,评估软件质量。
- 调试:主要由开发人员完成。开发人员熟悉软件的代码和逻辑,能够更准确地定位问题并进行修复。
3. 方法与过程
- 测试:测试过程是有计划的,可以预先制定测试计划、设计测试用例,并按照测试计划执行。测试人员会使用各种测试方法和工具来模拟用户操作,检查软件的各个功能和性能点。
- 调试:调试过程往往更加灵活和随机。开发人员会根据错误现象和日志信息,逐步缩小问题范围,定位到具体的代码行或逻辑错误。调试过程可能需要多次尝试和修正,直到问题得到彻底解决。
4. 已知与未知
- 测试:测试通常从一个已知的条件开始,使用预先定义的过程,并期望得到预知的结果。测试人员会根据测试计划和测试用例来执行测试,并验证软件是否符合预期。
- 调试:调试则从一个未知的条件开始,因为错误的原因和位置通常是未知的。开发人员需要通过分析和推理来逐步揭示错误的本质,并找到解决方案。
5. 阶段与周期
- 测试:测试贯穿于软件开发的整个生命周期,包括需求分析、设计、编码、集成、系统测试等各个阶段。测试人员会在不同的阶段执行不同类型的测试,以确保软件质量。
- 调试:调试主要集中在编码阶段和集成阶段。当开发人员编写完代码或进行模块集成后,如果出现问题,就会进入调试阶段进行错误修复。
6. 进度与可度量性
- 测试:测试过程可以预先计划,并可以制定详细的测试计划和进度表。测试人员可以根据测试计划和进度表来评估测试工作的完成情况。
- 调试:调试过程往往难以预测和计划。由于错误的原因和位置未知,调试的进度和持续时间可能会受到多种因素的影响,因此难以进行准确的度量。
优秀的软件测试人员应具备的素质
优秀的软件测试人员是确保软件质量、稳定性和用户体验的关键角色。他们不仅需要具备扎实的技术能力,还需要拥有良好的职业素养和软技能。以下是一些优秀的软件测试人员应具备的素质:
1. 扎实的测试理论知识
- 熟悉软件测试的基本原理、方法论(如黑盒测试、白盒测试、灰盒测试)、测试类型(如单元测试、集成测试、系统测试、验收测试等)和测试周期。
- 理解软件测试的生命周期(STLC)和测试管理流程。
2. 强大的技术能力
- 熟练掌握至少一种编程语言(如Java、Python),以便编写自动化测试脚本和进行必要的代码审查。
- 熟悉自动化测试工具(如Selenium、Appium、JMeter、Postman等)和测试管理工具(如Jira、TestRail、QC等)。
- 了解数据库基础,能够进行SQL查询和数据库测试。
- 对操作系统、网络、硬件及相关的IT基础设施有一定了解。
3. 敏锐的洞察力与细致入微的观察力
- 能够快速识别软件中的潜在问题和缺陷,包括性能瓶颈、安全漏洞等。
- 善于从用户的角度思考问题,预见用户可能遇到的各种使用场景。
4. 良好的问题解决能力
- 遇到问题时,能够迅速定位并分析问题原因,提出有效的解决方案。
- 能够独立或在团队中协作,完成复杂问题的调试和修复工作。
5. 优秀的沟通能力和团队合作精神
- 能够与开发团队、产品经理、项目经理等有效沟通,清晰表达测试需求、测试结果和问题。
- 在团队中积极参与,乐于分享测试经验和知识,促进团队整体能力的提升。
6. 持续学习的态度
- 关注软件测试领域的新技术、新工具和新方法,保持学习的热情和动力。
- 不断提升自己的专业技能和综合素质,以适应不断变化的测试需求和技术环境。
7. 耐心和责任心
- 软件测试工作往往繁琐且重复,需要保持高度的耐心和毅力。
- 对测试结果负责,确保每一个测试用例都得到充分执行和验证,不遗漏任何潜在问题。
8. 批判性思维和创新能力
- 能够独立思考,对测试过程和结果提出质疑和改进建议。
- 勇于创新,尝试新的测试方法和工具,以提高测试效率和效果。