软件质量工程 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 模型):
- 尽早测试,频繁测试(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):可视化冲刺进度。
- 步骤:
- 组建团队。
- 进行冲刺计划。
- 创建产品待办事项。
- 开始冲刺。
- 跟踪进度。
- 完成冲刺。
- 重复以上步骤。
graph TD A[组建团队] --> B[冲刺计划] B --> C[创建产品待办事项] C --> D[开始冲刺] D --> E[跟踪进度] E --> F[完成冲刺] F -->|重复| Bgraph TD A[组建团队] --> B[冲刺计划] B --> C[创建产品待办事项] C --> D[开始冲刺] D --> E[跟踪进度] E --> F[完成冲刺] F -->|重复| B
敏捷开发的优缺点
- 任务:假设公司 PerfectSoftware 需选择软件开发方法(传统能力成熟度模型 CMM 或敏捷开发),需撰写文档列出敏捷开发的优缺点,说服高层管理层。
- 优点:
- 快速交付:频繁发布可工作的软件,快速响应客户需求。
- 灵活性:适应需求变化,适合动态项目。
- 协作性:增强团队和客户间的沟通。
- 质量提升:通过 TDD、CI 等实践确保质量。
- 缺点:
- 缺乏文档:可能导致知识传递不足。
- 依赖团队自律:需要高度自组织和协作能力。
- 不适合大型复杂项目:可能难以协调大规模团队。
- 客户参与度要求高:需要客户持续投入时间。
Scrum 管理敏捷开发
- 任务:研究 Scrum 管理模型,列出采用 Scrum 的三大指导方针。
- 指导方针:
- 明确角色与职责(Clarify roles and responsibilities):确保产品负责人、Scrum Master 和开发团队职责清晰。
- 迭代式开发与反馈(Iterative development and feedback):通过短周期冲刺和定期评审快速迭代,收集反馈。
- 透明性与沟通(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) |
知识点可能考法与示例考题
可能考法
- 名词解释:解释敏捷开发、Scrum、TDD、CI 等术语。
- 比较分析:比较敏捷开发与 CMM 的优缺点。
- 实践应用:设计敏捷开发中的一周工作计划或 Scrum 管理流程。
- 案例分析:分析某公司在敏捷环境中如何嵌入质量保证。
- 质量特性:根据 ISO/IEC 25010:2023,讨论敏捷环境中的质量特性。
示例考题
-
简答题:简述敏捷开发的核心价值及其对软件质量工程(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.
- 参考答案(中文):
敏捷开发核心价值包括:个体与交互优于流程与工具、可工作的软件优于全面文档、客户协作优于合同谈判、响应变化优于遵循计划。这些价值通过以下方式影响 SQE:
-
论述题:描述 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.
- Team Roles:
- 参考答案(中文):
Scrum 模型包含以下元素:
-
实践题:设计一个敏捷开发团队的一周工作计划,包含角色分配和任务安排。
- 参考答案(中文):
- 团队: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.
- 参考答案(中文):