软件质量工程 09

敏捷环境中的软件质量工程(SQE in Agile Environments)

敏捷如何重新定义质量保证(Quality Assurance)

  • 质量是内在的,而不是最后检查出来的(Quality is built-in, not inspected at the end):质量贯穿整个开发过程,而非仅在最后阶段进行检查。
  • 早期且持续测试(Early and continuous testing):通过尽早测试和持续验证确保质量。
  • 实践
    • 测试驱动开发(Test-Driven Development, TDD):先编写测试用例再开发代码,确保功能正确性。
    • 持续集成(Continuous Integration, CI):频繁集成代码,快速发现问题。
  • 质量是团队共同责任(Quality is a shared responsibility):所有成员共同关注质量,而非仅由测试人员负责。
  • 持续反馈与迭代(Continuous feedback and iteration):通过快速反馈循环不断改进。
  • 注重可工作的软件而非全面文档:优先交付功能性软件,减少对繁琐文档的依赖。

敏捷环境中的质量特性(Quality Characteristics in Agile Context)

根据 ISO/IEC 25010:2023 标准,敏捷环境关注以下质量特性:

  • 功能适合性(Functional Suitability):软件满足指定功能需求的能力。
  • 可维护性(Maintainability):软件易于修改和维护的程度。
  • 可靠性(Reliability):软件在规定条件下稳定运行的能力。
  • 交互能力(Interaction Capability, Usability):用户界面友好,易于操作。
  • 安全性(Security):保护数据和系统免受未经授权访问的能力。

敏捷支持的质量实践

  • 持续对话:在“可能”和“理想”之间保持沟通,平衡 SQE 目标。
  • 小型发布与简单设计:通过小规模、迭代式发布和持续重构(Refactoring)确保代码质量。
  • 关键实践
    • 结对编程(Pair Programming):两人协作编程,提高代码质量和可读性,减少错误。
    • 内容所有权(Content Ownership):团队成员对特定内容负责,确保任务完成。
    • 持续集成(Continuous Integration):频繁集成新代码,快速发现和修复问题。
  • 注意事项
    • 以协作方式应用 SQE,最大化敏捷优势。
    • 熟悉 SQE 和敏捷环境的术语。
    • 根据具体场景优化敏捷方法。

敏捷原则(Agility Principles)

  • 客户满意度优先:通过早期和持续交付有价值的软件满足客户需求。
  • 拥抱变化:即使在开发后期也能适应需求变化,为客户提供竞争优势。
  • 时间管理:优先选择较短的交付周期,频繁交付可工作的软件(preference to shorter timescale for frequent delivery of working software)。
  • 协作:业务人员与开发人员每天协作,贯穿整个项目。
  • 信任与激励:围绕有动力的个人构建项目,提供支持和信任。
  • 高效信息传递:采用面对面沟通等有效方式传递信息。
  • 以工作软件衡量进度:软件的功能性是衡量进度的主要标准。
  • 可持续开发:保持稳定的开发节奏,确保长期可持续性。
  • 技术卓越与简洁设计:持续关注技术卓越和简洁设计以提升敏捷性。
  • 自组织团队:最佳架构、需求和设计来自自组织团队。
  • 持续改进:通过定期反思优化团队效率,调整行为。

支持敏捷原则的开发方法

  • Scrum:迭代式项目管理框架。
  • 敏捷建模(Agile Modeling):注重轻量级建模技术。
  • 快速应用开发(Rapid Application Development, RAD):快速原型开发。
  • 极限编程(Extreme Programming, XP):强调工程实践如 TDD 和结对编程。
  • Crystal:灵活的敏捷方法,适应不同项目规模。
  • 特性驱动开发(Feature-Driven Development, FDD):以特性为核心的开发。
  • 动态系统开发方法(Dynamic System Development Method, DSDM):结构化的敏捷框架。
  • 看板(Kanban):可视化工作流管理。
  • 精益软件开发(Lean Software Development):消除浪费,优化价值交付。

支持质量的敏捷实践

实践 质量焦点
测试驱动开发(TDD) 功能正确性(Functional Correctness)、可测试性(Testability)
结对编程(Pair Programming) 代码质量(Code Quality)、可读性(Readability)、无错误性(Faultlessness)
持续集成(CI) 早期错误检测(Early Fault Detection)、快速反馈(Fast Feedback)
持续交付/部署(Continuous Delivery/Deployment, CD) 可靠性(Reliability)、性能效率(Performance Efficiency)
重构(Refactoring) 可维护性(Maintainability)、可修改性(Modifiability)
完成定义(Definition of Done, DoD) 明确的的质量期望(Explicit Quality Expectations)

案例分析:Spotify 和 Atlassian 的质量嵌入

  • 敏捷团队中的质量保证(QA)角色
    • 从“看门人”转变为质量推动者(Quality Enabler)。
    • 职责包括:
      • 与开发人员一起编写测试用例。
      • 自动化回归测试(Regression Testing)和集成测试(Integration Testing)。
      • 推动探索性测试(Exploratory Testing)和用户体验反馈。
      • 参与产品待办事项梳理(Backlog Grooming)和冲刺计划(Sprint Planning)。

敏捷测试策略

  • 敏捷测试象限(Agile Testing Quadrants, Lisa Crispin & Janet Gregory 模型)
    • 包括单元测试(Unit Testing)、集成测试(Integration Testing)、系统测试(System Testing)和验收测试(Acceptance Testing)。
    • 分类:自动化 vs 手动,面向业务 vs 面向技术。
    • 敏捷测试象限图
  • 尽早测试,频繁测试(Shift Left):将测试前移至开发早期。
  • 探索性测试:作为自动化测试的补充,注重发现隐藏问题。

敏捷中的度量与质量

  • 需要测量的指标
    • 代码覆盖率(Code Coverage):测试覆盖的代码比例。
    • 缺陷泄漏率(Defect Leakage Rate):生产环境中发现的缺陷比例。
    • 前置时间与周期时间(Lead Time & Cycle Time):从需求提出到完成的时间。
    • 团队速度(Team Velocity):衡量团队完成工作的速度(但不作为质量指标)。
    • 完成定义依从性(Definition of Done Adherence):是否满足预定义的质量标准。
  • 常见挑战:平衡速度与质量,确保指标反映真实质量而非仅进度。

Oracle 敏捷产品生命周期管理(Oracle Agile PLM)

  • 简介:帮助企业管理产品价值链的解决方案。
  • 功能
    • 支持跨职能团队协作,提供集成框架和产品数据洞察。
    • 定制化支持各行业需求。
    • 包括敏捷产品治理(Agile Product Governance)、协作(Collaboration)、成本管理(Cost Management)、生命周期分析(Product Lifecycle Analytics)。
  • 主要特性
    • 质量与成本管理。
    • 消毒管理(Sterilization Management)。
    • 客户需求管理(Customer Needs Management)。
    • 企业可视化(Enterprise Visualization)。
    • 法规合规性(Regulatory Compliance)。

敏捷开发(Agile Development)

敏捷开发(Agile Development)是一种以迭代和增量为核心的软件开发方法,强调快速交付、灵活响应变化以及团队协作。
Agile Development is an iterative and incremental approach to software development that emphasizes rapid delivery, flexible response to change, and teamwork.

敏捷开发核心价值

  • 个体与交互优于流程与工具(Individuals and Interactions over Processes and Tools)。
  • 可工作的软件优于全面文档(Working Software over Comprehensive Documentation)。
  • 客户协作优于合同谈判(Customer Collaboration over Contract Negotiation)。
  • 响应变化优于遵循计划(Responding to Change over Following a Plan)。

Scrum 模型

  • 团队组成
    • 产品负责人(Product Owner):定义产品愿景,管理产品待办事项。
    • Scrum Master:促进 Scrum 实践,移除障碍。
    • 开发人员(Developers/Programmers):实现功能。
  • 事件/活动
    • 冲刺计划(Sprint Planning):确定冲刺目标和待办事项。
    • 每日 Scrum(Daily Scrum):每日短会,同步进度。
    • 冲刺评审(Sprint Review):展示冲刺成果,收集反馈。
    • 冲刺回顾(Sprint Retrospective):反思改进。
    • 冲刺(Sprint):固定时间(通常 2-4 周)的开发周期。
  • 制品(Artifacts)
    • 产品待办事项(Product Backlog):所有待开发功能的列表。
    • 冲刺待办事项(Sprint Backlog):当前冲刺的任务列表。
    • 燃尽图(Burndown):可视化冲刺进度。
  • 步骤
    1. 组建团队。
    2. 进行冲刺计划。
    3. 创建产品待办事项。
    4. 开始冲刺。
    5. 跟踪进度。
    6. 完成冲刺。
    7. 重复以上步骤。
graph TD
    A[组建团队] --> B[冲刺计划]
    B --> C[创建产品待办事项]
    C --> D[开始冲刺]
    D --> E[跟踪进度]
    E --> F[完成冲刺]
    F -->|重复| B

敏捷开发的优缺点

  • 任务:假设公司 PerfectSoftware 需选择软件开发方法(传统能力成熟度模型 CMM 或敏捷开发),需撰写文档列出敏捷开发的优缺点,说服高层管理层。
  • 优点
    • 快速交付:频繁发布可工作的软件,快速响应客户需求。
    • 灵活性:适应需求变化,适合动态项目。
    • 协作性:增强团队和客户间的沟通。
    • 质量提升:通过 TDD、CI 等实践确保质量。
  • 缺点
    • 缺乏文档:可能导致知识传递不足。
    • 依赖团队自律:需要高度自组织和协作能力。
    • 不适合大型复杂项目:可能难以协调大规模团队。
    • 客户参与度要求高:需要客户持续投入时间。

Scrum 管理敏捷开发

  • 任务:研究 Scrum 管理模型,列出采用 Scrum 的三大指导方针。
  • 指导方针
    1. 明确角色与职责(Clarify roles and responsibilities):确保产品负责人、Scrum Master 和开发团队职责清晰。
    2. 迭代式开发与反馈(Iterative development and feedback):通过短周期冲刺和定期评审快速迭代,收集反馈。
    3. 透明性与沟通(Transparency and communication):利用每日 Scrum 和燃尽图保持进度透明。

敏捷开发笔记复习

  • 重点
    • CMM(能力成熟度模型):强调流程标准化和可预测性,适合大型、复杂项目(Emphasis on process standardization and predictability for large, complex projects)。
    • 敏捷定义:以迭代、增量式开发为核心,注重灵活性和客户协作(Iterative, incremental development at its core, with a focus on flexibility and client collaboration)。
    • 敏捷与 CMM 差异:敏捷更灵活,文档较少;CMM 更结构化,流程严格。
    • Scrum 管理:通过角色、事件和制品实现敏捷管理。

敏捷开发采用的优缺点讨论

  • 任务:团队分为两组,分别支持 CMM 和敏捷开发,提出论点并反驳对方。
  • 敏捷支持论点
    • 快速适应变化,提升客户满意度。
    • 通过持续测试和反馈提高质量。
  • CMM 支持论点
    • 适合需要高可预测性和合规性的项目。
    • 提供详细文档,便于维护和审计。
  • 反驳阶段:敏捷团队反驳 CMM 过于僵化,CMM 团队反驳敏捷缺乏结构。

敏捷开发中的一周设计

  • 任务:设计一周工作流程(周一至周五,每天上下午,共 8 个 3.5 小时时段),管理 6 人团队,添加新功能。

  • 角色分配

    • 1 名产品负责人(Product Owner)
    • 1 名 Scrum Master
    • 4 名开发人员(Developers)
  • 工作计划

    时段 周一 周二 周三 周四 周五
    上午 冲刺计划(Sprint Planning) 结对编程(Pair Programming) 结对编程 测试(Testing) 演示(DEMO)
    下午 需求梳理(Backlog Grooming) 测试用例编写(Test Case Writing) 错误修复(Bug Triage) 冲刺评审准备(Sprint Review Prep) 冲刺回顾(Sprint Retrospective)
  • 任务详情

    • 冲刺计划:确定目标,分配任务。
    • 需求梳理:与产品负责人讨论新功能需求。
    • 结对编程:两人协作开发,提升代码质量。
    • 测试用例编写:为新功能编写单元和集成测试。
    • 错误修复:修复测试中发现的问题。
    • 冲刺评审准备:准备展示新功能。
    • 演示(DEMO):向利益相关者展示成果。
    • 冲刺回顾:反思流程,提出改进建议。

CMM 和敏捷开发对比

中文

维度 CMM(能力成熟度模型) 敏捷开发(Agile Development)
核心目标 提高组织的过程成熟度和可预测性 快速响应变化、持续交付高质量软件
方法论类型 流程驱动型 人本驱动型
流程规范性 高度结构化、文档化 灵活、轻量级
适用规模 大中型企业或政府项目 小型到中型团队为主
变更管理 强调计划稳定性,变更需严格控制 欣然接受需求变更,强调适应性
交付周期 周期长,阶段性交付 快速迭代,持续交付小版本
客户参与程度 客户在前期提出需求,后期较少参与 客户持续参与,频繁反馈
质量保障方式 通过流程标准化和量化指标保障质量 通过持续集成、测试驱动等方式保障质量
团队自主性 团队按既定流程执行任务,自主性较低 鼓励自组织团队,强调协作与主动性
风险控制 通过流程控制降低风险 通过快速反馈及时发现并应对风险
实施成本 成本高、周期长、需要大量文档支持 成本相对低、见效快、注重实践而非文档
文化氛围 强调纪律、标准、制度 强调沟通、信任、协作、创新
适用行业 航空航天、国防、金融等对流程要求高的行业 互联网、创业公司、创新型产品
代表模型/方法 CMMI、ISO 9001、瀑布模型 Scrum、Kanban、XP(极限编程)

英文

Dimension CMM (Capability Maturity Model) Agile Development
Core Objective Improve organizational process maturity and predictability Rapidly respond to change and continuously deliver high-quality software
Type of Methodology Process-driven People-driven
Process Formality Highly structured and documented Flexible and lightweight
Applicable Scale Large and medium-sized enterprises, government projects Primarily small to mid-sized teams
Change Management Emphasizes plan stability; changes are strictly controlled Welcomes changing requirements, emphasizes adaptability
Delivery Cycle Long cycle with phased delivery Short iterations with continuous delivery
Customer Involvement Customer defines requirements early, limited involvement later Continuous customer collaboration and frequent feedback
Quality Assurance Approach Quality ensured through standardized processes and quantitative metrics Quality ensured through continuous integration, testing, and iteration
Team Autonomy Teams follow predefined processes, low autonomy Encourages self-organizing teams, high autonomy
Risk Control Risk is managed through process control Risks identified and addressed quickly through rapid feedback
Implementation Cost High cost, long implementation time, requires extensive documentation Lower cost, faster results, emphasizes practice over documentation
Cultural Atmosphere Emphasizes discipline, standards, and systems Emphasizes communication, trust, collaboration, and innovation
Applicable Industries Aerospace, defense, finance — industries requiring strict process control Internet, startups, innovative product development
Representative Models/Methods CMMI, ISO 9001, Waterfall model Scrum, Kanban, XP (Extreme Programming)

知识点可能考法与示例考题

可能考法

  1. 名词解释:解释敏捷开发、Scrum、TDD、CI 等术语。
  2. 比较分析:比较敏捷开发与 CMM 的优缺点。
  3. 实践应用:设计敏捷开发中的一周工作计划或 Scrum 管理流程。
  4. 案例分析:分析某公司在敏捷环境中如何嵌入质量保证。
  5. 质量特性:根据 ISO/IEC 25010:2023,讨论敏捷环境中的质量特性。

示例考题

  1. 简答题:简述敏捷开发的核心价值及其对软件质量工程(SQE)的影响。

    • 参考答案(中文): 敏捷开发核心价值包括:个体与交互优于流程与工具、可工作的软件优于全面文档、客户协作优于合同谈判、响应变化优于遵循计划。这些价值通过以下方式影响 SQE:
      • 强调早期和持续测试(如 TDD、CI),确保质量内建。
      • 促进团队协作,质量成为共同责任。
      • 注重快速反馈和迭代,提升功能适合性和可靠性。
      • 简化文档,聚焦可工作的软件,提升开发效率。
    • Reference Answer (English): The core values of Agile Development include: Individuals and Interactions over Processes and Tools, Working Software over Comprehensive Documentation, Customer Collaboration over Contract Negotiation, and Responding to Change over Following a Plan. These values impact SQE by:
      • Emphasizing early and continuous testing (e.g., TDD, CI) to build quality in.
      • Promoting team collaboration, making quality a shared responsibility.
      • Focusing on rapid feedback and iteration to improve functional suitability and reliability.
      • Simplifying documentation to prioritize working software, enhancing development efficiency.
  2. 论述题:描述 Scrum 模型的团队角色、事件和制品,并说明其如何支持敏捷开发。

    • 参考答案(中文): Scrum 模型包含以下元素:
      • 团队角色
        • 产品负责人(Product Owner):定义产品愿景,管理产品待办事项。
        • Scrum Master:促进 Scrum 实践,移除障碍。
        • 开发人员(Developers):实现功能。
      • 事件
        • 冲刺计划(Sprint Planning):确定冲刺目标。
        • 每日 Scrum(Daily Scrum):同步进度。
        • 冲刺评审(Sprint Review):展示成果,收集反馈。
        • 冲刺回顾(Sprint Retrospective):反思改进。
        • 冲刺(Sprint):固定时间开发周期。
      • 制品
        • 产品待办事项(Product Backlog):功能列表。
        • 冲刺待办事项(Sprint Backlog):当前冲刺任务。
        • 燃尽图(Burndown):可视化进度。 Scrum 通过迭代开发、持续反馈和透明沟通支持敏捷开发,确保快速交付和高质量软件。
    • Reference Answer (English): The Scrum model includes:
      • Team Roles:
        • Product Owner: Defines the product vision and manages the Product Backlog.
        • Scrum Master: Facilitates Scrum practices and removes impediments.
        • Developers: Implement features.
      • Events:
        • Sprint Planning: Sets sprint goals.
        • Daily Scrum: Synchronizes team progress.
        • Sprint Review: Demonstrates deliverables and gathers feedback.
        • Sprint Retrospective: Reflects on improvements.
        • Sprint: Fixed-time development cycle.
      • Artifacts:
        • Product Backlog: List of features.
        • Sprint Backlog: Tasks for the current sprint.
        • Burndown: Visualizes progress. Scrum supports Agile Development through iterative development, continuous feedback, and transparent communication, ensuring rapid delivery and high-quality software.
  3. 实践题:设计一个敏捷开发团队的一周工作计划,包含角色分配和任务安排。

    • 参考答案(中文)
      • 团队:6 人(1 产品负责人、1 Scrum Master、4 开发人员)。
      • 工作计划
        时段 周一 周二 周三 周四 周五
        上午 冲刺计划 结对编程 结对编程 测试 演示
        下午 需求梳理 测试用例编写 错误修复 冲刺评审准备 冲刺回顾
      • 任务说明
        • 冲刺计划:产品负责人和团队确定目标,分配任务。
        • 需求梳理:与客户讨论功能需求。
        • 结对编程:开发人员协作开发。
        • 测试用例编写:为功能编写测试。
        • 错误修复:修复测试中的问题。
        • 冲刺评审准备:准备演示内容。
        • 演示:向客户展示成果。
        • 冲刺回顾:反思流程,提出改进。
    • Reference Answer (English):
      • Team: 6 members (1 Product Owner, 1 Scrum Master, 4 Developers).
      • Work Plan:
        Time Monday Tuesday Wednesday Thursday Friday
        AM Sprint Planning Pair Programming Pair Programming Testing Demo
        PM Backlog Grooming Test Case Writing Bug Triage Sprint Review Prep Sprint Retrospective
      • Task Details:
        • Sprint Planning: Product Owner and team set goals and assign tasks.
        • Backlog Grooming: Discuss feature requirements with the client.
        • Pair Programming: Developers collaborate on coding.
        • Test Case Writing: Write tests for the feature.
        • Bug Triage: Fix issues found in testing.
        • Sprint Review Prep: Prepare demo content.
        • Demo: Present results to the client.
        • Sprint Retrospective: Reflect on the process and suggest improvements.
0%