Sơ lược về ứng dụng trí tuệ nhân tạo (artificial intelligence - AI) trong software testing (kiểm thử phần mềm)

  1. Sơ lược về software testing (kiểm thử phần mềm)

    Trước hết về hoạt động kiểm thử phần mềm, đây là hoạt động rất quan trọng vì:

    • Có quá ít mô hình phát triển phần mềm
    • Các mô hình phát triển phần mềm này đều nhận ra tầm quan trọng của hoạt động kiểm thử phần mềm
    • Có một số kiểu kiểm thử phần mềm như: E.g., unit testing, black-box (functional) testing...
    • Việc phát triển phần mềm do Programmer và Tester thực hiện.

    Programmer thực hiện các công việc:

    • Viết chương trình phần mềm
    • Làm theo tài liệu đặc tả sản phẩm
    • Mục tiêu: sửa các lỗi của sản phẩm

    Tester thực hiện các công việc:

    • Thực hiện test
    • Làm theo kế hoạch test
    • Mục tiêu: tìm ra các lỗi của sản phẩm

    Xử lý 1 lỗi của sản phẩm

    • Lỗi được tìm ra và báo cáo bởi tester. Ví dụ như: Màn hình A bị crash ở step 13 trong test suite 4
    • Những lỗi ưu tiên được assign cho dev để xử lý
    • Các bug sẽ được điều tra, chuẩn đoán (diagnosis): nguyên nhân nào gây nên lỗi
    • Các bug được fix

    Hai bước cuối cùng điều tra để tìm ra nguyên nhân gây nên lỗi và sửa lỗi thì được gọi là DEBUG.

    Việc DEBUG thường rất khó là do:

    • Developer phải tái hiện được lỗi

    • Việc tái hiện chính xác 1 lỗi thường gặp nhiều vấn đề do:

      • Việc báo cáo hiện tượng lỗi, miêu tả lỗi _thường không chính xá_c hoặc bị thiếu sót
      • Phần mềm có những yếu tố xác suất, ngẫu nhiên, lỗi có thể chỉ xảy ra 1 lần ở 1 thời điểm nào đó
      • Lỗi có thể chỉ xuất hiện trong một trường hợp đặc biệt nào đó Khi đó chúng ta cần yêu cầu tester cung cấp nhiều thông tin hơn nữa về môi trường test, chính xác tất cả các hành vi đã làm, thứ tự các hành vi đã làm đến khi lỗi xảy ra...
  2. Ứng dụng trí tuệ nhân tạo (artificial intelligence - AI) trong software testing (kiểm thử phần mềm)

    1.png

    Khi không ứng dụng trí tuệ nhân tạo, thì tester sẽ thực hiện kiểm thử và tìm ra lỗi. Sau đó programmer sẽ điều tra nguyên nhân và sửa lỗi.

    Khi ứng dụng trí tuệ nhân tạo vào hoạt động kiểm thử theo mô hình TDP (Test, Diagnosis, Plan - Kiểm thử, Điều tra nguyên nhân, Đưa ra kế hoạch bước tiếp theo), sau khi tester thực hiện kiểm thử và tìm ra lỗi thì trí tuệ nhân tạo (máy tính) sẽ thực hiện việc điều tra nguyên nhân phát sinh lỗi, từ đó lập kế hoạch cho bước tiếp theo. Máy tính sẽ xử lý bước tiếp theo sẽ là chuyển lỗi sang cho programmer sửa luôn hay đưa lại cho tester. Toàn bộ quá trình thực hiện test và sửa lỗi sẽ được thực hiện như sau:

    • Tester sẽ thực hiện toàn bộ các công việc test đã được lập plan (test suite)
    • Tester tìm ra lỗi
    • AI sẽ thực hiện chuẩn đoán, điều tra và _đưa ra toàn bộ các nguyên nhân gây nên lỗi có thể tính tới
    • Nếu AI điều tra ra chỉ có 1 nguyên nhân gây nên lỗi thì sẽ chuyển luôn lỗi sang cho programmer để thực hiện fix lỗi
    • Nếu AI điều tra có nhiều nguyên nhân gây nên lỗi thì nó sẽ lập kế hoạch test tiếp theo để lược bớt các nguyên nhân phát sinh.
  3. Thực hiện điều tra nguyên nhân lỗi với trí tuệ nhân tạo.

    Chuẩn đoán/Điều tra là việc tìm ra nguyên nhân của một vấn đề- vấn đề mà đã được đưa ra bởi những triệu chứng đã quan sát được.

    Yêu cầu: những kiến thức (knowledge) của một hệ thống chuẩn đoán/điều tra nguyên nhân lỗi phải đảm bảo những yêu cầu sau: + Các chuyên gia sẽ đưa ra kiến thức cho chuẩn đoán điều tra nguyên nhân lỗi + Công nghệ trí tuệ nhân tạo (AI techniques) sẽ học các kiến thức này

  4. Điều tra nguyên nhân lỗi dựa vào mô hình (Model-Based Diagnosis - MBD)

    Điều tra nguyên nhân lỗi dựa vào mô hình hoạt động thực hiện theo cơ chế sau đây:

    Đầu vào: mô hình về cơ chế hoạt động của một hệ thống

    => gợi ý, phỏng đoán, suy luận cái gì bị hỏng nếu như một hệ thống không hoạt động được. Ví dụ thực tế: 3.png Nếu bình ác quy và bộ phận đánh lửa là OK thì sẽ khởi động động cơ.

    Nếu động cơ không khởi động thì cần phải điều tra những cái gì ????

    MBD được áp dụng trong rất nhiều lĩnh vực như máy in (Kuhn and de Kleer 2008); xe cộ (Pernestål et. al. 2006); Robot (Steinbauer 2009); tàu vũ trụ (Williams and Nayak, 1996; Bernard et al., 1998) và nhiều lĩnh vực khác. Đối với sản phẩm phần mềm, việc mô hình phần mềm thường khó hơn.

    • Với phần mềm thì programmer cần phải code phần mềm nên xử lý/đối ứng/vận hành như thế nào đối với từng trường hợp rất chi tiết, cụ thể. Các đặc tả yêu cầu phần mềm thường rất phức tạp.

    • Nếu phân tích mã code tĩnh thì phải bỏ qua thời gian vận hành thực tế. Chỉ khi vận hành thực tế mới phát sinh nhiều hiện tượng đa dạng, sẽ có nhiều yếu tố ảnh hưởng, chi phối như máy móc, thiết bị v.v

    Trên nền tảng mô hình MBD này, người ta đã đưa ra phương thức điều tra nguyên nhân lỗi Zoltar

  5. Điều tra nguyên nhân lỗi Zoltar

  • Điều tra lỗi Zoltar được thực hiện bằng cách xây dựng một mô hình từ những cái đã quan sát được (observations)
  • Những cái quan sát được nên bao gồm những 'dấu vết thực' (execution traces) , những cái đã tồn tại, đã xảy ra, toàn bộ các chức năng đã được động đến (visited), và đầu ra đã quan sát được là có lỗi hay không có lỗi. Khi có một lỗi phát sinh thì nó chỉ ra rằng có ít nhất một thành phần trong đó không OK.
  • Zoltar dựa trên model sau: OK (F1 - Function 1) -> chức năng 1 xuất ra giá trị hợp lệ Khi có 1 lỗi xảy ra thì có ít nhất 1 thành phần trong nó đang hoạt động không đúng.
  • Thành phần cốt lõi của Zoltar chính là ma trận kiểm tra (execution matrix). Nó được lập nên từ chính những dấu vết quan sát được ( observed execution traces).

4.png

  • Việc điều tra nguyên nhân gây nên lỗi (diagnosis) chính là việc đưa ra những tập hợp/tổ hợp đang mâu thuẫn (conflict) với nhau. Với mỗi dấu vết lỗi (BUG trace), có ít nhất 1 chức năng bị lỗi.

  • Như vậy việc kiểm thử phần mềm sẽ được thực hiện theo nguyên tắc: tester thông báo lỗi phát sinh -> Zoltar sẽ xử lý thông tin được báo cáo bởi tester và điều tra đưa ra những đối tượng có thể là nguyên nhân gây nên lỗi.

5.png

Nếu có nhiều đối tượng thì AIEngine (hệ thống xử lý bằng trí tuệ nhân tạo) sẽ đề xuất thực hiện một số kiểm thử mới để lược bớt đối tượng điều tra.

6.png

AIEngine (hệ thống xử lý bằng trí tuệ nhân tạo ) phải tìm ra 1 đối tượng duy nhất gây nên lỗi.

7.png

Kết luận: Như vậy AI (Hệ thống trí tuệ nhận tạo) được ứng dụng hết sức hữu hiệu trong kiểm thử phần mềm. Nó giúp giảm thời gian và công sức để tìm ra nguyên nhân xảy ra lỗi, giúp việc sửa lỗi được nhanh chóng và chính xác.

★Trong mô hình TDP (Test, Diagnosis, Plan) thì

  • AI (Hệ thống trí tuệ nhận tạo) sẽ điều tra các lỗi đã quan sát được bằng thuật toán MBD
  • AI (Hệ thống trí tuệ nhận tạo) sẽ lập kế hoạch test bổ sung có được điều tra đúng, tìm ra đối tượng duy nhất

★Tăng thêm sức mạnh cho tester

  • Khi ứng dụng AI (Hệ thống trí tuệ nhận tạo), toàn bộ quá trình điều tra và tìm ra nguyên nhân cốt lõi gây nên lỗi để sửa sẽ phụ thuộc vào tester và AI, phụ thuộc vào kết quả kiểm thử và báo cáo của tester từ lần test 1 -> các lần test bổ sung tiếp theo.