Automation testing có thể thay thế hoàn toàn manual testing?

Automation testing có thể thay thế hoàn toàn manual testing?

Xem nhanh

Thông qua bài viết Automation testing và manual testing: Điểm mạnh và điểm yếu từng loại, các bạn đã nắm được phần nào về các khái niệm manual và automation testing, cũng như điểm mạnh của chúng.

Một điều chúng ta không thể phủ nhận đó chính là các điểm mạnh vượt trội của automation testing như:

  • Thời gian kiểm thử ngắn (Ở Cybozu, thời gian kiểm thử được rút ngắn 60 lần so với manual testing)
  • Khả năng tái sử dụng với độ chính xác cao

Và ngoài ra, hiện nay các automation testing framework được cải tiến hàng ngày, nên thời gian để viết kịch bản tự động hóa ngày càng trở nên nhanh và đơn giản hơn.

Tất nhiên, điều này đã nảy sinh rất nhiều cuộc tranh luận xung câu hỏi: liệu automation testing có thể thay thế hoàn toàn manual testing trong tương lai gần?

Dưới góc nhìn của một người đã triển khai hệ thống automation testing, trong bài blog này, tôi xin chia sẽ quan điểm của tôi về câu hỏi trên.

Liệu automation testing có thể thay thế hoàn toàn manual testing?

Có rất nhiều ý kiến ​​nói rằng automation testing đang dần thay thế manual testing. Bản thân tôi cũng từng có lập luận như sau: tại sao lại phải chịu chi phí cho manual testing trong khi bạn có thể thay thế nó bằng các kịch bản được tự động hóa? Nó nhanh hơn và cung cấp kết quả giống như manual testing.

Điều này không hoàn toàn chính xác. Sự thật là, manual testing vẫn chưa thể biến mất. Và sau đây là một vài lý do tại sao.

1. Automation testing tính khả dụng (Usability Testing) rất khó để triển khai

Tôi xin trích lược định nghĩa về Usability Testing như sau:

Usability Testing là một phương pháp kiểm tra xem các thao tác, hành vi trên ứng dụng có thân thiện và dễ dàng với người dùng hay không. Việc kiểm tra tính khả dụng của một ứng dụng giúp nâng cao khả năng trải nghiệm và cung cấp dịch vụ tốt nhất cho nhất cho người dùng.

Chúng ta không thể đào tạo một máy tính để xác định một hành vi nào đó của ứng dụng là “good” usability hoặc là “bad” usability. Mà công việc này đòi hỏi phải là một con người thực thụ.

Có lẽ bạn đang nghĩ, "tại sao chúng ta không bỏ qua Usability Testing?". Nếu bạn làm như vậy, thực sự đó là một sai lầm. Vì bước này trong quy trình QA là rất quan trọng. Nó giúp người dùng thực hiện những việc họ cần làm với ứng dụng dễ dàng nhất có thể. Từ đó mang lại sự hài lòng của người dùng đối với ứng dụng của bạn.

Do đó, để có thể cung cấp một ứng dụng có tính khả dụng cao (high usability), manual testing là điều không thể thiếu.

2. Automation testing chỉ có thể kiểm tra theo kịch bản cố định

Các test case của automation testing được thực thi theo một kịch bản cố định. Do đó, kịch bản test như thế nào, thì automation testing chỉ kiểm tra theo đúng như mong đợi của kịch bản test (input data, testing flow, expected, v.v. ).

Tuy nhiên, với một số loại test đòi hỏi sự khám phá cao như Exploratory testing, Security testing, v.v. thì automation testing rất khó để thực hiện. Những loại test này đòi hỏi sự tham gia của con người để có thể mang lại tính chính xác và hiệu quả cao.

3. Automation testing có thể chứa bug/error

Giống như production code, automation code vẫn có thể chứa lỗi. Nếu bạn viết automation code có lỗi, bạn sẽ nhận được kết quả PASSED giả (false positives). Điều này có thể dẫn đến các rủi ro lớn cho sản phẩm của bạn. Với yếu tố con người trong manual testing, ta có thể xác định những lỗi này và đảm bảo rằng bạn đang kiểm tra đúng cách.

4. Giới hạn về technical

Hiện nay, với kịch bản hoặc loại test phức tạp như security testing, installation testing vẫn bị giới hạn về technical*[1]*. Do đó, ta chỉ có thể automation testing 1 phần, phần còn lại vẫn cần đến manual testing.

==> Với 4 “điểm” phân tích ở trên, câu trả lời của tôi cho câu hỏi “liệu automation testing có thể thay thế hoàn toàn manual testing trong tương lai gần?“ là "Chắc chắn là không!". Ít nhất là chưa trong tương lai gần (5 năm tới).

Kết hợp Manual và Automation testing

Với quan điểm automation testing không thể thay thế hoàn toàn manual testing, vậy chúng ta có nên kết hợp cả 2 loại test trên hay không? Câu trả lời của tôi là: có. Chúng ta có thể kết hợp automation và manual testing để tận dụng các ưu điểm của chúng.

Lợi ích của việc kết hợp

Automation testing sẽ giúp tester vượt ra khỏi ranh giới của các quy trình kiểm thử thủ công và nâng cao các kỹ năng cần thiết khác cho kiểm tra thủ công như: research, problem solving

Manual testing giúp chúng ta nắm được bức tranh tổng thể của cả dự án và khám phá được nhiều góc độ khác nhau, chẳng hạn như usability testing, exploratory testing.

Lợi ích chính của việc kết hợp cả 2 phương pháp đó là:

  • Tính linh hoạt của manual testing
  • Tốc độ thực thi nhanh, thời gian cho kết quả ngắn của automation testing

==> Việc kết hợp cả 2 phương pháp vừa giúp đẩy nhanh tiến độ triển khai của sản phẩm mà vẫn đảm bảo chất lượng.

Để có cái nhìn chi tiết hơn, các bạn có thể tham khảo hình bên dưới

hinh01 integrated approach

Hình 1: Lợi ích của kết hợp aumation và manual testing
Nguồn: Cognizant Softvision

Giải pháp kết nối giữa manual và automation testing

Làm thế nào để việc kết nối giữa manual và automation testing vừa đơn giản mà vẫn mang lại hiệu quả cao? Đó chính là nhờ vào việc định danh các test cases trong hệ thống automation testing, hay còn được gọi là Test Identifier.

Hiện nay, đa phần các dự án automation testing đều có tool để quản lý các test case. Nên việc tạo ra Test Identifier cho từng test case giúp cho việc quản lý và tìm kiếm test case trở nên đơn giản và nhanh hơn. Vì chỉ cần dựa vào Test Identifier, ta có thể định vị nhanh test case đó nằm ở đâu trong source code.

Ví dụ, với test case bên dưới, Test Identifier sẽ là GRacceptance239_Plugin_VerifySettings

hinh02 test identifier

Hình 2: Ví dụ về Test Identifier

Và trong tool quản lý, ta cũng lưu thông tin Test Identifier cho test case này

hinh03 test master app

Hình 3: Lưu thông tin Test Identifier

Giá trị của việc sử dụng Test Identifier

  • Tạo ra được mối liên kết giữa manual và automation testing
    Thông thường test case dành cho automation testing được triển khai từ chính các test case của manual testing. Do đó, với một Test Identifier trực quan, dễ đọc, nó chính là sợi dây liên kết giữa manual và automation testing
  • Việc đồng bộ các test case giữa manual và automation testing trở nên dễ dàng hơn.
    Ví dụ: vì lý do nào đó, một tính năng của sản phẩm bị hủy bỏ. Chắc chắn, các manual test cases cũng sẽ được loại bỏ theo. Và nhờ có Test Identifier, ta cũng có thể dễ dàng định vị các test cases liên quan trong source code của automation testing và xóa nó.
  • Đối với các member mới, dựa vào Test Identifier của test case, có thể dễ dàng tìm ra được thông tin chi tiết về test case.

Lưu ý trong thiết kế Test Identifier

Bên dưới là một số tips giúp cho việc thiết kế Test Identifier trở nên hiệu quả và dễ sử dụng hơn:

  1. Tránh sử dụng “magic number” để làm Test Identifier, vd: #1, #2
    Thay vào đó, chúng ta nên sử dụng các Test Identifier có nghĩa, hoặc ít nhất là dựa vào đó ta có thể xác định nhanh tính năng/ứng dụng mà test case đang test, vd:
    GRacceptance239_Plugin_VerifySettings, mobile_schedule_17

  2. Trong test scripts, ta có thể kết hợp với ký tự đặc biệt để dễ dàng xác định Test Identifier với mô tả của test case. Và ký tự đặc biệt này được sử dụng duy nhất trong toàn bộ hệ thống automation testing.

    hinh04 tes identiifer 02

    Hình 4: Kết hợp Test Identifier và Special Character

  3. Sử dụng các dấu nối, như “_“, “-“ thay vì viết liền Test Identifier, ví dụ:
    Viết liền: GRacceptance239PluginVerifySettings
    Sử dụng dấu nối : GRacceptance239_Plugin_VerifySettings
    Với cách này, Test Identifier sẽ tường minh, dễ đọc hơn.

Một số tips giúp tăng sự kết nối giữa Manual và Automation Testing

Thực tế là cả manual và automation testing là cần thiết để tạo ra một sản phẩm chất lượng. Bên dưới là một số tips giúp gia tăng sự kết nối giữa manual và automation testing

  • Triển khai automation song song với manual testing
    Thay vì triển khai automation tests sau khi hoàn thành manual testing, bạn hãy triển khai đồng thời với manual testing. Việc triển khai song song automation và manual testing không chỉ hỗ trợ cách tiếp cận theo hướng test-driven development mà còn đảm bảo bạn tạo ra một bộ regression tests mạnh mẽ, hỗ trợ đắc lực trong việc tái cấu trúc production code.
  • Pair Developers và Testers
    Kiểm thử thường chỉ được thực hiện sau khi quá trình develop đã hoàn thành. Do đó, nó sẽ luôn là một rào cản đối với tốc độ release sản phẩm nếu số lượng bug phát sinh bùng nổ. Để hạn chế được việc này, developers và testers nên làm việc cùng nhau hàng ngày và xuyên suốt trong quá trình phát triển. Có như vậy, developers và tester có thể chia sẻ mindset lẫn nhau và sớm cover các bug phát sinh. Một số phương pháp có thể áp dụng như: pair programming, mob programming
  • Ưu tiên việc triển khai Unit testing
    Việc đẩy mạnh Unit testing góp phần làm giảm đáng kể gánh nặng cho tester[2]. Từ đó, giải phóng họ để có thể thực hiện tự động hóa nhiều hơn, cũng như dành nhiều thời gian hơn cho Exploratory testing nếu cần.
  • Hỗ trợ tối đa việc thiết lập môi trường cho manual testing
    Thông thường, công việc tốn kém nhất của testing đó chính là setup và clean up môi trường test. Do đó, chúng ta nên sử dụng tự động hóa để giảm thời gian chuẩn bị môi trường, cài đặt phần mềm, thiết lập background data cho testing và clean up. Việc tự động hóa các bước quan trọng này có thể tăng tốc đáng kể cho quá trình manual testing. Một tool hữu ích cho những công việc tự động này đó chính là Jenkins.

Lời kết

Manual testing giúp chúng ta có cái nhìn toàn cục và có thể khám khá các góc độ khác nhau một cách linh hoạt. Automation testing giúp tiết kiệm thời gian bằng cách hoàn thành một số lượng lớn các test case trong thời gian ngắn. Do đó, trong tương lai gần, không cái nào có thể thay thế hoàn toàn cái kia. Nếu bạn quan tâm đến việc xây dựng một “good software”, bạn nên biết rằng cả automation và manual testing sẽ bổ sung cho nhau để tạo nên một sản phẩm chất lượng.

Tài liệu tham khảo

[1]:

How Reliable is Automated Security Testing

JavaScript Apps: Automated Security Testing Challenges

[2]: Why Programmers Include Unit Tests for Quality Assurance

Các bài viết cùng chủ đề