Agile Testing: Thách thức và Giải pháp
👉 Bạn là một tester đang làm việc theo phương pháp Agile, một phương pháp quản lý dự án linh hoạt, thích ứng với sự thay đổi nhanh chóng của thị trường và khách hàng.
👉 Bạn biết rằng software testing là một công việc quan trọng để đảm bảo chất lượng, tính năng và hoạt động của ứng dụng trước khi nó được phát hành cho người dùng cuối. Nhưng bạn cũng gặp phải nhiều thách thức khi thực hiện software testing trong môi trường Agile.
Bài viết này sẽ giúp bạn hiểu rõ hơn về software testing, các thách thức của nó trong Agile, và các giải pháp để đối mặt với những thách thức đó.
Software testing là gì?
✅ Software testing là quá trình kiểm tra chất lượng, tính năng và hoạt động của một phần mềm hay ứng dụng trước khi nó được phát hành cho người dùng cuối.
✅ Software testing giúp đảm bảo rằng phần mềm hay ứng dụng đáp ứng được các yêu cầu kỹ thuật, kinh doanh và khách hàng, cũng như không có lỗi hay sự cố nghiêm trọng nào ảnh hưởng đến trải nghiệm người dùng.
Software testing có tầm quan trọng rất lớn trong việc tạo ra một sản phẩm chất lượng cao, an toàn và hiệu quả. Software testing giúp:
• Phát hiện và sửa chữa các lỗi, sự cố, sai sót hay thiếu sót trong phần mềm hay ứng dụng trước khi nó được phát hành cho người dùng cuối, giảm thiểu rủi ro và chi phí cho việc bảo trì, sửa chữa hay thay thế sau này.
• Kiểm tra tính tương thích, khả năng mở rộng, bảo mật, hiệu suất và ổn định của phần mềm hay ứng dụng trên các nền tảng, thiết bị, môi trường và tình huống khác nhau.
• Đánh giá mức độ thỏa mãn các yêu cầu kỹ thuật, kinh doanh và khách hàng của phần mềm hay ứng dụng, cũng như đo lường chất lượng và giá trị của nó.
• Tăng cường sự tin tưởng và uy tín của nhà phát triển và nhà cung cấp phần mềm hay ứng dụng đối với người dùng cuối, đối tác và thị trường.
• Tạo ra một sản phẩm chất lượng cao, an toàn và hiệu quả, mang lại sự hài lòng và trung thành cho người dùng cuối, tăng doanh thu và lợi nhuận cho nhà phát triển và nhà cung cấp phần mềm hay ứng dụng.
Ví dụ: Bạn là tester của ứng dụng vay tiêu dùng số. Bạn có nhiệm vụ kiểm tra xem ứng dụng có hoạt động tốt không, có bị lỗi hay sự cố gì không, có đáp ứng được các yêu cầu của khách hàng và người dùng không, có mang lại giá trị cho họ không. Bạn sẽ thực hiện các bước sau:
1️⃣ Xác định các yêu cầu kỹ thuật, kinh doanh và khách hàng của ứng dụng, ví dụ: ứng dụng phải cho phép người dùng đăng ký, đăng nhập, xem thông tin cá nhân, xem lịch sử giao dịch, vay tiền, trả tiền, liên hệ hỗ trợ; ứng dụng phải bảo mật thông tin cá nhân và tài chính của người dùng; ứng dụng phải có giao diện thân thiện và dễ sử dụng; ứng dụng phải có tốc độ xử lý nhanh và ổn định.
2️⃣ Thiết kế các test case để kiểm tra các yêu cầu trên, ví dụ:
test case 1: kiểm tra chức năng đăng ký;
test case 2: kiểm tra chức năng đăng nhập;
test case 3: kiểm tra chức năng xem thông tin cá nhân; v.v…
3️⃣ Thực hiện các test case trên các nền tảng, thiết bị, môi trường và tình huống khác nhau, ví dụ:
thực hiện test case 1 trên Android, iOS, web;
thực hiện test case 2 trên điện thoại Samsung, iPhone, Huawei;
thực hiện test case 3 khi có kết nối internet và khi không có kết nối internet; v.v…
4️⃣ Ghi nhận và báo cáo kết quả test, ví dụ:
test case 1: pass trên Android và iOS, fail trên web;
test case 2: pass trên Samsung và iPhone, fail trên Huawei;
test case 3: pass khi có kết nối internet, fail khi không có kết nối internet; v.v…
5️⃣ Phối hợp với nhà phát triển để sửa chữa các lỗi hay sự cố phát hiện được trong quá trình test, ví dụ: báo cáo lỗi đăng ký trên web cho nhà phát triển web; báo cáo lỗi đăng nhập trên Huawei cho nhà phát triển Android; báo cáo lỗi xem thông tin cá nhân khi không có kết nối internet cho nhà phát triển backend; v.v…
6️⃣ Kiểm tra lại các lỗi hay sự cố đã được sửa chữa để đảm bảo rằng chúng đã được khắc phục hoàn toàn và không gây ra các lỗi hay sự cố mới.
Trong môi trường Agile, software testing gặp phải nhiều thách thức lớn, như:
👉 Áp lực hoàn thành test trong thời gian ngắn: Trong Agile, các tính năng mới được phát triển và tích hợp liên tục trong các Sprint ngắn (thường từ 2 đến 4 tuần), do đó tester phải thực hiện test nhanh chóng để kịp bàn giao sản phẩm cho khách hàng trong thời hạn. Điều này đòi hỏi tester phải có khả năng làm việc nhanh, chính xác và linh hoạt.
Developers bàn giao sản phẩm test muộn: Do áp lực hoàn thành công việc trong Sprint, developers có thể bàn giao sản phẩm test cho tester muộn hơn so với kế hoạch ban đầu, làm giảm thời gian test của tester và tăng khả năng xảy ra các lỗi hay sự cố không mong muốn. Điều này đòi hỏi tester phải có khả năng làm việc độc lập, chủ động và sáng tạo.
👉 Lượng công việc cần hoàn thành lớn do sản phẩm liên tục được tích hợp: Trong Agile, sản phẩm liên tục được tích hợp để bàn giao cho khách hàng trong các Sprint, do đó tester phải thực hiện test không chỉ cho các tính năng mới mà còn cho các tính năng cũ đã được test trước đó để đảm bảo không có sự ảnh hưởng tiêu cực. Điều này làm tăng lượng công việc cần hoàn thành của tester và đòi hỏi tester phải có kỹ năng quản lý thời gian và ưu tiên công việc tốt.
Ví dụ: Bạn là tester của ứng dụng vay tiêu dùng số. Bạn đang làm việc trong Sprint 5, trong đó có hai tính năng mới là chức năng thanh toán bằng QR code và chức năng nhận mã giảm giá khi giới thiệu bạn bè. Bạn phải thực hiện test cho hai tính năng mới này, cũng như cho các tính năng cũ đã được test trong các Sprint trước, ví dụ: chức năng vay tiền, chức năng trả tiền, chức năng liên hệ hỗ trợ. Bạn phải hoàn thành test trong vòng hai tuần, nhưng developers chỉ bàn giao sản phẩm test cho bạn vào tuần thứ hai. Bạn phải làm sao để kịp thời gian và đảm bảo chất lượng?
Để đối mặt với những thách thức trên, tester cần có những giải pháp sau:
👉 Chuyển dịch mindset trong agile test: Tester cần hiểu rằng mục tiêu của agile test không chỉ là tìm ra các lỗi hay sự cố trong sản phẩm, mà là đảm bảo rằng sản phẩm mang lại giá trị cho khách hàng và người dùng cuối. Tester cũng cần thích nghi với sự thay đổi liên tục của yêu cầu, thiết kế và mã nguồn trong Agile, và hợp tác chặt chẽ với các thành viên khác trong nhóm để tạo ra một sản phẩm chất lượng cao.
Ví dụ: Bạn là tester của ứng dụng vay tiêu dùng số. Bạn không coi mình là người kiểm tra lỗi, mà là người kiểm tra giá trị. Bạn không chỉ kiểm tra xem ứng dụng có hoạt động tốt không, mà còn kiểm tra xem ứng dụng có mang lại sự thuận tiện, an toàn và tiết kiệm cho người dùng không. Bạn không chỉ làm việc theo kế hoạch đã định sẵn, mà còn linh hoạt thay đổi theo yêu cầu của khách hàng và người dùng. Bạn không chỉ làm việc riêng lẻ, mà còn giao tiếp và hỗ trợ các developers, designers, analysts và stakeholders khác trong nhóm.
👉 Xây dựng chiến lược và kế hoạch test phù hợp:
– Tester cần xây dựng một chiến lược và kế hoạch test phù hợp với mục tiêu, ngân sách, thời gian và tài nguyên của dự án.
– Tester cần tập trung vào những tính năng quan trọng nhất, có ảnh hưởng lớn nhất đến giá trị của sản phẩm, và chia hệ thống test cases thành các bộ test dùng vào các mục đích khác nhau: full test, reduced test, regression test, sanity test, smoke test.
T- ester cũng cần xác định các tiêu chí để bắt đầu và kết thúc test, cũng như các phương pháp để theo dõi và báo cáo kết quả test.
Ví dụ: Bạn là tester của ứng dụng vay tiêu dùng số. Bạn xây dựng một chiến lược và kế hoạch test cho Sprint 5 như sau:
👉 Tập trung vào hai tính năng mới là chức năng thanh toán bằng QR code và chức năng nhận mã giảm giá khi giới thiệu bạn bè, vì chúng là những tính năng mang lại giá trị cao cho người dùng và khách hàng.
Chia hệ thống test cases thành các bộ test khác nhau, ví dụ: full test cho hai tính năng mới; reduced test cho các tính năng cũ liên quan đến hai tính năng mới, ví dụ: chức năng vay tiền, chức năng trả tiền; regression test cho các tính năng cũ không liên quan đến hai tính năng mới, ví dụ: chức năng liên hệ hỗ trợ; sanity test cho toàn bộ ứng dụng; smoke test cho các build mới.
👉 Xác định các tiêu chí để bắt đầu và kết thúc test, ví dụ: bắt đầu test khi nhận được sản phẩm test từ developers; kết thúc test khi không có lỗi hay sự cố nghiêm trọng nào còn tồn tại trong sản phẩm.
Xác định các phương pháp để theo dõi và báo cáo kết quả test, ví dụ: sử dụng một công cụ quản lý test như TestRail để ghi nhận và theo dõi các test case, kết quả test, lỗi hay sự cố; sử dụng một công cụ quản lý lỗi như Jira để báo cáo và theo dõi các lỗi hay sự cố; sử dụng một công cụ giao tiếp như Slack để thông báo và trao đổi với các thành viên khác trong nhóm.
👉 Thực hiện test smart: Tester cần thực hiện test một cách thông minh, hiệu quả và linh hoạt. Ví dụ:
– full test chức năng với API, full test GUI và sanity test chức năng trên application sau khi developer tích hợp backend-frontend;
– thiết kế kịch bản test trên góc độ người dùng cuối;
– sử dụng các kỹ thuật và công cụ test mới: Exploratory test, test charter;
– smart trong phát triển automation test: tối đa hoá giá trị của automation test trong regression test (Sprint, release lớn) hoặc sanity hay smoke test với các build nhỏ;
– chia sẻ kịch bản (smoke test) cho developers để Dev chủ động trong việc kiểm tra chất lượng cốt lõi của sản phẩm trước khi bàn giao cho tester thực hiện test;
– thực hiện test toàn diện: phối hợp với cán bộ các bộ phận trong chuỗi vận hành, cung ứng sản phẩm… lên kịch bản smart đảm bảo: thông luồng, phối hợp toàn diện các bên, end-to-end.
Ví dụ: Bạn là tester của ứng dụng vay tiêu dùng số. Bạn thực hiện test smart cho Sprint 5 như sau:
👉 Full test chức năng với API: Bạn sử dụng một công cụ kiểm tra API như Postman để kiểm tra các chức năng mới của ứng dụng ở mức API, ví dụ: kiểm tra xem API có gọi được không, có trả về kết quả đúng không, có bảo mật không, có hiệu suất không. Bạn thực hiện full test chức năng với API để đảm bảo rằng các chức năng mới hoạt động tốt ở mức cơ sở dữ liệu và logic nghiệp vụ.
👉 Full test GUI và sanity test chức năng trên application sau khi developer tích hợp backend-frontend: Bạn sử dụng một thiết bị di động để kiểm tra các chức năng mới của ứng dụng ở mức giao diện người dùng, ví dụ: kiểm tra xem giao diện có đẹp không, có dễ sử dụng không, có phản hồi nhanh không, có tương thích với các kích thước màn hình khác nhau không. Bạn thực hiện full test GUI để đảm bảo rằng các chức năng mới hoạt động tốt ở mức giao diện người dùng. Bạn cũng thực hiện sanity test chức năng để kiểm tra xem các chức năng mới có hoạt động được không, có gây ra lỗi hay sự cố gì cho các chức năng cũ không.
👉 Thiết kế kịch bản test trên góc độ người dùng cuối: Bạn sử dụng kỹ thuật user story để thiết kế các kịch bản test trên góc độ người dùng cuối, ví dụ: “Tôi là một người dùng của ứng dụng vay tiêu dùng số. Tôi muốn thanh toán bằng QR code để tiết kiệm thời gian và chi phí. Tôi mong muốn khi tôi quét mã QR của người nhận tiền, ứng dụng sẽ tự động điền số tiền và thông tin người nhận, và cho phép tôi xác nhận thanh toán.” Bạn thực hiện thiết kế kịch bản test trên góc độ người dùng cuối để đảm bảo rằng các chức năng mới mang lại trải nghiệm tốt cho người dùng.
👉 Sử dụng các kỹ thuật và công cụ test mới: Exploratory test, test charter: Bạn sử dụng các kỹ thuật và công cụ test mới để thực hiện test một cách sáng tạo và linh hoạt. Exploratory test là một kỹ thuật test trong đó bạn tự do khám phá sản phẩm và tìm ra các lỗi hay sự cố mà không theo một kịch bản hay hướng dẫn cụ thể. Test charter là một công cụ giúp bạn lên kế hoạch cho exploratory test, bao gồm mục tiêu, phạm vi, chiến lược và kết quả mong muốn của exploratory test. Bạn sử dụng exploratory test và test charter để thực hiện test trong những trường hợp bạn không có nhiều thời gian hay tài nguyên để thiết kế và thực hiện các test case truyền thống.
👉 Smart trong phát triển automation test: tối đa hoá giá trị của automation test trong regression test (Sprint, release lớn) hoặc sanity hay smoke test với các build nhỏ:
👉 Bạn sử dụng automation test để tự động hoá các test case lặp đi lặp lại, tiết kiệm thời gian và công sức. Bạn smart trong phát triển automation test bằng cách chọn lựa những test case phù hợp để automation, ví dụ: những test case có mức độ ưu tiên cao, có tần suất thực hiện nhiều, có kết quả mong muốn rõ ràng, có bước thực hiện đơn giản và ổn định.
👉 Bạn tối đa hoá giá trị của automation test bằng cách sử dụng nó trong những trường hợp có hiệu quả cao, ví dụ: regression test để kiểm tra các tính năng cũ sau khi thêm các tính năng mới trong các Sprint hay release lớn; sanity hay smoke test để kiểm tra chất lượng cốt lõi của sản phẩm với các build nhỏ.
👉 Chia sẻ kịch bản (smoke test) cho developers để Dev chủ động trong việc kiểm tra chất lượng cốt lõi của sản phẩm trước khi bàn giao cho tester thực hiện test: Bạn sử dụng kỹ thuật shift-left testing để thúc đẩy sự hợp tác và chia sẻ trách nhiệm giữa tester và developers trong việc kiểm tra chất lượng sản phẩm. Bạn chia sẻ kịch bản (smoke test) cho developers để Dev có thể tự kiểm tra chất lượng cốt lõi của sản phẩm trước khi bàn giao cho tester thực hiện test. Bạn mong muốn rằng Dev sẽ phát hiện và sửa chữa các lỗi hay sự cố cơ bản trong sản phẩm, giúp giảm thiểu thời gian và công việc cho tester.
👉 Thực hiện test toàn diện: phối hợp với cán bộ các bộ phận trong chuỗi vận hành, cung ứng sản phẩm… lên kịch bản smart đảm bảo: thông luồng, phối hợp toàn diện các bên, end-to-end: Bạn sử dụng kỹ thuật shift-right testing để mở rộng phạm vi và độ sâu của test, không chỉ ở mức phần mềm hay ứng dụng, mà còn ở mức hệ thống, mạng lưới và người dùng. Bạn phối hợp với cán bộ các bộ phận trong chuỗi vận hành, cung ứng sản phẩm, ví dụ: nhân viên kinh doanh, nhân viên tư vấn, nhân viên kỹ thuật, nhân viên hỗ trợ khách hàng… để lên kịch bản smart đảm bảo: thông luồng, phối hợp toàn diện các bên, end-to-end. Bạn thực hiện test toàn diện để kiểm tra xem sản phẩm có hoạt động tốt không chỉ ở mức phần mềm hay ứng dụng, mà còn ở mức hệ thống, mạng lưới và người dùng.