Bạn không hài lòng với sự so sánh và tương phản làm chủ đề cho các bài báo à? Tôi biết tôi cũng thấy thế. Nó rất dễ gây ra những suy nghĩ, bình luận hoặc thậm chí là những phản đối gay gắt.

Topic ngày hôm nay nói đến sự khác nhau giữa Retesting và Regression test.

Hãy bắt đầu với Retesting:

Retest có nghĩa là kiểm tra lại. Khi bạn lặp lại một kiểm thử thì đó chính là retest. Bạn có thể test lại chức năng của phiên bản hiện tại, một bug đã fix, chức năng của phiên bản trước đó hay một test case bạn vừa thực hiện, vv…

Nếu bạn vẫn suy nghĩ tại sao lại phải làm vậy thì hãy theo dõi một vài lý do sau:

  • Hôm qua bạn thực hiện một kiểm thử và gặp phải một khiếm khuyết. Bạn muốn xác nhận các bước và tái hiện lại khiếm khuyết. Vì vậy bạn phải retest.

  • Bạn chạy một kiểm thử tuy nhiên vì một lý do nào đó mà bạn không để ý đến nó (Có thể bạn có điện thoại hoặc bạn đang nói chuyện với một người bạn, vv…). Bạn muốn kiểm tra lại một lần nữa, vì vậy bạn phải retest.

Tôi chắc chắn bạn đã nắm được điều này.

Retesting là khi bạn lặp lại một kiểm thử cho bầt kỳ một lý do nào. Đây là một trong những điều kiện gần đúng với định nghĩa của nó.

Regression Test:

Phần mềm được nâng cấp, sẽ có những phiên bản mới hơn phiên bản hiện tại, có những tính năng được thêm mới, có những tính năng được mở rộng,vv… Tuy nhiên, theo thời gian điều này có thể dẫn đến sự mất ổn định của ứng dụng.

Hãy tưởng tượng bạn xây dựng một toà tháp khối bằng cách thêm một block lên trên một block khác. Bạn không có thời gian để kiên cố cho phần chân tháp, nó sẽ không tồn tại được lâu dài đến khi toàn tháp bị phá huỷ có phải không?

Cứ như vậy, bạn sẽ phải kiểm tra mức độ tin cậy và tính ổn định của phần mềm. Để làm được như vậy thì bạn cần phải retest lại phần mềm. Đó là cách duy nhất.

Regression là một dạng của Retest. Những đặc trưng của "Why" và "When" là những điểm khác biệt giữa test hồi quy so với retest.

When: khi nào chúng ta thực hiện retest? Khi phần mềm trải qua một sự thay đổi.

Why: tại sao chúng ta phải retest? Để đảm bảo việc thêm mới và thay đổi các tính năng không làm ảnh hưởng đến sự ổn định của các chức năng cũ. Regression là phần thực hiện chung và được yêu cầu khi:

  • Một phiên bản mới trở nên có hiệu lực. (Hồi quy tất cả hoặc ít nhất một tính năng quan trọng của phiên bản cũ).
  • Bug đã được fix.

Note: Kiểm thử hồi quy toàn bộ ( Exhaustive regression testing) là không thể thực hiện mặc dù rất mong muốn.

Đó là lý do tại sao phải phân tích Regression trước khi bạn nhảy luôn vào thực hiện kiểm thử. Đây là bước quan trọng liên quan đến việc quyết định cần phải thực hiện bao nhiêu Regression cho một ứng dụng.

Thực hiện kiểm thử hồi quy phụ thuộc vào những mức độ nào?

  • Tính chất của sự thay đổi
  • Mối quan hệ/tác động của sự thay đổi lên các tính năng và hệ thống hiện tại.
  • Thời gian có hiệu lực và nguồn lực.

Tester làm thế nào để xác định được mức độ của Regression?

  1. Dựa vào kinh nghiệm và sự hiểu biết với ứng dụng.
  2. Việc thảo luận với các deverloper.
  3. Những nơi mà sự thay đổi được thực hiện. Ví dụ: Nếu sự thay đổi được thực hiện trên trang chủ, thì cần phải quan tâm nhiều hơn so với những trang có lượt truy cập ít hơn.

Tùy thuộc vào các nhân tố khi hoạt động, một tập hợp kiểm thử có thể thực hiện theo một trong những follow sau:

  • Unit Regression

  • Partial Regression

  • Full Regression

Unit regression nghĩa là bạn chỉ cần thực hiện retest đối với sự thay đổi ở module hoặc vùng nào đó của ứng dụng.

Partial regression nghĩa là bạn sẽ thực hiện retest đối với sự thay đổi ở các module kèm theo những tương tác với nó.

Full regression là bạn sẽ phải kiểm tra lại toàn bộ ứng dụng, không phụ thuộc vào vị trí của sự thay đổi.

Điều này dựa trên tình hình (thời gian và nguồn lực sẵn có), mức độ nghiêm trọng của sự thay đổi (mức độ ảnh hưởng của nó), đầu vào của deverlopver, vv… Sẽ hiệu quả hơn khi bạn lựa chọn đúng một bộ kiểm thử so với việc kiểm thử toàn bộ.

Phân tích Regression là một yếu tố quan trọng mang lại sự thành công. Nó cần sự thông minh hơn là sự chăm chỉ.

Những quan niệm sai lầm về Regression Testing:

Có rất nhiều quan niệm sai lầm về Regression Testing:

#1) Regression luôn luôn được thực hiện một cách tự động: Không, Regression cũng được thực hiện bằng cách thủ công.

Lưu ý rằng Regression là một ứng viên hoàn hảo cho kiểm thử tự động. Mức độ của sự lặp đi lặp lại gây tốn thời gian và có thể dẫn đến sự nhàm chán. Ngoài ra những validation quan trọng có thể bị bỏ sót. Kiểm thử tự động là một sự lựa chọn đáng tin cậy, nhanh chóng và hiệu quả.

#2) Regression là không bao giờ hoàn thành: Đúng, nhưng không hoàn toàn. Theo những gì tôi nghĩ thì kiểm thử hồi quy toàn bộ có thể là không thể. Nhưng kiểm thử hồi quy toàn bộ có thể không quá cần thiết.

Giả sử rằng bạn đã thay đổi một lỗi chính tả trên trang chủ. Việc sửa chữa này là rất nhỏ. Nó cũng được độc lập với các khu vực khác của ứng dụng. Vậy, một quá trình retest đơn giản của tính năng này sẽ làm gì. Không cần thực hiện hồi quy tính năng cũ xung quanh trang chủ.

#3) Nó là không cần thiết khi bạn có nhiều công việc chồng chéo nhau trong cùng một khoảng thời gian: Không đúng. Nếu không thực hiện hồi quy sẽ dấn đến việc mất độ tin cậy trong sản phẩm. Bạn sẽ không bao giờ biết được những kỳ vọng đến từ những kịch bản khác nhau của end user.

#4) Nó chính là việc chạy hết từng test case riêng lẻ của bản release trước đó: Không nên chạy lại toàn bộ test case của bản trước đó. Cần lựa chọn đúng những test case phù hợp để test lại. Chiến lược chọn các test case là mấu chốt của vấn đề. Hiểu được sự thay đổi và lựa chọn những test case phù hợp.

Đúng vậy, đó chính là chi tiết của Retesting và Regression Test.

Bây giờ, hãy thực hiện so sánh:

Sự giống nhau giữa Retesting và Regression Test:

  • Nền tảng của cả hai đều là sự lặp lại.

  • Đều là kỹ thuật Validation và Black box testing.

  • Retest và Regression đều thực hiện được bằng kiểm thử tự động hoặc kiểm thử thủ công.

  • “Người ta phải xác nhận hoặc xóa bỏ nghi ngờ của mình, và biến nó thành sự chắc chắn của ĐÚNG hoặc SAI" (One must verify or expel his doubts, and convert them into the certainty of YES or NO) theo danh ngôn của Thomas Carlyle. Cả Retesting và Regression Test đều thực hiện điều này.

Sự khác nhau giữa Retesting và Regression Test:

  • Retesting được sử dụng cho bất kỳ kiểm thử nào – Chức năng của phiên bản trước hoặc phiên bản hiện tại là mục tiêu ngắm đến. Regression lấy chức năng của phiên bản trước là trung tâm.

  • Retesting không phụ thuộc vào sự thay đổi của ứng dụng. Regression hướng đến sự thay đổi của ứng dụng.

Cuối cùng, để ghi nhớ khái niệm này:

Bạn nói rằng có một Test case XYZ mà kết quả có một khiếm khuyết với là ID 120. Khiếm khuyết này được fix trong bản release tiếp theo. Bạn muốn retest test case XYZ và kiểm thử hồi quy các chức năng xung quanh nó. Hồi quy là để đảm bảo rằng tất cả mọi thứ không bị ảnh hưởng sau khi sửa lỗi 120. Retest là để xác định khiếm khuyết đã được sửa chữa.

Vì vậy, không phải Retest cũng không phải Regression, nhưng sự kết hợp giữa chúng tạo nên một bộ đôi mạnh mẽ.

Tài liệu tham khảo: http://www.softwaretestinghelp.com/retest-vs-regression-testing/