【测试】开发模型和测试模型

news/2025/1/31 15:08:33/

一、初步认识测试

概念

        测试是指使用人工或自动手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。它是对软件规格说明、软件设计和编码的最后复审,是软件质量保证的关键步骤。

软件测试就是 验证软件产品的特性是否满足用户的需求

岗位

软件测试开发工程师

        工作重心为专注于开发自动化测试工具、测试框架和平台。关注质量提升和测试的覆盖率。

测试工程师

        与软件测试开发工程师关系密切,且把用户放在第一位来思考。组织整体测试实践,并进行分析总结,驱动测试执行,构建端到端的自动化测试

软件测试开发工程师和测试工程师的区别

相同点

1、实际上都负责测试方面的工作

2、都对产品的质量负责,保障产品的质量

不同点

        测试开发的开发并不是指业务的开发,这里的开发是指 开发测试效率工具 ,通过效率工具来提升测试效率和测试质量,比如我们的自动化、性能测试等就属于效率工具

调试与此测试的区别

纬度调试测试
目的调试的任务是定位并且解决程序中的问题测试的任务是发现程序中的缺陷
参与角色由开发人员完成主要有测试人员和开发人员来执行,黑盒测试主要由测试人员完成,单元/集成测试主要由开发人员执行
执行阶段开发/编码阶段测试贯穿整个软件开发生命周期

测试岗位为什么还要学习开发知识

1、相关知识其实是高度互通的,惹事人员也需要编写代码,如自动化测试,性能测试,开发测试效率工具,这需要测试人员看懂代码,了解开发框架

2、掌握好开发知识能够提高软件测试的质量,比如可以更好查看代码中的数据走向能够更好的从代码层面去发现问题

优秀的测试人员应该具备的能力

1、综合能力(沟通能力,快速学习能力,开发能力,文字表达能力)

2、掌握自动化测试技术

3、测试用例的设计能力

4、发散的探索性思维

5、兴趣

6、具备强烈的责任感和压力

*为什么走测试岗位不走开发岗位

从岗位工作性质分析+个人性格/爱好+个人职业规划三个方面阐述。

1)个人兴趣爱好:从性格和兴趣出发,测试工作需要测试人员具备良好的耐心、细心,接触了测试内容后对测试工作产生浓厚兴趣

2)岗位性质:不管是测试还是测试开发都统称为测试人员,测试人员主要以保障项目测试质量为主,通过开发一些测试效率工具等等来提高测试效率。而软件开发主要以业务编码为求。

3)个人职业规划:大学期间就树立了走测试方向的目标,今后将继续提高测试和开发能力,争取在测试岗位发挥自己的优势,出色的完成工作

二、需求

从软件开发的角度来看,需求是整个开发过程的基础,它连接着用户期望和最终交付的软件产品

用户需求

        用户需求是指用户在使用软件系统时所期望实现的目标、功能和体验,反映了用户解决实际问题或完成特定任务的需要,通常以较为自然、非技术的语言表达。

软件需求

        软件需求是将用户需求进行分析、提炼和转化后,以技术化、规范化的方式描述的软件系统应具备的特性和功能,是软件开发的依据。

举例

用户需求:平台支持使用邮箱完成注册

软件需求:

三、开发模型

生命周期

软件生命周期(SDLC)是从构思到退役的全过程,主要包括以下阶段:

  1. 需求分析:明确需求,输出需求文档。

  2. 系统设计:设计架构,输出设计文档。

  3. 编码实现:编写代码,进行单元测试

  4. 测试:全面测试,修复缺陷。

  5. 部署:上线运行,用户培训。

  6. 维护:修复问题,优化性能。

  7. 退役:停止使用,归档数据。

常见模型有瀑布模型(线性)、迭代模型(分阶段)、敏捷模型(快速迭代)和螺旋模型(强调风险)。选择合适的模型对项目成功至关重要。

瀑布模型

瀑布模型是软件开发中最经典的生命周期模型之一,采用线性顺序的开发方式,每个阶段必须完成后才能进入下一个阶段。以下是瀑布模型的主要特点、阶段和优缺点:


主要特点

  1. 线性顺序:阶段严格按顺序执行,每个阶段只执行一次,前一阶段完成后才能进入下一阶段。

  2. 文档驱动:每个阶段都有明确的文档输出,作为下一阶段的输入。

  3. 强调计划:需求在早期阶段明确,后续阶段尽量避免变更。

  4. 适合需求明确的项目:适用于需求稳定、技术成熟的项目。


优点

  1. 结构清晰:阶段划分明确,易于理解和管理。

  2. 文档完备:每个阶段都有详细文档,便于后续维护。

  3. 适合需求稳定的项目:在需求明确且不变的情况下,效率较高。

  4. 易于控制进度:每个阶段有明确的交付物,便于跟踪进度。

它同时是其他模型的基本框架


缺点

  1. 缺乏灵活性:需求变更难以处理,后期修改成本高。

  2. 风险较高:问题可能在后期才暴露,导致返工。

  3. 用户参与度低:用户只在需求分析和测试阶段参与,可能导致最终产品不符合预期。

  4. 不适合复杂项目:对于需求不明确或变化频繁的项目,瀑布模型效果较差。

测试后置
        前面各阶段遗留的风险推迟到测试阶段才被发现,导致项目大面积返工,失去了及早修复的机会,必须留有足够的时间给测试活动,否则导致测试不充分,将缺陷直接暴露给用户(产品质量差)
周期太长,产品很迟才能被看到和使用,可能会导致需求/功能过时


适用场景

  • 需求明确且稳定。

  • 技术成熟,风险较低。

  • 项目规模较小或复杂度不高。


总结

瀑布模型是一种经典的开发模型,适合需求明确、变更少的项目。它的结构清晰、文档完备,但缺乏灵活性,不适合需求频繁变化的项目。

增量模型

核心思想

  • 将软件系统划分为多个增量(模块或功能),每个增量都是一个完整的、可交付的部分。

  • 每个增量都经过完整的开发周期(需求、设计、编码、测试),并逐步交付给用户。

主要特点

  1. 分阶段交付:每个增量都是一个可用的子系统,用户可以逐步使用部分功能。

  2. 模块化开发:系统被划分为多个模块,每个模块独立开发。

  3. 适合需求明确的项目:整体需求在早期确定,增量按优先级开发。

  4. 用户早期受益:用户可以在早期阶段使用部分功能。

开发流程

  1. 需求分析:确定整体需求,划分增量。

  2. 增量开发:每个增量独立完成需求、设计、编码和测试

  3. 交付和集成:将每个增量交付给用户,并集成到系统中。

  4. 维护:修复问题并优化系统。

优点

  • 用户早期获得部分功能。

  • 分阶段交付降低风险。

  • 模块化开发易于管理。

缺点

  • 需要整体需求明确。

  • 增量之间的集成可能复杂。

  • 不适合需求频繁变化的项目。

适用场景

  • 需求明确且稳定。

  • 需要早期交付部分功能。

  • 系统可以模块化划分。


迭代模型

核心思想

  • 通过多次迭代逐步完善软件,每次迭代都包含完整的开发周期(需求、设计、编码、测试)。

  • 每次迭代都交付一个可运行的版本,用户反馈用于指导下一次迭代。

主要特点

  1. 渐进式开发:软件通过多次迭代逐步完善。

  2. 用户反馈驱动:每次迭代后用户提供反馈,指导后续开发。

  3. 灵活性强:适合需求不明确或可能变化的项目。

  4. 风险管理:通过迭代逐步降低风险。

开发流程

  1. 初始计划:确定迭代目标和范围。

  2. 迭代开发:完成需求、设计、编码和测试,交付一个可运行版本。

  3. 用户评审:用户评估当前版本,提供反馈。

  4. 下一迭代:根据反馈调整计划,开始下一次迭代。

优点

  • 灵活应对需求变化。

  • 用户反馈确保产品符合需求。

  • 逐步降低风险。

缺点

  • 需要频繁的用户参与。

  • 管理复杂度较高。

  • 可能增加开发成本。

适用场景

  • 需求不明确或可能变化。

  • 需要用户高度参与。

  • 复杂项目,风险较高。


增量模型 vs 迭代模型

特性增量模型迭代模型
核心思想分模块交付完整功能多次迭代逐步完善软件
需求变化需求明确且稳定需求可能变化
用户反馈用户早期使用部分功能用户每次迭代后提供反馈
风险管理分阶段交付降低风险迭代逐步降低风险
适用场景需求明确、模块化项目需求不明确、复杂项目

增量:是 逐块建造 的概念

迭代:是 反复求精 的概念


总结

  • 增量模型适合需求明确、模块化开发的项目,强调分阶段交付完整功能。

  • 迭代模型适合需求不明确或可能变化的项目,强调通过多次迭代逐步完善软件,用户反馈驱动开发。

螺旋模型

螺旋模型是一种结合了瀑布模型迭代模型优点的软件开发模型,强调风险管理渐进式开发。它通过多次迭代逐步完善软件,每个迭代周期都包含风险评估原型开发


主要特点

  1. 迭代开发:软件通过多次迭代逐步完善,每次迭代都包含完整的开发周期。

  2. 风险管理:每个迭代开始前都会进行风险评估,确保项目可控。(引入的目的:减少各阶段遗留的风险问题,避免将问题遗留在后面的阶段)

  3. 原型驱动:每个迭代可能包含原型开发,帮助验证需求和设计。

  4. 灵活性强:适合需求不明确或可能变化的项目。

  5. 用户参与度高:用户可以在每个迭代中提供反馈,确保最终产品符合需求。


优点

  1. 风险管理:每个迭代都进行风险评估,降低项目失败的可能性。

  2. 质量保证:各阶段的产品质量有保障。

  3. 灵活性高:适合需求不明确或可能变化的项目。

  4. 用户参与:用户可以在每个迭代中提供反馈,确保产品符合需求。

  5. 渐进式开发:通过多次迭代逐步完善软件,减少一次性开发的风险。

  6. 适合大型复杂项目:能够有效管理复杂项目的风险和不确定性。


缺点

  1. 成本较高:需要多次迭代和原型开发,可能增加开发成本。

  2. 管理复杂:需要频繁的风险评估和用户评审,管理难度较大。

  3. 依赖风险管理能力:如果风险评估不准确,可能导致项目失败。项目中可能存在的风险性与风险管理人员的技能水平有直接关系

  4. 不适合小型项目:对于需求明确、规模较小的项目,螺旋模型可能过于复杂。


适用场景

  • 需求不明确或可能变化。

  • 大型复杂项目,风险较高。

  • 需要用户高度参与和反馈的项目。

  • 技术不确定性较高的项目。


总结

螺旋模型是一种强调风险管理和迭代开发的模型,适合需求不明确、风险较高的复杂项目。它通过多次迭代和原型开发逐步完善软件,灵活性高,但管理复杂且成本较高。


敏捷模型 

敏捷模型(Agile Model)是一种以灵活性用户参与为核心的软件开发方法,强调快速响应变化、持续交付和团队协作。它通过迭代开发增量交付的方式,确保软件能够快速适应需求变化并满足用户需求。以下是敏捷模型的详细介绍:


核心原则

敏捷开发基于《敏捷宣言》(Agile Manifesto),其核心原则包括:

  1. 个体和互动高于流程和工具。  --强调高效的沟通

  2. 可工作的软件高于详尽的文档。  --强调轻文档,文档不应该作为工作验收的标准

  3. 客户合作高于合同谈判。  --主动及时地了解当下需求

  4. 响应变化高于遵循计划。  --能够主动迎接变化

敏捷模型的特点:轻文档,轻流程,重目标,重产出


主要特点

  1. 迭代开发:将开发过程划分为多个短周期(通常为2-4周),每个周期称为一个迭代冲刺(Sprint)

  2. 增量交付:每个迭代都交付一个可运行的软件版本,用户可以使用并提供反馈。

  3. 用户参与:用户或客户全程参与开发过程,确保产品符合需求。

  4. 自组织团队:团队自主分配任务,强调协作和沟通。

  5. 持续改进:通过定期回顾会议(Retrospective)不断优化开发流程。


Scrum 模型

Scrum 是敏捷开发中最流行的框架之一,专注于通过迭代开发团队协作快速交付高质量的软件。Scrum 强调透明性、检视和适应性,帮助团队在复杂项目中高效工作。以下是 Scrum 模型的详细介绍:


核心概念

  1. 迭代开发

    • 开发过程被划分为多个短周期,称为冲刺(Sprint),通常为 2-4 周。

    • 每个冲刺都交付一个可运行的软件增量。

  2. 自组织团队

    • 团队自主分配任务,强调协作和沟通。

  3. 持续改进

    • 通过定期回顾会议(Retrospective)不断优化开发流程。


三大支柱

  1. 透明性(Transparency)

    • 所有工作对团队成员和利益相关者透明,确保信息共享。

  2. 检视(Inspection)

    • 定期检查工作进展和成果,确保符合目标。

  3. 适应(Adaptation)

    • 根据检视结果及时调整计划和流程。


主要角色

  1. 产品负责人(Product Owner)

    • 负责定义产品需求,管理产品待办列表(Product Backlog)

    • 确定需求的优先级,确保团队开发最有价值的功能。

  2. Scrum Master

    • 负责确保团队遵循 Scrum 流程,解决障碍,促进团队协作。

    • 是团队的教练和服务型领导,而不是管理者。

  3. 开发团队(Development Team)

    • 负责实际开发工作,通常是跨职能团队(包括开发、测试、设计等)。

    • 团队自组织,自主分配任务。


关键工件

  1. 产品待办列表(Product Backlog)

    • 所有需求的优先级列表,由产品负责人维护。

    • 每个需求通常以**用户故事(User Story)**的形式描述。

  2. 迭代待办列表(Sprint Backlog)

    • 当前冲刺中要完成的任务列表,由开发团队从产品待办列表中选择。

  3. 增量(Increment)

    • 每个冲刺结束时交付的可运行软件版本,必须达到“完成”标准(Definition of Done)。


五个重要会议

  1. 冲刺计划会议(Sprint Planning)

    • product owner 负责讲解user story ,对其进行估算和排序,制定出这一期迭代要完成的story的列表,sprint backlog

  2. 迭代计划会议(Iteration planning)

    • 项目团队对每一个story进行任务分解,分解的标准是完成该story的所有任务,每个任务都有明确的负责人,并完成工时的初估计。

  3. 每日站会(Daily Scrum)

    • 每天召开的短会(通常 15 分钟),团队成员同步进展。

    • 每个成员回答三个问题:昨天做了什么?今天计划做什么?遇到什么障碍?

  4. 冲刺评审会议(Sprint Review)

    • 在冲刺结束时召开,向利益相关者展示本次冲刺的成果。

    • 收集反馈,调整 sprint backlog(产品待办列表)。

  5. 冲刺回顾会议(Sprint Retrospective)

    • 在冲刺评审会议后召开,团队总结本次冲刺的经验教训。

    • 讨论改进措施,优化开发流程,已达到持续改进的效果。


优点

  1. 快速交付:每个冲刺都交付可运行的软件增量。

  2. 灵活应对变化:通过定期评审和调整,快速响应需求变化。

  3. 团队协作:强调自组织和跨职能团队,提升效率。

  4. 持续改进:通过回顾会议不断优化流程。


缺点

  1. 依赖团队成熟度:需要团队成员具备较高的自组织能力和协作能力。

  2. Scrum Master 的角色关键:Scrum Master 的能力直接影响团队效率。

  3. 不适合所有项目:对于需求明确、规模较小的项目,Scrum 可能过于复杂。


适用场景

  1. 需求不明确或可能变化。

  2. 需要快速交付和用户反馈。

  3. 团队协作能力强,沟通顺畅。

  4. 复杂项目,风险较高。


敏捷中的测试

轻文档和快速迭代

  • 敏捷模型中强调轻文档,所以测试人员不应使用传统的Excel编写测试用例的方法,更多的是使用思维导图、探索性测试(强调自由度,设计和执行同时进行,根据测试结果不断调整测试计划)、自动化测试
  • 敏捷讲求合作,在敏捷项目组中,测试人员应多主动跟开发人员了解需求、讨论设计、一起0研究bug出现的原因。

总结

        Scrum 是一种以迭代开发和团队协作为核心的敏捷框架,适合需求不明确或可能变化的复杂项目。它通过短周期的冲刺、透明的沟通和持续的改进,帮助团队高效交付高质量的软件。然而,Scrum 的成功依赖于团队的成熟度和 Scrum Master 的领导能力。

四、测试模型

V模型

V模型是软件开发中一种经典的测试模型,它强调测试与开发的紧密结合,并将测试活动贯穿于整个软件生命周期。V模型是瀑布模型的扩展,通过将开发阶段与测试阶段一一对应,确保每个开发阶段都有相应的测试活动。以下是V模型的详细介绍:


核心思想

  • V模型将开发过程分为左侧的开发阶段右侧的测试阶段,形成一个“V”字形结构。

  • 每个开发阶段都有一个对应的测试阶段,确保软件在开发的每个环节都经过验证和确认。


V模型的阶段

左侧:开发阶段

  1. 需求分析

    • 明确用户需求,输出需求规格说明书(SRS)。

    • 对应的测试阶段:验收测试

  2. 系统设计

    • 设计系统架构、模块和接口,输出系统设计文档(SDD)。

    • 对应的测试阶段:系统测试

  3. 详细设计

    • 设计模块的详细逻辑、算法和数据结构,输出详细设计文档。

    • 对应的测试阶段:集成测试

  4. 编码实现

    • 根据设计文档编写代码,进行单元测试

    • 对应的测试阶段:单元测试

右侧:测试阶段

  1. 单元测试

    • 测试单个模块或组件的功能,确保代码符合详细设计。

    • 通常在编码阶段由开发人员完成。

  2. 集成测试

    • 测试模块之间的接口和交互,确保模块集成后能够正常工作。

    • 对应详细设计阶段。

  3. 系统测试

    • 测试整个系统的功能、性能和安全性,确保系统符合设计需求。

    • 对应系统设计阶段。

  4. 验收测试

    • 由用户或客户执行,验证系统是否满足需求规格说明书中的要求。

    • 对应需求分析阶段。


适用场景

  • 需求明确且稳定。

  • 项目规模较小或复杂度不高。

  • 技术成熟,风险较低。


总结

仅仅把测试作为编码之后的阶段,该模型的缺点同瀑布模型相同

        V模型是一种结构清晰、文档驱动的测试模型,适合需求明确且稳定的项目。它通过将开发阶段与测试阶段一一对应,确保软件在每个环节都经过验证和确认。然而,V模型缺乏灵活性,不适合需求频繁变化的项目。

W模型

W模型是软件开发中一种改进的测试模型,它是对V模型的扩展,进一步强调测试与开发的并行性早期测试的重要性。W模型通过将开发和测试活动更加紧密地结合,确保在每个开发阶段都有相应的测试活动,从而提高软件质量和开发效率。以下是W模型的详细介绍:


核心思想

  • W模型将开发和测试活动分为两条并行的路径,形成一个“W”字形结构。

  • 每个开发阶段都有一个对应的测试阶段,测试活动从需求分析阶段就开始,贯穿整个生命周期。

  • 强调早期测试持续验证,确保问题尽早发现和解决。


W模型的阶段

左侧:开发阶段

  1. 需求分析

    • 明确用户需求,输出需求规格说明书(SRS)。

    • 对应的测试活动:需求测试(验证需求是否完整、一致和可测试)。

  2. 系统设计

    • 设计系统架构、模块和接口,输出系统设计文档(SDD)。

    • 对应的测试活动:系统设计测试(验证设计是否符合需求)。

  3. 详细设计

    • 设计模块的详细逻辑、算法和数据结构,输出详细设计文档。

    • 对应的测试活动:详细设计测试(验证详细设计是否符合系统设计)。

  4. 编码实现

    • 根据设计文档编写代码,进行单元测试

    • 对应的测试活动:单元测试(验证代码是否符合详细设计)。

右侧:测试阶段

  1. 单元测试

    • 测试单个模块或组件的功能,确保代码符合详细设计。

    • 通常在编码阶段由开发人员完成。

  2. 集成测试

    • 测试模块之间的接口和交互,确保模块集成后能够正常工作。

    • 对应详细设计阶段。

  3. 系统测试

    • 测试整个系统的功能、性能和安全性,确保系统符合设计需求。

    • 对应系统设计阶段。

  4. 验收测试

    • 由用户或客户执行,验证系统是否满足需求规格说明书中的要求。

    • 对应需求分析阶段。


优点

  1. 早期测试测试活动从需求分析阶段就开始,确保问题尽早发现。

  2. 并行性:开发和测试活动并行进行,提高效率。

  3. 全面覆盖:每个开发阶段都有对应的测试活动,确保软件质量。

  4. 降低风险:通过持续验证,降低后期修复问题的成本。


缺点

  1. 复杂度高:需要更多的资源和时间进行早期测试

  2. 依赖文档:每个阶段都需要详细的文档,可能增加工作量。

  3. 不适合小型项目:对于规模较小的项目,W模型可能过于复杂。


适用场景

  • 需求明确且稳定。

  • 大型复杂项目,风险较高。

  • 需要高质量和高可靠性的软件。


总结

W模型是一种改进的测试模型,通过将开发和测试活动并行进行,确保在每个开发阶段都有相应的测试活动。它强调早期测试和持续验证,适合需求明确且复杂的大型项目。然而,W模型的复杂度较高,可能不适合小型项目。


http://www.ppmy.cn/news/1568179.html

相关文章

Pyecharts之特殊图表的独特展示

在数据可视化的世界里,除了常见的柱状图、折线图、饼图等,还有一些特殊的图表可以为我们带来独特的展示效果,帮助我们以更有趣、更直观的方式呈现数据。Pyecharts 为我们提供了多种特殊图表的绘制功能,本文将介绍象形图、水球图和…

【漫话机器学习系列】061.线性回归参数计算(Finding Linear Regression Parameters)

线性回归参数计算(Finding Linear Regression Parameters) 1. 简介 线性回归是一种基础的回归模型,用于通过一个或多个特征预测目标变量。其模型形式为: 其中: y:目标变量(因变量&#xff09…

tcp/ip协议通俗理解,tcpip协议通俗理解

TCP/IP协议(Transmission Control Protocol/Internet Protocol)的通俗理解可以从以下几个方面入手: 1. 互联网的语言 想象一下,全球有无数台电脑、手机、服务器等设备连接在一起,形成了一个庞大的网络,我…

HTML DOM 对象

HTML DOM 对象 引言 HTML DOM(文档对象模型)是现代网页开发的核心技术之一。DOM 将 HTML 或 XML 文档结构化,使其成为可编程的对象。通过 DOM,开发者可以轻松地操作网页内容、样式和结构。本文将详细介绍 HTML DOM 对象的相关知识,包括其概念、结构、操作方法以及在实际…

solidity基础 -- 可视范围

在 Solidity 编程语言中,可视范围(Visibility)用于控制合约中变量和函数的访问权限。这对于确保合约的安全性、模块化以及代码的可维护性至关重要。Solidity 提供了四种可视范围修饰符:public、private、external 和 internal。以…

万字长文总结前端开发知识---JavaScriptVue3Axios

JavaScript学习目录 一、JavaScript1. 引入方式1.1 内部脚本 (Inline Script)1.2 外部脚本 (External Script) 2. 基础语法2.1 声明变量2.2 声明常量2.3 输出信息 3. 数据类型3.1 基本数据类型3.2 模板字符串 4. 函数4.1 具名函数 (Named Function)4.2 匿名函数 (Anonymous Fun…

全面评测 DOCA 开发环境下的 DPU:性能表现、机器学习与金融高频交易下的计算能力分析

本文介绍了我在 DOCA 开发环境下对 DPU 进行测评和计算能力测试的一些真实体验和记录。在测评过程中,我主要关注了 DPU 在高并发数据传输和深度学习场景下的表现,以及基本的系统性能指标,包括 CPU 计算、内存带宽、多线程/多进程能力和 I/O 性…

六、深入了解DI

依赖注入是⼀个过程,是指IoC容器在创建Bean时,去提供运⾏时所依赖的资源,⽽资源指的就是对象. 在上⾯程序案例中,我们使⽤了 Autowired 这个注解,完成了依赖注⼊的操作. 简单来说,就是把对象取出来放到某个类的属性中。 关于依赖注…