Menu
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Đang tải...

Bài 40 — Scrum and Quality Assurance

Advanced Scrum Master PSM II Bài 40/60

Mở đầu — vì sao bài này quan trọng

Trong rất nhiều tổ chức mà tôi từng coaching ở Việt Nam, có một câu hỏi luôn lặp đi lặp lại mỗi khi chuyển sang Scrum: "Vậy team QA của mình sẽ đi đâu? Ai sẽ nghiệm thu chất lượng nếu không có một bộ phận kiểm thử riêng?" Đây không phải câu hỏi ngây thơ — nó phản ánh một mô hình tư duy đã ăn sâu suốt hàng chục năm: chất lượng là việc của một nhóm người chuyên trách, đứng ở cuối dây chuyền, đóng vai trò "cổng gác" (gatekeeper) trước khi sản phẩm ra thị trường.

Là một Scrum Master ở cấp độ PSM II, bạn sẽ liên tục đối mặt với mâu thuẫn này. Nó không chỉ là vấn đề kỹ thuật, mà là vấn đề thiết kế tổ chức, văn hóa và cách team hiểu về trách nhiệm. Nếu bạn không nắm vững quan điểm của Scrum về chất lượng, bạn sẽ vô tình để team rơi vào "mini-waterfall": dev code trong hai tuần, rồi quăng cho tester kiểm thử trong Sprint sau, chất lượng vẫn bị "bolt-on" (gắn vào sau) thay vì được "built-in" (xây dựng từ đầu).

Bài học này giúp bạn hiểu rõ và truyền đạt được: trong Scrum, không có team QA riêng; tester là Developers; chất lượng được xây dựng vào sản phẩm thông qua kỹ thuật và thông qua Definition of Done — chứ không phải được kiểm tra để "thêm vào" ở phút chót. Đây là một trong những điểm thi PSM II hay đánh đố, và quan trọng hơn, là điều bạn sẽ phải coaching gần như mỗi ngày trong thực tế.

Khái niệm cốt lõi

Scrum không có "team QA" — chỉ có một Developers Team

Theo Scrum Guide 2020, Scrum Team chỉ có ba accountabilities: Product Owner, Scrum Master và Developers. Không có vai trò "Tester", "QA Engineer" hay "QC". Điều này khiến nhiều người hiểu lầm rằng Scrum coi nhẹ kiểm thử. Hoàn toàn ngược lại.

Scrum Guide định nghĩa Developers là "những người trong Scrum Team cam kết tạo ra bất kỳ khía cạnh nào của một Increment có thể sử dụng được trong mỗi Sprint". Từ khóa ở đây là "bất kỳ khía cạnh nào" — bao gồm cả viết code, viết test, tự động hóa kiểm thử, thiết kế, phân tích, và đảm bảo chất lượng. Một người chuyên về kiểm thử trong Scrum Team vẫn là một Developer. Họ không bị "giáng cấp"; trái lại, họ được kéo vào trung tâm của quá trình tạo giá trị thay vì đứng ở cuối dây chuyền.

Điểm mấu chốt về tư duy: trong Scrum, không ai "sở hữu" chất lượng một cách riêng lẻ. Cả Developers Team cùng chịu trách nhiệm về chất lượng của Increment. Tester không còn là người duy nhất "bảo vệ" chất lượng; lập trình viên không thể nói "tôi viết xong rồi, để QA lo phần test".

Chất lượng được "built-in", không "bolt-on"

Đây là sự khác biệt triết lý lớn nhất giữa Scrum và mô hình truyền thống.

  • Bolt-on (gắn vào sau): code xong → đưa qua đội test → tìm bug → trả lại dev sửa → test lại. Chất lượng được "kiểm tra để thêm vào". Bug càng phát hiện muộn càng đắt, vòng phản hồi dài, và tester biến thành "người gác cổng" bị áp lực thời gian dồn vào cuối Sprint.
  • Built-in (xây dựng từ đầu): chất lượng là một thuộc tính được tạo ra ngay khi viết từng dòng code. Các kỹ thuật như TDD (Test-Driven Development), test automation, pair programming, continuous integration, static code analysis đảm bảo lỗi bị chặn ngay từ nguồn.
Có một câu nói kinh điển của W. Edwards Deming mà tôi luôn nhắc team: "Cease dependence on inspection to achieve quality. Build quality into the product in the first place." (Hãy ngừng phụ thuộc vào kiểm tra để đạt chất lượng. Hãy xây dựng chất lượng vào sản phẩm ngay từ đầu.) Scrum kế thừa trọn vẹn tinh thần Lean này.

Definition of Done (DoD) — bộ tiêu chuẩn chất lượng chung

DoD là công cụ chính thức của Scrum để đảm bảo chất lượng. Đây là một mô tả chung, được cả Scrum Team đồng thuận, về trạng thái của Increment khi nó đáp ứng được tiêu chuẩn chất lượng cần thiết để được coi là "Done" (hoàn thành).

DoD trả lời câu hỏi: "Một việc được xem là hoàn thành thì cần đạt những gì?" Ví dụ một DoD trưởng thành có thể bao gồm: code đã được review, unit test đạt độ phủ tối thiểu, đã có automated integration test, đã chạy qua pipeline CI không lỗi, đã được kiểm thử trên môi trường staging, không còn critical/blocker bug, tài liệu đã cập nhật, đã đạt tiêu chuẩn bảo mật.

Điểm quan trọng cần coaching: DoD không phải là checklist của riêng tester. Đó là cam kết (commitment) gắn với Increment, áp dụng cho mọi người trong Developers Team. Nếu một Product Backlog Item chưa đạt DoD, nó không được trình bày trong Sprint Review và không tính là hoàn thành. DoD chính là nơi "chất lượng" trở thành một định nghĩa minh bạch, không thể thương lượng giữa chừng.

Phân biệt DoD và Acceptance Criteria

Đây là chỗ học viên hay nhầm và cũng hay bị hỏi trong các kịch bản PSM II:

  • Acceptance Criteria (AC): điều kiện riêng cho từng PBI, mô tả hành vi cụ thể của tính năng đó. Trả lời câu hỏi "tính năng này làm đúng cái gì?"
  • Definition of Done: tiêu chuẩn chất lượng chung áp dụng cho mọi PBI. Trả lời câu hỏi "thế nào là đạt chuẩn chất lượng để release?"
Một PBI "Done" khi vừa thỏa mãn AC của riêng nó, vừa thỏa mãn DoD chung. Kiểm thử trong Scrum bao trùm cả hai: kiểm thử chức năng (theo AC) lẫn kiểm thử phi chức năng và quy trình (theo DoD).

Tình huống thực tế

Tình huống 1 — Công ty fintech ở TP.HCM và cái "QA Sprint" tai hại

Một công ty fintech khoảng 60 người ở Quận 1, TP.HCM (tôi sẽ gọi là Công ty A), chuyển sang Scrum nhưng giữ nguyên cấu trúc cũ: 5 dev, 2 tester ngồi cùng team. Họ vận hành theo kiểu dev code trong Sprint N, rồi tester kiểm thử trong Sprint N+1. Họ gọi đó là "QA Sprint".

Kết quả sau 3 tháng: mỗi Sprint Review, Increment trình bày luôn là tính năng của Sprint trước. Khi tester phát hiện bug ở Sprint N+1, dev đã "context-switch" sang việc mới, phải bỏ dở để quay lại sửa. Tỷ lệ bug rò rỉ ra production tăng 40% so với trước, vì áp lực cuối Sprint khiến tester làm vội. Velocity nhìn thì đẹp nhưng giá trị thực giao ra rất thấp.

Khi tôi vào coaching, vấn đề lộ rõ: họ đang chạy mini-waterfall trá hình. Giải pháp không phải sa thải ai, mà là dịch chuyển tư duy. Chúng tôi định nghĩa lại DoD: một PBI chỉ "Done" khi đã code xong VÀ test xong VÀ pass CI — tất cả trong cùng một Sprint. Tester được khuyến khích tham gia ngay từ Refinement và Sprint Planning để cùng dev viết test case trước khi code (shift-left). Sau hai tháng, tỷ lệ bug production giảm còn một nửa, và Increment trình bày tại Review thực sự là việc của Sprint hiện tại.

Bài học rút ra: "QA Sprint" hay "stabilization Sprint" là anti-pattern. Chất lượng phải nằm trong DoD của mọi PBI, hoàn thành trọn vẹn trong cùng Sprint, không đẩy sang sau.

Tình huống 2 — Tiki và việc tester "trở thành" Developer

Một bối cảnh thường thấy ở các công ty thương mại điện tử lớn như Tiki: ban đầu có một Test Team tập trung phục vụ nhiều squad. Mỗi khi một squad cần kiểm thử, họ phải "đặt lịch" với Test Team — tạo ra hàng đợi, phụ thuộc chéo, và tinh thần "không phải việc của tôi".

Khi tổ chức trưởng thành về Agile, họ giải tán Test Team tập trung và phân các tester về từng squad, trở thành thành viên Developers đầy đủ. Lúc đầu có sự kháng cự: nhiều tester sợ mất danh tính nghề nghiệp, sợ bị buộc phải code. Một Scrum Master giỏi sẽ coaching để họ hiểu: "Developer" trong Scrum không có nghĩa là "lập trình viên" — nó nghĩa là người cùng tạo ra Increment. Kỹ năng kiểm thử của họ trở nên quý giá hơn bao giờ hết vì giờ đây họ ảnh hưởng đến chất lượng ngay từ khâu thiết kế.

Kết quả điển hình của mô hình này: tester bắt đầu viết automated test, tham gia code review về mặt testability, và dạy ngược lại cho dev cách viết code dễ test hơn. Chất lượng trở thành trách nhiệm tập thể.

Bài học rút ra: Phân tán tester vào team không hạ thấp họ — nó nâng tầm họ thành những người xây dựng chất lượng, miễn là Scrum Master coaching đúng về danh tính và giá trị của họ.

Tình huống 3 — Startup SaaS và việc thiếu DoD về test tự động

Một startup SaaS khoảng 15 người ở Hà Nội (Công ty B) làm phần mềm quản lý kho. Họ "làm Scrum" rất nhiệt tình nhưng DoD chỉ ghi vỏn vẹn: "code xong, demo được". Không có yêu cầu về automated test. Mỗi lần release, họ test tay toàn bộ, mất gần một ngày, và vẫn lọt regression bug. Sau 6 tháng, mỗi Sprint phải dành ngày càng nhiều thời gian "chữa cháy" production.

Tôi giúp họ tiến hóa DoD theo từng bước, không làm một lần (vì cả team chưa đủ năng lực automation ngay). Sprint đầu: thêm "unit test cho mọi logic nghiệp vụ mới". Sprint sau: thêm "smoke test tự động cho luồng chính chạy trong CI". Ba tháng sau: thời gian regression test thủ công giảm từ một ngày xuống còn một giờ; số bug production giảm rõ rệt; team tự tin release nhiều lần mỗi tuần.

Bài học rút ra: DoD là một tài liệu sống, cần được nâng cấp dần khi năng lực team tăng lên. Một DoD yếu là một trong những nguyên nhân hàng đầu khiến chất lượng bị "bolt-on".

Hướng dẫn từng bước

Nếu bạn là Scrum Master muốn chuyển team từ mô hình "QA gác cổng" sang "chất lượng built-in", đây là lộ trình thực tế:

  • Chẩn đoán hiện trạng. Quan sát: tester có nằm trong team không, hay là bộ phận riêng? Test diễn ra trong Sprint hay sau Sprint? DoD hiện tại nói gì về chất lượng? Có "QA Sprint" hay "hardening Sprint" không? Đây là các tín hiệu của mini-waterfall.
  • Làm rõ ngôn ngữ "Developers". Tổ chức một buổi workshop giải thích rằng Scrum không có vai trò Tester riêng, và mọi người tạo ra Increment đều là Developers. Nhấn mạnh đây là sự nâng tầm, không phải xóa bỏ kỹ năng kiểm thử.
  • Cùng team viết lại Definition of Done. Đây là bước then chốt. Tổ chức workshop để Developers tự định nghĩa "Done" nghĩa là gì về mặt chất lượng. Bắt đầu từ thực tế hiện tại, đừng đặt tiêu chuẩn lý tưởng ngay (sẽ tạo ra rất nhiều việc "chưa Done" và làm team nản).
  • Đưa kiểm thử lên sớm (shift-left). Mời tester/Developers có kỹ năng test tham gia Refinement và Sprint Planning. Cùng viết acceptance test, thậm chí test case, trước khi code. Đây là tinh thần của ATDD/BDD.
  • Xây dựng năng lực kỹ thuật để chất lượng built-in. Coaching team về TDD, test automation, continuous integration. Bạn không cần dạy kỹ thuật trực tiếp, nhưng cần tạo điều kiện (thời gian, training, pair programming) và loại bỏ trở ngại tổ chức.
  • Tiến hóa DoD liên tục. Trong mỗi Retrospective, hỏi: "DoD của mình đã đủ mạnh chưa? Có điều gì đang lọt ra production mà DoD nên chặn lại?" Nâng cấp DoD theo năng lực team.
  • Đo lường và phản hồi. Theo dõi các tín hiệu như escaped defects (bug lọt ra production), thời gian từ code đến test, độ phủ automation. Dùng dữ liệu để chứng minh giá trị của cách làm mới với cả team lẫn quản lý.

Lỗi thường gặp & mẹo

Lỗi 1 — Coi "không có team QA" là "không cần kiểm thử". Một số team hiểu sai và bỏ luôn việc test bài bản. Mẹo: nhấn mạnh rằng Scrum yêu cầu chất lượng cao hơn, vì chất lượng phải built-in vào mỗi Increment có thể release.

Lỗi 2 — Đẩy test sang Sprint sau ("QA Sprint"). Đây là anti-pattern phổ biến nhất. Mẹo: đưa "đã test xong" vào DoD, để một PBI không thể "Done" nếu chưa test trong cùng Sprint.

Lỗi 3 — DoD quá yếu hoặc chỉ là hình thức. DoD ghi "code xong" không bảo vệ được chất lượng. Mẹo: kiểm tra DoD trong Retrospective định kỳ, dùng escaped defects làm bằng chứng để nâng cấp.

Lỗi 4 — Scrum Master tự viết DoD rồi áp xuống. DoD phải do Developers đồng thuận thì họ mới cam kết. Mẹo: facilitate, đừng dictate.

Lỗi 5 — Tester bị cô lập, không tham gia Planning/Refinement. Khi test bị tách khỏi đầu chuỗi, lỗi sẽ phát hiện muộn. Mẹo: shift-left, kéo kỹ năng kiểm thử lên sớm nhất có thể.

Lỗi 6 — Nhầm DoD với Acceptance Criteria. Mẹo: nhớ AC là riêng từng PBI, DoD là chung cho mọi PBI; cả hai đều cần thỏa mãn.

Mẹo cho phòng thi PSM II: khi gặp câu hỏi có một "team QA riêng" kiểm thử ở cuối, câu trả lời đúng gần như luôn hướng đến: tích hợp kiểm thử vào Developers Team, đưa vào DoD, hoàn thành trong cùng Sprint.

Bài tập thực hành

  • Soi lại team của bạn. Liệt kê: tester đang ở đâu (trong team hay ngoài)? Test diễn ra khi nào trong Sprint? Hãy chỉ ra ít nhất một dấu hiệu mini-waterfall nếu có.
  • Audit Definition of Done. Lấy DoD hiện tại của team. Đánh giá: nó có nhắc đến test tự động, code review, CI, không còn critical bug không? Viết ra 3 mục bạn muốn bổ sung và lý do.
  • Viết kịch bản coaching. Một lập trình viên nói: "Việc test là của tester, tôi code xong là xong." Hãy soạn một đoạn hội thoại bạn dùng để coaching người này hiểu về trách nhiệm chung với chất lượng — dùng powerful questions thay vì giảng giải.
  • Thiết kế lộ trình tiến hóa DoD. Giả định team bạn chưa có automation. Vẽ một roadmap 3 Sprint để nâng dần DoD về mặt kiểm thử, phù hợp với năng lực thực tế.
  • Phản biện cho quản lý. Sếp muốn lập một "Test Center of Excellence" tập trung để kiểm soát chất lượng tất cả các team. Viết 5 luận điểm (kèm dữ liệu/tín hiệu bạn sẽ dùng) để giải thích vì sao điều này đi ngược Scrum và đề xuất phương án thay thế.

Tóm tắt

Trong Scrum, chất lượng không phải việc của một bộ phận đứng cuối dây chuyền — nó là trách nhiệm tập thể, được xây dựng vào sản phẩm từ đầu. Hãy ghi nhớ những điểm cốt lõi:

  • Scrum không có vai trò "Tester" hay "team QA" riêng. Mọi người tạo ra Increment đều là Developers, và người có kỹ năng kiểm thử vẫn là Developer đầy đủ — được nâng tầm chứ không bị hạ thấp.
  • Chất lượng phải được built-in (qua TDD, test automation, CI, pair programming), không bolt-on ở cuối Sprint. Tinh thần Lean: xây chất lượng vào sản phẩm, đừng phụ thuộc vào việc kiểm tra cuối chuỗi.
  • Definition of Done là công cụ chính thức để đảm bảo chất lượng — một cam kết chung, minh bạch, không thương lượng giữa chừng, và là một tài liệu sống cần tiến hóa.
  • Phân biệt rõ DoD (chuẩn chung cho mọi PBI) và Acceptance Criteria (riêng từng PBI).
  • "QA Sprint", "hardening Sprint", test đẩy sang Sprint sau đều là anti-pattern. Test phải hoàn thành trong cùng Sprint với code.
Vai trò của bạn — Scrum Master cấp PSM II — là giúp team và tổ chức dịch chuyển từ tư duy "kiểm tra chất lượng" sang "xây dựng chất lượng". Đó là một thay đổi văn hóa sâu sắc, và nó bắt đầu từ một Definition of Done đủ mạnh cùng một Developers Team thực sự sở hữu chất lượng chung.