Làm sao để lựa chọn kỹ thuật test hiệu quả nhất?

Khi bạn còn là một tester mới tôi đảm bảo bạn sẽ có rất nhiều câu hỏi kiểu như: Với chức năng này mình sẽ cần phải viết những test case nào? Làm sao cho khỏi bị thiếu test case? Liệu những case đã viết có đủ bao phủ các lỗi có thể xảy ra hay không? Mình có thể dùng những kỹ thuật gì để test cho hiệu quả nhất? ... Vô vàn câu hỏi, vô vàn lo lắng phải không? Bài viết này sẽ giúp bạn có một cơ sở để đưa ra quyết định về việc sử dụng kỹ thuật test sao cho hiệu quả nhất. Đầu tiên chúng ta cùng điểm lại các loại kỹ thuật test: Được chia thành 2 nhóm: "Static testing techniques""Dynamic Testing techniques" Trong khi thực hiện công việc test, chắc chắn bạn đã từng sử dụng ít nhất một trong số các kỹ thuật này, nhưng có thể đây là lần đầu tiên bạn biết đến thuật ngữ gọi tên nó 😃

1. Static testing technique - Kỹ thuật kiểm thử tĩnh

Đây là phương pháp kiểm thử phần mềm đòi hỏi phải duyệt lại các yêu cầu và các đặc tả bằng tay, thông qua việc sử dụng giấy, bút để kiểm tra logic, lần từng chi tiết mà không cần chạy chương trình. Kiểu kiểm thử này thường được sử dụng bởi chuyên viên thiết kế người mà viết ra code hoặc người review code. Kiểm thử tĩnh có thể được tiến hành bằng tay hoặc thông qua việc sử dụng các công cụ kiểm thử phần mềm khác nhau. Nó sẽ thực hiện kiểm tra toàn bộ bao gồm các chương trình được phân tích bởi một trình thông dịch hoặc biên dịch mà xác nhận tính hợp lệ về cú pháp của chương trình Kiểm thử tĩnh bao gồm các loại kỹ thuật như sau:

  1. Reviewing: Bao gồm các kỹ thuật: Inspection, Infomal reviews, Formal reviews, Walkthroughs.
  2. Static Analysis

2. Dynamic Testing technique - Kỹ thuật kiểm thử động

Dynamic testing là phương pháp thử phần mềm thông qua việc dùng máy chạy chương trình để điều tra trạng thái tác động của chương trình đó. Đó là kiểm thử dựa trên các ca kiểm thử xác định bằng sự thực hiện của đối tượng kiểm thử hay chạy các chương trình. Kiểm thử động kiểm tra cách thức hoạt động động của mã lệnh, tức là kiểm tra sự phản ứng vật lý từ hệ thống tới các biến thay đổi theo thời gian. Trong kiểm thử động, phần mềm phải được biên dịch và chạy: thực hiện làm việc với phần mềm, nhập các giá trị đầu vào và kiểm tra xem liệu đầu ra có đúng như mong muốn hay không. Các phương pháp kiểm thử động gồm có kiểm thử đơn vị – Unit Tests, Kiểm thử tích hợp – Intergration Tests, Kiểm thử hệ thống – System Tests

Có ba loại kỹ thuật kiểm tra của kiểm thử động:

  • Các kỹ thuật kiểm tra dựa trên cấu trúc (Structure-based (White box)): Statement testing, Decision testing, Condition testing
  • Các kỹ thuật kiểm tra dựa trên đặc tả (Specification-based (Black box)): Phân vùng tương đương, Phân tích giá trị biên, Bảng quyết định, Bảng trạng thái, Use case testing
  • Các kỹ thuật kiểm tra dựa trên kinh nghiệm (Experience based): Gợi ý lỗi, Test thăm dò

Chi tiết về từng kỹ thuật và cách dùng, các bạn có thể tham khảo ở các bài viết khác trong Viblo như: https://viblo.asia/p/phan-biet-black-box-test-va-white-box-test-so-luoc-mot-so-ky-thuat-trong-black-box-test-Az45bpm6ZxY https://viblo.asia/p/su-khac-nhau-giua-static-testing-va-dynamic-testing-vyDZOXQRlwj

3. Làm thế nào để lựa chọn được kỹ thuật test phù hợp nhất?

"Làm thế nào để chọn kỹ thuật nào là tốt nhất? "

Trên thực tế đây cũng là một câu hỏi không có câu trả lời chính xác, trong mỗi trường hợp cụ thể thì từng kỹ thuật lại có thể phát huy hiệu quả nhất định, mỗi kỹ thuật có thể tốt cho việc tìm thấy những lỗi này, nhưng lại không tìm được những lỗi khác. Ví dụ:

  • Kỹ thuật dựa trên cấu trúc có thể tìm ra những khuyết điểm hoặc những thứ dư thừa trong code mà về nguyên tắc là không thể có mặt tại đó, chẳng hạn như các mã Trojan hoặc mã độc hại khác.
  • Tuy nhiên, nếu có các phần của spec bị thiếu trong code, chỉ có các kỹ thuật dựa trên đặc tả mới thấy được sự vắng mặt đó, các kỹ thuật dựa trên cấu trúc chỉ có thể kiểm tra những gì đang có ở đó mà thôi.
  • Ngoài ra còn những lỗi mà cả 2 loại kỹ thuật kiểm tra dựa trên cấu trúc và kiểm tra dựa trên đặc tả đều không phát hiện ra, thì cần tester sử dụng đến kỹ thuật kiểm tra dựa trên kinh nghiệm mới có thể tìm thấy chúng. Do đó, mỗi kỹ thuật riêng lẻ đều nhằm vào các loại lỗi cụ thể. Ví dụ, sử dụng bảng chuyển đổi trạng thái thì không thể tìm thấy các bug về validate.

Vì thế muốn tìm được nhiều lỗi nhất có thể thì cần kết hợp nhiều kỹ thuật đồng thời cho từng yêu cầu cụ thể. Vậy, cơ sở nào để lựa chọn ra những kỹ thuật kiểm tra phù hợp nhất? Quyết định sẽ được dựa trên một số yếu tố, cả các yếu tố trong và ngoài như dưới đây:

3.1. Các yếu tố nội tại ảnh hưởng đến quyết định sử dụng một kỹ thuật:

  • Mô hình của phần mềm Vì các kỹ thuật kiểm tra được dựa trên các mô hình được sử dụng để phát triển hệ thống đó, nên khi nắm được các mô hình này thì sẽ phần nào dự đoán được những kỹ thuật kiểm tra nào có thể được sử dụng. Ví dụ, nếu trong đặc tả kỹ thuật có chứa một sơ đồ chuyển đổi trạng thái, thì chắc chắn lựa chọn hàng đầu sẽ là sử dụng kỹ thuật bảng chuyển đổi trạng thái. Hay nếu hệ thống có việc nhập dữ liệu vào ô text box thì chắc chắn sẽ cần để ý đến các phương pháp phân tích gía trị biên và phân vùng tương đương.

  • Kinh nghiệm và sự hiểu biết của Tester - Tester càng kinh nghiệm và hiểu biết về các loại kỹ thuật test thì khả năng vận dụng các kỹ thuật test càng cao. Dựa vào đó họ có thể đưa ra các kỹ thuật test phù hợp.

  • Đối với các tester mới, kinh nghiệm chưa nhiều, thì thường hay sử dụng nhất các kỹ thuật test thuộc nhóm các kỹ thuật kiểm tra dựa trên đặc tả (Specification-based (Black box)): Phân vùng tương đương, Phân tích giá trị biên, Bảng quyết định, Bảng trạng thái, Use case testing.

  • Các loại lỗi tương tự - Sự hiểu biết về các loại lỗi tương tự sẽ rất hữu ích trong việc lựa chọn các kỹ thuật kiểm tra (vì mỗi kỹ thuật đều có khả năng tìm ra một loại khiếm khuyết nhất định). Kiến thức này có thể được tích lũy thông qua kinh nghiệm kiểm tra phiên bản trước của hệ thống và các mức thử nghiệm trước đó trên phiên bản hiện tại.

  • Mục tiêu thử nghiệm - Nếu mục tiêu thử nghiệm chỉ ở mức đơn giản là để đạt được sự đảm bảo rằng phần mềm sẽ xử lý tốt các hoạt động điển hình thì việc sử dụng các kỹ thuật dựa trên đặc tả sẽ là một cách tiếp cận hợp lý. Nếu mục tiêu cao hơn là để kiểm tra kỹ lưỡng thì nên chọn các kỹ thuật chặt chẽ và chi tiết hơn (bao gồm cả các kỹ thuật dựa trên cấu trúc).

  • Tài liệu - Việc có hay tài liệu (ví dụ như một yêu cầu đặc điểm kỹ thuật) hay không và tài liệu đó có được cập nhật chính xác hay không sẽ làm ảnh hưởng đến sự lựa chọn của kỹ thuật kiểm tra. Nội dung và phong cách của tài liệu cũng sẽ ảnh hưởng đến sự lựa chọn của kỹ thuật (ví dụ, nếu bảng quyết định hoặc biểu đồ trạng thái đã được sử dụng thì nên sử dụng các kỹ thuật kiểm tra liên quan).

  • Mô hình chu trình phát triển của phần mềm - Một mô hình chu trình phát triển phần mềm tuần tự sẽ cho phép sử dụng các kỹ thuật chính thức hơn, trong khi mô hình vòng đời lặp thì sử dụng phương pháp thử nghiệm thăm dò sẽ thích hợp hơn.

3.2. Các yếu tố bên ngoài ảnh hưởng đến quyết định sử dụng một kỹ thuật:

  • Đánh giá rủi ro - Rủi ro càng lớn (ví dụ như các hệ thống đề cao sự bảo mật và an toàn) thì nhu cầu thử nghiệm càng kỹ càng hơn và chính thức hơn. Các rủi ro về thương mại có thể bị gây ra bởi:

    • Các vấn đề về chất lượng (do đó việc kiểm tra kỹ lưỡng hơn là thích hợp)
    • Hoặc bởi các vấn đề theo thời gian của thị trường (vì vậy việc kiểm tra thăm dò sẽ là một sự lựa chọn thích hợp hơn).
  • Yêu cầu của khách hàng và hợp đồng - Đôi khi ngay trong hợp đồng đã chỉ định cụ thể các kỹ thuật thử nghiệm cần sử dụng (thường thấy nhất là commonly statement hoặc branch coverage). Ở trường hợp này thì việc của tester là tuân theo những gì khách hàng chỉ định mà thôi.

  • Loại hệ thống được sử dụng - Loại hệ thống (ví dụ như phần mềm nhúng, đồ họa, tài chính, v.v..) sẽ ảnh hưởng đến việc lựa chọn các kỹ thuật. Ví dụ, một ứng dụng tài chính liên quan đến nhiều tính toán thì chắc chắn kỹ thuật phân tích giá trị biên sẽ là lựa chọn hàng đầu.

  • Các yêu cầu về quy định - Một số ngành công nghiệp có các tiêu chuẩn chung hay những hướng dẫn quy định về các kỹ thuật kiểm tra được sử dụng. Ví dụ, ngành công nghiệp máy bay yêu cầu phải sử dụng phân vùng tương đương, phân tích giá trị biên và kiểm tra chuyển trạng thái cho các hệ thống toàn vẹn ở mức rất cao.

  • Thời gian và ngân sách của dự án - Cuối cùng ngân sách về thời gian dành cho việc kiểm thử sản phẩm sẽ luôn luôn ảnh hưởng đến sự lựa chọn kỹ thuật kiểm tra. Khi có nhiều thời gian hơn, chúng ta có thể lựa chọn nhiều kỹ thuật hơn và khi thời gian bị giới hạn nghiêm trọng, chúng ta sẽ phải giới hạn ở những kỹ thuật mà dựa trên kinh nghiệm chúng ta đã biết rằng nó có thể giúp mình tìm ra những khuyết điểm quan trọng nhất.

Trên đây là những cơ sở để bạn có thể dựa vào đó đưa ra quyết định thực hiện test của mình. Và tất nhiên, chỉ là lý thuyết để bạn dựa vào, còn để vận dụng được nhuần nhuyễn, bản thân bạn cũng cần phải nắm được các loại kỹ thuật test trong lòng bàn tay và sử dụng chúng thuần thục như thể bạn là một nghệ nhân với những dụng cụ làm nghề của mình, để mỗi khi đứng trước một yêu cầu, bạn có thể ngay lập tức ra quyết định cho mình sẽ sử dụng đến những loại dụng cụ nào. Chúc bạn thành công 😃

Nguồn tham khảo:

  1. http://istqbexamcertification.com/how-to-choose-that-which-testing-technique-is-best/
  2. https://www.linkedin.com/pulse/software-testing-techniques-methods-istqb-itil-v3-mcs