Chi tiết bài viết
Tóm tắt nội dung
- 1 Agile testing là gì?
- 2 TÌm hiểu ưu và nhược điểm bên trong agile testing
- 3 Nhược điểm của phương pháp agile testing:
- 4 Các yếu tố để thực hiện thành công 1 quy trình agile testing
- 4.1 Sử dụng phương pháp tiếp cận nhóm
- 4.2 Sở hữu tư duy làm việc của Agile testing
- 4.3 Automation trong quy trình regression testing?
- 4.4 Đưa ra và nhận lại phản hồi
- 4.5 Xây dựng nền móng thực hành các giá trị Agile testing
- 4.6 Đặt mình vào vai trò của khách hàng để hợp tác với họ
- 4.7 Có cái nhìn tổng quan vào bài test
Agile testing cũng như nhiều phương pháp kiểm thử khác chiếm một vai trò rất quan trọng trong quy trình kiểm thử chất lượng phần mềm. Vậy chính xác agile testing là gì? Phương pháp kiểm thử này có ưu và nhược điểm gì? Và làm thế nào để kiểm thử agile được hiệu quả.
Agile testing là gì?
Agile testing là một phương pháp kiểm thử riêng biệt tuân thủ những nguyên tắc và quy tắc rất nghiêm ngặt được thực hiện bởi phần mềm Agile. Nếu như đa số phương pháp test khác chỉ được thực hiện sau khi quá trình phát triển phần mềm đã hoàn thiện thì Agile test được thực hiện liên tục và song song kể từ khi giai đoạn phát triển bắt đầu.
Quá trình test agile được thực hiện nhằm đảm bảo phần mềm có chất lượng cao nhất và đúng với những yêu cầu của khách hàng. Đối với những phần mềm mà yêu cầu đầu vào của khách hàng liên tục thay đổi thì việc sử dụng các phương pháp kiểm thử lặp lại liên tục là tất yếu và trong các phương pháp đó Agile testing là hiệu quả nhất.
TÌm hiểu ưu và nhược điểm bên trong agile testing
Ưu điểm của phương pháp agile testing:
- Đối với những dự án nhỏ mà yêu cầu đầu vào được thay đổi liên tục hoặc không được xác định yêu cầu đầu vào ngay từ đầu thì agile testing là giải pháp cho vấn đề này
- Với agile testing, nhân viên kiểm thử cũng như developer có thể theo dõi từng phần của dự án từ lúc bắt đầu cho đến khi kết thúc, bám rất sát các chi tiết và khi có những thay đổi thì dễ dàng bắt nhịp.
- Phương pháp tiết kiệm khá nhiều thời gian và tiết bạc so với các phương pháp kiểm thử lặp lại liên tục
- Nâng cao tỉ lệ thành công của dự án
Nhược điểm của phương pháp agile testing:
Dù là một phương pháp vô được đánh giá rất cao thế nhưng agile testing vẫn tồn tại cho mình một vài khuyết điểm:
- Kết quả đầu ra của dự án rất khó được dự đoán trước vì có khá ít tester documentation cho phương pháp này.
- Trong quá trình sửa các lỗi mà Agile testing phát hiện rất dễ phát sinh những lỗi mới
- Chỉ phù hợp với các dự án nhỏ vì bản thân việc thực hiện Agile testing cũng đã tương đối phức tạp nên ở các dự án khó việc áp dụng agile testing sẽ là một trở ngại
Nhìn chung với phương pháp Agile, Kiểm thử viên có thể phát hiện các bugs một cách tương đối nhanh chóng tuy nhiên để thực hiện lại tương đối phức tạp.
Các yếu tố để thực hiện thành công 1 quy trình agile testing
Sử dụng phương pháp tiếp cận nhóm
Quá trình kiểm thử Agile tương đối phức tạp, chính vì vậy đội ngũ phát triển cần tập hợp tất cả kỹ năng và kinh nghiệm nhóm:
- Quá trình kiểm thử diễn ra ở mức độ ưu tiên cao, nhóm kiểm thử cần thiết kế mã nguồn riêng cho việc test
Nếu là một manager quản lý nhóm Agile thì bạn luôn phải đặt mục tiêu chất lượng của phần mới mới là ưu tiên hàng đầu chứ không phải là tốc độ phát triển. Các kiểm thử viên cần làm rõ yêu cầu phát triển và biến chúng trở thành thành phương pháp để hoàn thiện sản phẩm
- Các kỹ năng của các thành viên trong nhóm luôn phải được phát huy tối đa và kỹ năng làm việc nhóm của các thành viên phải được vận hành tối đa
- Vai trò của các thành viên trong nhóm có thể được luân chuyển linh hoạt dựa trên kỹ năng và công việc thực t
Sở hữu tư duy làm việc của Agile testing
Đội ngũ kiểm thử Agile luôn phải có những suy nghĩ:
- Làm thế nào để sản phẩm tốt hơn?
- Vai trò của từng Agile tester trong quy trình là như thế nào?
- Thái độ tiếp cận đối với phương pháp Agile testing là như thế nào?
Để thực hiện hoàn thiện 1 quy trình Agile testing, tester luôn chủ động với những ý tưởng mới và sẵn sàng đảm nhận mọi vị trí trong đội ngũ kiểm thử. Để thực hiện các quy trình khó khăn này, các cá nhân trong đội ngũ kiểm thử cần sẵn sàng chia sẻ kiến thức và kinh nghiệm của bản thân cho các thanh viên khác trong nhóm. Họ cũng là những người luôn chia sẻ niềm đam mê về chất lượng với những người cùng nhóm, tập trung vào các mục tiêu của nhóm và thực hiện những gì trong khả năng để giúp mọi người hoàn thành công việc tốt nhất trong khả năng của mình.
Cách để trở thành một Agile tester giỏi:
- Luôn tìm tòi các kỹ năng và phương pháp kiểm thử mới, để nâng cao kỹ năng của mình
- Liên tục tham gia các diễn đàn trao đổi kinh nghiệm làm việc Agile testing
- Tham gia vào các cuộc thảo luận qua email list để lấy được các phản hồi về các vấn đề hay ý tưởng mới.
Các cách thực hiện:
- Thử nghiệm những phương pháp thực hành, công cụ và những kỹ thuật mới
- Khuyến khích các thành viên trong nhóm thực hiện theo phương pháp Agile mới
- Tận dụng các vòng lặp ngắn để thực hiện Agile testing
- Sử dụng biểu đồ để tất cả mọi người nắm được những vấn đề phát sinh đồng thời theo dõi tiến độ viết code cũng như quá trình test.
Automation trong quy trình regression testing?
Quá trình Agile testing tương đối phức tạp nếu chỉ thực hiện quá trình Manual test thì rất dễ diễn ra sai sót, chính vì vậy các nhóm kiểm thử đều sẽ sử dụng đến phương pháp Automation test. Kiểm thử viên mà dành toàn bộ thời gian vào quy trình kiểm thử hồi quy thủ công sẽ mất rất nhiều thời gian và không sức trong khi hầu hết các các quy trình kiểm thử thăm dò khác cũng rất quan trọng.
Quá trình Regression testing hoàn toàn có thể sử dụng kiểm thử tự động để điều hướng phát triển. Các chu kỳ phản hồi ngắn đều có sự xuất hiện của mạng lưới an toàn hồi quy, nếu chúng không xuất hiện thì chứng tỏ phần mềm đã xảy ra lỗi. Nhóm kiểm thử của bạn sẽ nhanh chóng chìm trong đống kỹ thuật detect và tốc độ truyền của phần mềm là rất chậm. Các công cụ kiểm thử rất cần được thực hiện trong những tình huống này. Nghĩ về các kiểm thử trước đó sẽ cho phép các lập trình viên thiết kế mã dễ dàng cho kiểm thử tự động. Sử dụng các góc phần tư của kiểm thử Agile (Agile testing quadrants) và kim tự tháp kiểm thử tự động (test automation pyramid) để giúp bạn quyết định kiểu kiểm thử sao cho hiệu quả.
Khi bắt đầu các kiểm thử tự động, sẽ xuất hiện một ‘hump of pain” lớn cần vượt qua, dù mất tương đối nhiều thời gian nhưng nhờ có sự hỗ trợ của các công cụ Tester có thể vượt qua.
Xem thêm: REGRESSION TEST LÀ GÌ? TẤT TẦN TẬT NHỮNG ĐIỀU CẦN BIẾT VỀ KIỂM THỬ HỒI QUY.
Đưa ra và nhận lại phản hồi
Bản chất của Agile testing là hỗ trợ chương trình thay đổi đúng với những thay đổi trong yêu cầu đầu vào của khách hàng. Chính vì vậy phản hồi là giá trị cốt lõi của Agile. Các vòng lặp ngắn bên trong Agile được thiết kế để đáp ứng khả năng kiểm thử liên tục để giữ cho quá trình làm việc của đội ngũ kiểm thử đi đúng lộ trình. Kiểm thử viên đưa ra kết quả kiểm thử sau một quá trình kiểm thử tự động.
Phương pháp Agile cho phép team nhận kết quả phản hồi liên quan đến phần mềm đang phát triển. Phản hồi làm việc trên các mức độ. Pair programing bên trong Agile giúp lập trình viên cũng như kiểm thử viên phản hồi liên tục trên đoạn code của họ. Storíe là đại điện cho các đơn vị công việc mà kiểm thử viên đưa ra phản hồi dành cho developers. Đồng thời sử dụng vòng lặp cũng giúp team nhận các phản hồi từ bên ngoài.
Các đội ngũ kiểm thử Agile bằng phương pháp grab-bag có thể không nhận ra mấu chốt của mô hình. Khi các pair programming không được thảo luận trước, các đoạn code được gửi thẳng đến QA mà không kiểm thử trước vì các giá trị biên trong đoạn code không thống nhất. Chính vì thế rất khó kết luận rằng đã tìm được bugs hay chưa.
Việc đưa ra và nhận lại những phản hồi thật sự có ý nghĩa là công việc khá khó khăn tuy nhiên tuy nhiên đây lại là điểm mấu chốt để quá trình Agile testing thành công. Cần phải lưu ý là việc sử dụng phương pháp Agile testing không làm rút ngắn quá nhiều thời gian kiểm thử mà chỉ thực sự hữu ích để ứng biến trước những thay đổi yêu cầu từ đầu vào. Và khả năng thích nghi của Agile testing cần được lan toả tới không chỉ đội ngũ kiểm thử và phát triển mà còn cần tới cả người dùng cuối cùng.
Xây dựng nền móng thực hành các giá trị Agile testing
Các giá trị của Agile test bao gồm: Tích hợp liên tục, môi trường kiểm thử, quản lý Technical Debt, Tăng trưởng công việc, Coding và testing và tương tác giữa các phần thực hành.
Tích hợp liên tục
Các nhóm phát triển và kiểm thử quản lý một mã nguồn và tích hợp liên tục để thành công. Cần phải xác định rõ mục tiêu kiểm thử để có thể đi đúng hướng bởi không thể kiểm thử toàn bộ phần mềm từ đầu đến cuối nếu không có mã nguồn hoạt động. Mỗi tích hợp cần được xác định bởi 1 built tự động đã bao gồm các kiểm thử. Thực hiện quy trình tích hợp liên tục sẽ là ưu tiên hàng đầu. Nếu không có verified build thì hãy dừng ngay lại việc phát triển để kiểm tra tổng thể.
Thích nghi với các môi trường kiểm thử
Quá trình kiểm thử sẽ rất khó khăn nếu môi trường kiểm thử không được tốt. Khi quá trình kiểm thử diễn ra, nên tập trung vào phần cứng vì đây là nơi tập trung nhiều mã nguồn có sẵn cho các môi trường kiểm thử, nên đầu tư để có thể tiến hành các kiểm thử tự động và nhanh chóng hiệu quả.
Quản lý Technical debt
Các dữ liệu ở mã nguồn và tỷ lệ Detects cần phải được đo và ghi chép lại. Các nhóm phát triển đôi khi phải giảm phạm vi và một vài tính năng mong muốn để dành thời gian cho việc thiết kế mã nguồn. Độ bao phủ tốt từ quá trình automation regression Agile testing là chìa khoá để giảm Technical debt. Nếu không thể quản lý Technical debt, thời gian cũng như ngân sách dành cho các vòng lặp sẽ được chạy automation. Đồng thời cũng cần nâng cấp thêm các công cụ cần thiết để viết kịch bản kiểm thử và thực hiện khả năng tái cấu trúc chính
Tăng trưởng công việc
Các chương trình, phần mềm phát triển thành công với Agile test đều chủ yếu là các dự án nhỏ. Stories của agile được hoàn thiện chỉ sau 1 vài ngày làm việc, một 1 story được chia thành các phần nhỏ và xây dựng từng bước một. Điều này cho phép quá trình kiểm thử được chi tiết riêng lẻ từng chút một và khả năng phát hiện ra các bugs sẽ cao hơn. Thay vì cố gắng thực hiện quá trình kiểm thử tổng thể dẫn đến bỏ sót bugs thì việc thực hiện test theo từng phần của story sẽ đạt hiệu quả cao.
Coding và testing
Kịch bản kiểm thử được xây dựng dựa theo các mẫu có trước từ khách hàng để giúp cho programmers dễ dàng hình dung. Các coder và tester thống nhất một ngôn ngữ lập trình chung cho phần mềm phát triển. Tester và programmer phối hợp chặt chẽ khi thao tác trên mã nguồn tiếp diễn để có thể hiểu được những yêu cầu mà customer đưa ra. Trong khi programer cố gắng mô tả các chức năng mà các đoạn code thực hiện thì tester lại mô tả ngược lại những hành vi không mong muốn mà các đoạn code gặp phải. Mỗi vòng lặp bên trong Agile testing chứa hàng chục vòng lặp test-code-test-code-test-code, liên tục và nhanh chóng tăng trưởng.
Khi chu kỳ hợp tác và phản hồi này bị phá vỡ, quá trình kiểm thử bị tách riêng khỏi phần phát triển, nguy cơ rủi ro sẽ rất cao. Nếu quá trình test vòng lặp sau khi phần coding được hoàn thành mới tìm ra được lỗi thì programer phải ngừng việc phát triển phần mềm và sửa lại nó ngay lập tức
Tương tác giữa các phần chu trình
1 chu trình thực hiện Agile testing, tích hợp liên tục có thể dẫn đến 1 số khác biệt nhưng sự kết hợp của nhiều chu kỳ lặp sẽ trở lên rất hoàn hảo. Các điều hướng kiểm thử hay các mã nguồn riêng tích hợp với nhau sẽ nhanh chóng đưa ra phản hồi để có thể đưa ra những cải tiến và phát hành thương mại hoá phần mềm. Tự động hoá quá quá trình kiểm thử để phát hiện những lỗi nghiêm trọng hơn. Các chu trình xảy ra lỗi sẽ bị cô lập để sửa chữa riêng.
Đặt mình vào vai trò của khách hàng để hợp tác với họ
Những vai trò mà kiểm thử viên đem lại cho khách hàng thông qua quá trình Agile testing là:
- Phân loại và đánh giá mức độ ưu tiên của các yêu cầu
- Minh hoạ các yêu cầu đó thành các ví dụ cụ thể về hành vi mong muốn cũng như các kịch bản mà người dùng có thể gặp phải.
Công việc của tester trong Agile tester là truyền đạt trực tiếp các yêu cầu của người dùng đến với đội ngũ developer. Một sản phẩm có chất lượng tốt thì đòi hỏi liên tục nâng cấp về mặt chức năng để thực hiện được điều này thì cả khách hàng, tester và developer không được phép trông chờ vào vai trò riêng của nhau mà phải linh hoạt, không ngừng đưa ra các ý tưởng để cùng nâng cấp chương trình tổng thể.
Có cái nhìn tổng quan vào bài test
Từ việc đặt mình vào vị trí của người dùng cuối cùng, tester sẽ luôn cần đặt câu hỏi rằng: việc phát triển các chức năng mới có làm phá vỡ cấu trúc và ảnh hưởng các chức năng cũ của ứng dụng hay không? Và điều gì sẽ xảy ra nếu quá trình kiểm thử không phát hiện ra toàn bộ lỗi để ảnh hưởng tới trải nghiệm người dùng cuối cùng của khách hàng.
Trong một số trường hợp giao diện người dùng có thể được thiết kế một cách hoàn hảo nhưng các chi tiết như màu nền, font chữ khó đọc cũng sẽ ảnh hưởng đến trải nghiệm của end user.
Ngoài ra, chúng ta có thể sử dụng các Agile testing quadrants như một hướng dẫn để hỗ trợ việc lên kế hoạch kiểm thử:
- Sử dụng ý tưởng test pyramid để đảm bảo ROI tốt từ kiểm thử tự động của bạn.
- Phát triển hướng kiểm thử (test driven development ) giúp đảm bảo không quên bất cứ thứ gì lớn.
- Sử dụng kiểm thử thăm dò để tìm hiểu nhiều hơn về ứng dụng sẽ làm việc như thế nào, và kiểm thử của bạn phải thực hiện theo hướng nào.
- Tạo môi trường kiểm thử tương tự với production nhất có thể, sử dụng dữ liệu được phản ánh từ thế giới thực.
Trên đây là những chia sẻ của Daotaotester về quá trình Agile testing. Mong rằng bạn đọc đã có được hình dung về kiểm thử Agile và các yếu tố để thực hiện quá trình này thành công để áp dụng vào công việc kiểm thử của mình.