Trang chủ / Đảm bảo chất lượng
Chiến lược kiểm thử shift left cho nhóm agile: Các bước thực tế
Nhiều nhóm phát hiện lỗi muộn, khi chi phí sửa chữa cao và lịch trình đã gấp rút. Chiến lược kiểm thử shift left cho nhóm agile đưa các hoạt động chất lượng lên sớm hơn, giúp vấn đề xuất hiện khi chi phí giải quyết thấp nhất. Khi thực hiện tốt, phương pháp này cải thiện luồng công việc, giảm công việc phải làm lại và giữ nhịp giao hàng liên tục. Khi thực hiện kém, nó tạo ra thêm các cuộc họp và tài liệu mà không ai đọc. Mục tiêu không phải là kiểm thử nhiều hơn; mà là kiểm thử thông minh hơn, sớm hơn để hỗ trợ các bản phát hành nhanh chóng và tự tin.
Shift left không phải là một phương pháp riêng lẻ. Đó là một tập hợp các thói quen được lồng ghép vào quá trình tinh chỉnh backlog, thiết kế, lập trình và triển khai. Khi chất lượng trở thành một phần của công việc hàng ngày, nhóm tránh được sự gấp gáp vào cuối sprint hoặc bản phát hành. Họ cũng giảm thiểu rủi ro lỗi tái phát vì xác minh hành vi sớm và thường xuyên.
Tại sao shift left cải thiện tốc độ
Lỗi được phát hiện sau khi hợp nhất code có chi phí cao hơn nhiều so với lỗi phát hiện trong giai đoạn thiết kế hoặc lần viết code đầu tiên. Việc sửa một hiểu lầm về yêu cầu trước khi bắt đầu lập trình tiết kiệm hàng giờ công việc phải làm lại. Viết một kiểm thử thất bại trước khi triển khai giúp làm rõ ý định và lộ ra các trường hợp biên. Chạy các kiểm tra nhanh trên mỗi commit ngăn chặn việc xác minh thủ công chậm chạp sau này.
Shift left cũng cải thiện khả năng dự đoán. Khi các hoạt động chất lượng được lên kế hoạch từ đầu, các ước tính đáng tin cậy hơn. Nhóm dành ít thời gian cho việc dập lửa hơn và nhiều thời gian hơn cho việc tạo ra giá trị. Đây không phải là về việc thêm các bước kiểm tra; mà là về việc loại bỏ những bất ngờ vào phút chót.
Các bước thực tế để bắt đầu
Làm rõ tiêu chí chấp nhận trước khi bắt đầu làm
- Sử dụng phương pháp tinh chỉnh dựa trên ví dụ. Trước khi một user story sẵn sàng, yêu cầu các ví dụ cụ thể về hành vi mong đợi, bao gồm cả các trường hợp biên.
- Biến các ví dụ thành tiêu chí chấp nhận có thể được xác minh tự động. Giữ chúng ngắn gọn, cụ thể và có thể kiểm thử được.
- Mời tester, developer và product owner tham gia cùng một buổi tinh chỉnh. Sự thấu hiểu chung giúp giảm các lần trao đổi qua lại sau này.
Bước này loại b�� sự mơ hồ từ sớm. Nó cũng cung cấp cho developer một mục tiêu rõ ràng và cho tester cơ sở để thiết kế kiểm tra và dữ liệu kiểm thử.
Đưa kiểm thử trở thành một phần của code
- Áp dụng phát triển hướng kiểm thử (TDD) hoặc thói quen kiểm thử trước nhẹ nhàng hơn. Viết một kiểm thử nhỏ bị lỗi, sửa cho nó chạy được, sau đó tinh chỉnh code.
- Giữ các kiểm thử đơn vị nhanh và tập trung. Hướng tới việc hầu hết các kiểm tra chạy trong vài giây, không phải vài phút.
- Sử dụng kiểm thử hợp đồng hoặc kiểm tra schema cho API và các sự kiện. Xác minh đầu vào, đầu ra và thông báo lỗi từ sớm.
Các kiểm thử nhanh khuyến khích việc sử dụng thường xuyên. Nếu kiểm thử mất quá nhiều thời gian, developer sẽ tránh chúng. Giữ vòng lặp phản hồi ngắn.
Tự động hóa đường critical path
- Xây dựng một bộ nhỏ kiểm thử khói bao phủ các hành trình cốt lõi của người dùng. Chạy chúng trên mỗi pull request.
- Thêm phân tích tĩnh và kiểm tra lint để tự động phát hiện các lỗi phổ biến.
- Sử dụng trình tạo dữ liệu kiểm thử hoặc fixture để kiểm thử không phụ thuộc vào môi trường dễ hỏng hoặc dữ liệu dùng chung.
Các kiểm tra tự động phải đáng tin cậy. Kiểm thử không ổn định làm xói mòn lòng tin và làm chậm việc giao hàng. Cách ly các kiểm thử không ổn định và sửa chúng nhanh chóng.
Thiết kế để có thể kiểm thử được
- Ưu tiên các hàm nhỏ, thuần túy khi có thể. Chúng dễ kiểm thử và dễ suy luận hơn.
- Cô lập các side effect đằng sau các giao diện rõ ràng. Sử dụng dependency injection hoặc các seam đơn giản để thay thế dịch vụ bên ngoài trong kiểm thử.
- Giữ các tính năng có thể bật/tắt. Feature flag cho phép bạn kiểm thử công việc chưa hoàn thành một cách an toàn và phát hành theo từng bước nhỏ.
Khả năng kiểm thử là một phẩm chất thiết kế. Khi code dễ kiểm thử, nhóm viết nhiều kiểm thử có giá trị hơn và dành ít thời gian hơn cho việc mock các thành phần nội bộ phức tạp.
Sử dụng môi trường một cách khôn ngoan
- Chạy các kiểm tra nhanh trên máy cục bộ và trong pipeline. Chỉ sử dụng môi trường dùng chung cho kiểm thử tích hợp hoặc kiểm thử khám phá.
- Tạo các môi trường tạm thời cho mỗi pull request khi có thể. Điều này giảm xung đột và tăng tốc phản hồi.
- Theo dõi sức khỏe môi trường. Môi trường không ổn định tạo ra công việc vô ích và che giấu các lỗi thực sự.
Biến kiểm thử khám phá thành thói quen
- Lên lịch các buổi khám phá ngắn, tập trung mỗi sprint. Tester và developer cùng làm việc trên các khu vực có rủi ro cao.
- Sử dụng các charter nhắm vào các quy tắc kinh doanh, trường hợp biên và xử lý lỗi.
- Ghi lại các phát hiện nhanh chóng bằng ghi chú, ảnh chụp màn hình hoặc video ngắn. Biến các thông tin giá trị thành các kiểm tra tự động.
Kiểm thử khám phá không phải là sự thay thế cho tự động hóa. Nó bổ sung cho tự động hóa bằng cách phát hiện các lỗ hổng mà các script bỏ sót.
Vai trò và tinh thần đồng đội
Shift left phát huy hiệu quả khi mọi người đều chịu trách nhiệm về chất lượng. Developer viết code có thể kiểm thử và duy trì các kiểm tra nhanh. Tester hướng dẫn phân tích rủi ro, thiết kế chiến lược kiểm thử và hướng dẫn nhóm về các trường hợp biên. Product owner làm rõ ý định và tiêu chí chấp nhận. Quản lý bảo vệ thời gian cho công việc chất lượng và loại bỏ các rào cản.
Làm việc theo cặp giúp ích. Một developer và một tester có thể cùng thiết kế các kiểm tra, xem xét các trường hợp biên và tinh chỉnh tự động hóa. Điều này xây dựng kỹ năng chung và giảm các lần chuyển giao.
Chỉ số giúp ích, không gây hại
- Giai đoạn phát hiện lỗi: Theo dõi nơi các vấn đề được phát hiện. Hướng tới việc phát hiện nhiều lỗi hơn trong giai đoạn thiết kế, lập trình và review pull request.
- Thời gian dẫn đầu cho thay đổi (Lead time for changes): Đo lường thời gian từ commit đến phát hành. Các cải thiện chất lượng nên giữ chỉ số này ổn định hoặc giảm nó.
- Thời gian chạy kiểm tra tự động: Theo dõi tổng thời gian pipeline. Giữ vòng lặp phản hồi nhanh dưới ngưỡng hợp lý cho nhóm của bạn.
- Tỷ lệ làm lại (Rework rate): Theo dõi các user story quay lại giai đoạn phát triển do thiếu yêu cầu hoặc lỗi. Chỉ số này nên có xu hướng giảm.
Sử dụng chỉ số để học hỏi, không phải để trừng phạt. Nếu một chỉ số thúc đẩy hành vi sai, hãy thay đổi ch��� số hoặc cách nó được sử dụng.
Tránh công việc vô ích
Công việc vô ích xuất hiện khi các quy trình phát triển mà không có mục đích rõ ràng. Để tránh điều này, hãy đặt ra một vài câu hỏi trước khi thêm một bước:
- Hoạt động này có ngăn chặn được một vấn đề thực sự, xảy ra thường xuyên không?
- Chúng ta có thể tự động hóa nó hoặc làm cho nó nhanh hơn không?
- Kết quả có được sử dụng trong vài ngày, không phải vài tuần không?
- Nó có giúp tăng sự rõ ràng cho những người thực hiện công việc không?
Nếu câu trả lời là không, hãy bỏ qua nó hoặc chạy một thí nghiệm ngắn trước. Các phương pháp kiểm thử phần mềm nên tự chứng minh được giá trị bằng cách giảm rủi ro hoặc cải thiện luồng công việc.
Một lộ trình áp dụng đơn giản
Bắt đầu với một sản phẩm hoặc một nhóm nhỏ. Chọn một bộ thay đổi nhỏ giải quyết các điểm đau lớn nhất. Đối với nhiều nhóm, điều đó có nghĩa là tiêu chí chấp nhận tốt hơn, kiểm tra pull request nhanh hơn và một buổi khám phá ngắn mỗi sprint. Chạy các thay đổi này trong vài tuần, xem xét kết quả và điều chỉnh.
Sau đó mở rộng. Chia sẻ những gì đã hoạt động, tạo các hướng dẫn đơn giản và hướng dẫn các nhóm khác. Tránh một đợt triển khai lớn với các quy tắc nặng nề. Để các phương pháp tự chứng minh giá trị và lan tỏa một cách tự nhiên.
Giữ tập trung vào kết quả
Mục đích của chiến lược kiểm thử shift left cho nhóm agile không phải là thêm nhiều bước hơn. Đó là phát hiện vấn đề sớm, giảm công việc phải làm lại và giữ nhịp giao hàng ổn định. Khi chất lượng trở thành thói quen hàng ngày, nhóm giao hàng tự tin hơn và dành ít thời gian hơn để sửa các vấn đề có thể tránh được. Đó là cách bạn đưa chất lượng lên sớm hơn mà không làm chậm hoặc tạo ra công việc vô ích.
