Bài 30: Kiểm thử và gỡ lỗi chương trình

Minh Lệ
Hướng dẫn giải Thảo luận (1)

Để kiểm tra (test) và gỡ lỗi (debug) một chương trình có nhiều phương pháp, tiêu biểu như:

 - Quan sát mã lỗi Runtime và bắt ngoại lệ

- Sử dụng nhiều bộ test dữ liệu

- In các thông số trung gian

- Tạo các điểm dừng để quan sát thông tin khác bên trong chương trình

Các công cụ hỗ trợ: công cụ in biến trung gian, sinh các bộ dữ liệu test, break point

Trả lời bởi Time line
Minh Lệ
Hướng dẫn giải Thảo luận (1)

- Quan sát mã lỗi Runtime và bắt ngoại lệ: kiểm tra vị trí dòng lệnh sinh ra lỗi này, từ đó phân tích, tìm và sửa lỗi

- Sử dụng nhiều bộ test dữ liệu: phát hiện ra lỗi, nguyên nhân bị lỗi với từng bộ test cụ thể

- In các thông số trung gian: kiểm tra các quy trình hay thuật toán được viết có đúng không.

- Tạo các điểm dừng để quan sát thông tin khác bên trong chương trình: Các điểm dừng sẽ cho phép người kiểm thử có thể quan sát các thông tin khác bên trong chương trình, từ đó kiểm tra tính đúng đắn của chương trình

Trả lời bởi GV Nguyễn Trần Thành Đạt
Minh Lệ
Hướng dẫn giải Thảo luận (1)

ZeroDivisionError: lỗi này xảy ra khi lệnh thực hiện phép chia cho giá trị 0.

Đây là lỗi chia cho 0. Nếu gặp lỗi này cần tìm ra vị trí gây lỗi để biết phép tính nào tạo ra phép chia cho 0. Sau đó tiến hành các biện pháp xử lí lỗi này trong chương trình, ví dụ chỉ cho phép thực hiện phép chia khi mẫu số khác 0.

* Lỗi ngoại lệ (exception) trong Python.

Lỗi exception là lỗi xảy ra trong quá trình chạy (tiếng anh là run time error). Trong lập trình có 3 loại lỗi là lỗi biên dịch, lỗi ngữ nghĩa và lỗi ngoại lệ. Trong đó lỗi biên dịch dễ phát hiện nhất, lỗi ngoại lệ là lỗi khó phát hiện nhất. Ví dụ như bạn viết một chương trình máy tính bỏ túi gồm các chức năng cộng trừ nhân chia. Thoạt nhìn có vẻ như rất đơn giản, chỉ cần yêu cầu người dùng nhập vào 2 số và phép tính, thực hiện phép tính rồi trả lại kết quả cho người dùng. Nhưng chương trình này sẽ báo lỗi nếu người dùng thực hiện một phép tính chia với số chia là 0. Đó là loại lỗi chỉ xảy ra trong khi chương trình chạy, để phòng ngừa loại lỗi này thì chỉ có một cách là các lập trình viên phải đoán trước các trường hợp lỗi ngoại lệ có thể xảy ra và xử lý chúng trước trong code của mình. Nhưng vì bạn chẳng phải nhà tiên tri, bạn không thể nào đoán trước tất cả mọi thứ được nên trên thực tế thì các phần mềm lớn vẫn thường có lỗi chứ không có phần mềm nào không có lỗi cả, công việc của chúng ta là cố gắng phát hiện lỗi và sửa lỗi thôi.

Trả lời bởi GV Nguyễn Trần Thành Đạt
Minh Lệ
Hướng dẫn giải Thảo luận (1)

Chương trình có lỗi logic.

Sửa lại: chuyển kiểu dữ liệu số nguyên cho 2 giá trị m, n được nhập vào

m = int(input("Nhập số tự nhiên m: "))

n = int(input("Nhập số tự nhiên n: "))

print("Tổng hai số đã nhập là: ", m + n)

Trả lời bởi Time line
Minh Lệ
Hướng dẫn giải Thảo luận (1)

Chương trình có lỗi logic: chương trình chạy không lỗi ngoại lệ nhưng kết quả đưa sai, không chính xác

Sửa lại: 

- Dòng lệnh thứ 2: range(len(A) - 1) → range(len(A))

- Dòng lệnh thứ 4: j > 1 → j > 0

Trả lời bởi Time line
Minh Lệ
Hướng dẫn giải Thảo luận (1)

Để kiểm thử một chương trình, nếu chỉ bằng việc kiểm tra thông qua các bộ dữ liệu test thì không thể đảm bảo tìm ra hết lỗi của chương trình.

Vì lỗi có thể phát sinh tại các bộ dữ liệu khác ngoài các bộ dữ liệu test, do đó cần tuỳ theo yêu cầu, đặc thù của từng bài toán để chọn bộ test cho phù hợp.

Trả lời bởi Time line