Làm quen kiểm thử tự động

Theo Mohammad Saad

Để bắt đầu tự động hóa dự án kiểm thử, chúng ta thường cần giải quyết những vấn đề cơ bản như:

  • Làm sao để áp dụng kiểm thử tự động vào dự án hiện tại?
  • Làm sao để chọn một công cụ đúng và tốt nhất?
  • Làm cách nào để phát triển kịch bản kiểm thử tự động hiệu quả?
  • Và, những cách giải quyết vấn đề từ những người đi trước mà chúng ta nên học hỏi để việc kiểm thử tự động của chúng ta thành công hơn?

Loạt bài này, Làm quen với kiểm thử tự động, hy vọng sẽ là một hướng dẫn hữu ích, giúp chúng ta trả lời những câu hỏi ở trên.
Chúng ta sẽ đi qua 7 chương để có thể áp dụng kiểm thử tự động trong dự án.

  • Giới thiệu kiểm thử tự động
  • Các loại kiểm thử tự động và các hiểu lầm căn bản
  • 10 bước để áp dụng kiểm thử tự động vào dự án
  • Chọn công cụ kiểm thử tự động phù hợp
  • Phát triển mã kiểm thử tự động và các mô hình kiểm thử tự động
  • Thực thi và báo cáo kết quả kiểm thử tự động
  • Kinh nghiệm và chiến lược cho kiểm thử tự động

Kiểm thử tự động là gì và tại sao chúng ta cần đến nó

Nếu phần mềm có thể làm được bất kỳ thứ gì, tại sao lại không viết ra một chương trình để kiểm thử phần mềm?

Bạn cảm thấy câu nói này thế nào? Nếu bạn đồng ý, thì thật tuyệt, bạn đã bắt đầu nghĩ về kiểm thử tự động.

Một câu chuyện điển hình
Thử tưởng tượng, ngày đầu tiên khi bạn tham gia một dự án với vai trò một kỹ sư kiểm thử. Bạn được làm quen với một ứng dụng, ví dụ như một hệ thống hoạch định tài nguyên cho doanh nghiệp ERP với hơn 100 form, mỗi form lại có khoảng trên dưới 50 ô dữ liệu (textbox, radio box, check box, v.v…) cần điền thông tin. Bạn truy cập vào một form bất kỳ và nhập dữ liệu cho nó – 20 phút trôi qua – rồi bạn nhấn nút chuyển dữ liệu lên máy chủ. Woooooww… Một màn hình lỗi hiện ra, trông như một ngoại lệ (exception) mà hệ thống chưa xử lý. Bạn vui mừng, bạn viết lại các bước và dữ liệu đã điền vào form, làm lại một lần nữa để xác nhận lỗi. Cuối cùng, bạn viết báo cáo lỗi trên hệ thống quản lý. Một nỗ lực tuyệt vời, bạn cảm thấy thật tự tin và tràn năng lượng. Bạn tiếp tục kiểm thử hệ thống đến hết ngày, tìm ra được thêm vài lỗi mới. “Một ngày tuyệt vời”, bạn nghĩ.
Ngày mới bắt đầu, nhóm phát triển đã sửa xong lỗi và đưa ra một phiên bản mới. Bạn làm việc với form của ngày hôm qua với cùng các bước và dữ liệu cũ. Lỗi đã được sửa. Một nỗ lực đáng ghi nhận. Bạn đã góp phần vào chất lượng của ứng dụng vì xác định một lỗi; và khi lỗi được sửa, chất lượng ứng dụng đã được nâng cao.
Lại qua một ngày mới, nhóm phát triển lại đưa ra một phiên bản mới. Bạn lại lập lại các bước của lỗi được phát hiện trong ngày đầu tiên, với cùng một kịch bản, để đảm bảo không có vấn đề qui hồi nào xảy ra với phiên bản mới này. Lại 20 phút – và bạn đã bắt đầu cảm thấy hơn chán rồi.
Liên tục một tháng sau đó, phiên bản mới của hệ thống được nhóm phát triển đưa ra hằng ngày, và bạn – kỹ sư kiểm thử – tiếp tục làm công việc nhập dữ liệu cho hơn 100 form chỉ để đảm bảo không xảy ra bất kỳ sự cố qui hồi nào.
Bạn cảm thấy bực bội và mệt mỏi. Bạn bắt đầu bỏ qua vài bước trong kịch bản – chỉ nhập liệu khoảng 50% số ô dữ liệu. Sự chính xác của bạn không còn được như lúc đầu, năng lượng của bạn cạn kiệt và những bước bạn làm không hoàn toàn giống với kịch bản gốc.
Một ngày đẹp trời, khách hàng báo lại một lỗi y như lỗi mà bạn đã phát hiện trong ngày đầu tiên ở dự án. Bạn cảm thấy thật thảm hại. Bạn đánh mất sự tự tin vào bản thân. Bạn nghĩ bạn không đủ năng lực làm việc. Còn sếp thì đặt câu hỏi về khả năng làm việc của bạn.

Tin mừng cho bạn đây. Bạn không phải là người duy nhất gặp phải vấn đề này. Hầu hết kỹ sư kiểm thử đều từng trải qua việc này.

Vấn đề kiểm thử qui hồi là một vấn đề gây nhức nhối. Chúng ta là con người. Chúng ta không thể làm cùng một việc với cùng một năng lượng, cùng tốc độ và độ chính xác ngày này qua ngày khác. Đó là những gì máy móc có thể làm. Tự động hóa được hình thành dựa trên những yêu cầu đó. Để có thể làm cùng một việc với cùng một tốc độ, độ chính xác và năng lượng y như lần đầu tiên. Rõ ràng, phải không nào?

Bất cứ khi nào bạn gặp tình trạng tương tự như vậy, bạn nên tự động hóa việc kiểm thử. Kiểm thử tự động là bạn đồng hành của chúng ta. Nó giúp chúng ta tập trung vào các chức năng mới trong khi nó, thay mặt chúng ta, xử lý kiểm thử qui hồi. Với tự động hóa, một form có thể được điền dữ liệu không đến 3 phút. Mã kiểm thử điền thông tin vào tất cả ô dữ liệu và cho chúng ta biết kết quả cuối cùng, chụp màn hình nếu cần thiết. Trong trường hợp kiểm thử thất bại (failed), nó sẽ chỉ ra cho chúng ta thấy nơi xảy ra lỗi, từ đó chúng ta có thể thử lại lỗi, một cách thủ công, trước khi viết báo cáo lỗi.

Vài trường hợp khác mà chúng ta cần tự động hóa kiểm thử

Ví dụ ở trên không phải là trường hợp duy nhất mà chúng ta cần đến kiểm thử tự động. Có nhiều kịch bản kiểm thử khác mà chúng ta khó, hay không thể, tiến hành với phương pháp thủ công.

  • So sánh 2 hình
  • So sánh 2 bảng dữ liệu với hàng ngàn dòng và cột
  • Kiềm thử khả năng chịu tải của ứng dụng với hơn vài ngàn người dùng
  • Tìm điểm Nút Cổ Chai của ứng dụng
  • Kiểm thử một ứng dụng với nhiều trình duyệt và hệ điều hành khác nhau, một cách song song

Những trường hợp như vậy cần thiết phải, hay nên, được kiểm thử bằng một công cụ tự động.

Ví dụ khác về kiểm thử tự động

Khi bạn đang kiểm thử một ứng dụng, bạn thường sử dụng chuột và bàn phím để thực thi các bước. Các công cụ tự động bắt chước các hành động của bạn bằng cách sử dụng các ngôn ngữ lập trình.

Ví dụ chúng ta có một kịch bản thủ công như sau:

  1. Mở chương trình Calculator
  2. Nhấn số 2
  3. Nhấn dấu công
  4. Nhấn số 3
  5. Nhấn dấu bằng
  6. Kiểm tra màn hình hiện số 5
  7. Đóng chương trình Calculator

Đoạn mã với C#, sử dụng Coded UI như sau

[TestMethod]
public void TestCalculator()
{
//Mở chương trình
var app = ApplicationUnderTest.Launch(“C:\\Windows\\System32\\calc.exe”);

//Các bước kiểm thử
Mouse.Click(button2);
Mouse.Click(buttonAdd);
Mouse.Click(button3);
Mouse.Click(buttonEqual);

//Đánh giá kết quả
Assert.AreEqual(“5”, txtResult.DisplayText, “Calculator is not showing 5”);

//Đóng chương trình
app.Close();
}

Chúng ta có thể thấy đoạn mã lập lại y như những gì chúng ta làm thủ công. Rất dễ đọc và dễ hiểu.

Sự xác nhận

Ở ví dụ trên, có một dòng lệnh cần được làm rõ hơn một chút.

Trong mọi kịch bản kiểm thử, chúng ta luôn có một hay nhiều kết quả mong muốn hay dự đoán trước. Như ở kịch bản thủ công, chúng ta muốn giá trị 5 được hiển thị lên màn hình. Kết quả thực tế hiển thị trên màn hình. Và, chúng ta cần so sánh giá trị mong muốn và giá trị thực tế.

Kiểm thử tự động cũng giống như vậy. Chỉ một khác biệt nhỏ là, khi chúng ta thực hiện việc so sánh giá trị, nó được gọi khác nhau đối với từng công cụ mà chúng ta sử dụng.
Vài công cụ gọi là “Assertion“, vài chỗ thì gọi là “check point“, chỗ khác thì gọi là “validation“. Nhưng về cơ bản, đó chỉ là sự so sánh. Nếu so sánh không khớp, ví dụ như trên màn hình hiện ra 05 thay vì 5, kết quả bài kiểm tra là Fail. Khi một kịch bản thất bại ở một điểm xác nhận nào đó, nghĩa là bạn đã tìm được một lỗi thông qua kiểm thử tự động. Bạn có thể làm báo cáo lỗi như khi làm kiểm thử thủ công.

Với đoạn mã ví dụ ở trên, 5 là giá trị mong muốn, txtResult.DisplayText là giá trị thực tế, và nếu 2 giá trị này không trùng khớp, chúng ta sẽ có một thông báo lỗi “Calculator is not showing 5”.

Kiểm thử tự động là câu trả lời cho bài toán chi phí-hiệu quả đối với kiểm thử qui hồi

Kiểm thử tự động có thể làm chi phí ban đầu tăng cao. Đó là chi phí công cụ, và chi phí thuê và đào tạo nhân sự kiểm thử tự động. Nhưng một khi mã kiểm thử tự động sẵn sàng, nó có thể thực thi hàng trăm lần với cùng mức độ chính xác và nhanh chóng. Điều này cũng có nghĩa là tiết kiệm hàng trăm giờ làm việc thủ công. Từ đó, chi phí dần dần sẽ giảm xuống, và nó cuối cùng sẽ là giải pháp cho vấn đề chi phí-hiệu suất.

Kết luận

  1. Kiểm thử tự động là việc kiểm thử được làm bằng việc lập trình.
  2. Sử dụng công cụ để điều khiển việc kiểm thử
  3. So sánh giá trị mong muốn và giá trị thực tế (Xác nhận)
  4. Có thể sử dụng kiểm thử tự động để làm những việc mà khó có thể tiến hành thủ công
  5. Mã kiểm thử có thể thực thi nhanh chóng và tái sử dụng
  6. Những đoạn mã có thể thực thi nhanh và lặp lại
  7. Hiệu quả về mặt chi phí nếu sử dụng trong một thời gian dài

Kiểm thử tự động được giải thích đơn giản, nhưng nó không đơn giản để thực hiện. Nó là thử thách, rủi ro và nhiều trở ngại khác. Có nhiều con đường mà kiểm thử tự động có thể đi sai hướng, nhưng nếu nó đi đúng đường, lợi ích mà nó mang lại là cực kỳ to lớn.

Trong những bài kế tiếp, chúng ta sẽ thảo luận các khía cạnh khác của kiểm thử tự động:

  1. Các loại kiểm thử tự động và những ngộ nhận về kiểm thử tự động
  2. Làm cách nào để mang kiểm thử tự động vào dự án và bỏ qua những cái bẫy thông thường khi làm kiểm thử tự động
  3. Lựa chọn công cụ kiểm thử tự động phù hợp
  4. Phát triển mã kiểm thử và các mô hình kiểm thử tự động
  5. Thực thi và báo cáo kiểm thử tự động
  6. Kinh nghiệm và chiến lược cho kiểm thử tự động