Trắc nghiệm Tin 10 Cánh diều Bài 16: Kiểm thử và gỡ lỗi chương trình - Đề 02 bao gồm nhiều câu hỏi hay, bám sát chương trình. Cùng làm bài tập trắc nghiệm ngay.
Câu 1: Một lập trình viên viết đoạn mã Python sau:
`a = 10
b = 0
c = a / b
print(c)`
Khi chạy đoạn mã này, chương trình sẽ dừng lại và báo lỗi. Loại lỗi xảy ra trong trường hợp này là gì?
- A. Lỗi cú pháp (Syntax Error)
- B. Lỗi ngữ nghĩa (Semantic Error)
- C. Lỗi ngoại lệ (Exception/Runtime Error)
- D. Lỗi logic (Logic Error)
Câu 2: Đoạn mã Python sau có lỗi gì?
`if x > 0
print("Positive")`
- A. Lỗi cú pháp (Syntax Error) do thiếu dấu hai chấm.
- B. Lỗi ngữ nghĩa (Semantic Error) do biến x chưa được định nghĩa.
- C. Lỗi ngoại lệ (Exception Error) do giá trị của x.
- D. Không có lỗi.
Câu 3: Một chương trình được thiết kế để tính diện tích hình chữ nhật. Công thức đúng là `dien_tich = chieu_dai * chieu_rong`. Tuy nhiên, lập trình viên lại viết `dien_tich = chieu_dai + chieu_rong`. Chương trình vẫn chạy được và không báo lỗi khi thực thi, nhưng kết quả tính toán bị sai. Đây là loại lỗi gì?
- A. Lỗi cú pháp (Syntax Error)
- B. Lỗi ngữ nghĩa (Semantic/Logic Error)
- C. Lỗi ngoại lệ (Exception Error)
- D. Lỗi hệ thống (System Error)
Câu 4: Đâu là đặc điểm khiến lỗi ngữ nghĩa (semantic error) thường khó phát hiện hơn so với lỗi cú pháp hoặc ngoại lệ?
- A. Trình biên dịch hoặc thông dịch luôn báo lỗi rõ ràng khi gặp lỗi ngữ nghĩa.
- B. Lỗi ngữ nghĩa chỉ xảy ra trên một số hệ điều hành nhất định.
- C. Lỗi ngữ nghĩa làm chương trình dừng đột ngột và hiển thị thông báo lỗi.
- D. Chương trình vẫn chạy bình thường về mặt kỹ thuật (không dừng, không báo lỗi cú pháp/ngoại lệ), nhưng kết quả đầu ra bị sai so với yêu cầu.
Câu 5: Để kiểm thử một chương trình tính căn bậc hai của một số, bộ dữ liệu kiểm thử nào sau đây là quan trọng nhất để phát hiện lỗi ngoại lệ?
- A. Các số dương lớn (ví dụ: 100, 1000)
- B. Số 0 và các số âm (ví dụ: 0, -5)
- C. Các số dương nhỏ (ví dụ: 0.5, 1)
- D. Các số nguyên tố
Câu 6: Khi kiểm thử một chương trình, việc sử dụng "dữ liệu biên" (boundary data) nhằm mục đích gì?
- A. Kiểm tra hoạt động của chương trình với các giá trị tại ranh giới của phạm vi hợp lệ (ví dụ: giá trị nhỏ nhất/lớn nhất, giá trị 0, giá trị chuyển đổi điều kiện).
- B. Kiểm tra chương trình có xử lý được dữ liệu không hợp lệ hay không.
- C. Kiểm tra hiệu suất của chương trình với lượng dữ liệu lớn.
- D. Kiểm tra chương trình có chạy được trên nhiều hệ điều hành khác nhau hay không.
Câu 7: Bạn đang viết một chương trình xử lý danh sách. Bạn gặp lỗi khi truy cập phần tử ở chỉ mục cuối cùng của danh sách trong một số trường hợp. Loại dữ liệu kiểm thử nào sau đây có khả năng giúp bạn tìm ra lỗi này nhanh nhất?
- A. Danh sách chỉ chứa các số dương.
- B. Danh sách có kích thước rất lớn.
- C. Danh sách rỗng hoặc danh sách chỉ có một phần tử.
- D. Danh sách chứa cả số dương và số âm.
Câu 8: Công cụ nào trong môi trường phát triển tích hợp (IDE) thường được sử dụng để "truy vết" (trace) quá trình thực thi của chương trình, cho phép chạy từng câu lệnh một và quan sát giá trị các biến?
- A. Trình soạn thảo mã nguồn (Code Editor)
- B. Trình biên dịch/thông dịch (Compiler/Interpreter)
- C. Công cụ quản lý phiên bản (Version Control)
- D. Công cụ gỡ lỗi (Debugger)
Câu 9: Trong quá trình sử dụng công cụ gỡ lỗi (debugger), hành động "Step Over" (Bước qua) một dòng lệnh có ý nghĩa gì?
- A. Thực thi toàn bộ hàm hoặc thủ tục được gọi trong dòng lệnh đó như một bước duy nhất mà không đi sâu vào chi tiết bên trong hàm.
- B. Đi sâu vào thực thi từng câu lệnh bên trong hàm hoặc thủ tục được gọi.
- C. Tiếp tục chạy chương trình cho đến khi gặp điểm dừng (breakpoint) tiếp theo hoặc kết thúc chương trình.
- D. Dừng chương trình ngay lập tức.
Câu 10: Khi đang gỡ lỗi một chương trình bằng debugger, bạn muốn kiểm tra giá trị của một biến cụ thể sau khi một đoạn mã phức tạp được thực thi mà không cần chạy từng dòng lệnh bên trong đoạn mã đó. Chức năng nào của debugger sẽ hữu ích nhất?
- A. Step Into
- B. Set Breakpoint (Thiết lập điểm dừng)
- C. Step Out
- D. Restart Debugging
Câu 11: Phương pháp gỡ lỗi bằng cách thêm các câu lệnh `print()` hoặc hiển thị thông báo vào mã nguồn để kiểm tra giá trị biến và luồng thực thi được gọi là gì?
- A. Kiểm thử đơn vị (Unit Testing)
- B. Kiểm thử tích hợp (Integration Testing)
- C. Gỡ lỗi bằng in ấn (Print Debugging)
- D. Kiểm thử hệ thống (System Testing)
Câu 12: So với việc sử dụng công cụ debugger chuyên nghiệp, phương pháp gỡ lỗi bằng cách in giá trị (print debugging) có nhược điểm chính là gì?
- A. Cần phải sửa đổi mã nguồn gốc, có thể quên xóa các câu lệnh in sau khi gỡ lỗi xong và khó kiểm soát luồng thực thi chi tiết (ví dụ: bỏ qua một số dòng, chỉ chạy đến một điểm nhất định).
- B. Không thể xem được giá trị của biến.
- C. Chỉ áp dụng được cho các chương trình rất đơn giản.
- D. Không thể phát hiện được lỗi ngoại lệ.
Câu 13: Khi thiết kế bộ dữ liệu kiểm thử cho một chương trình, tại sao việc bao gồm "dữ liệu không hợp lệ" (invalid data) lại quan trọng?
- A. Để kiểm tra xem chương trình có chạy nhanh hơn với dữ liệu sai không.
- B. Để chương trình bỏ qua việc xử lý dữ liệu sai.
- C. Dữ liệu không hợp lệ giúp tìm lỗi ngữ nghĩa dễ dàng hơn.
- D. Để kiểm tra khả năng xử lý các trường hợp ngoại lệ hoặc báo lỗi một cách thân thiện khi người dùng nhập sai dữ liệu.
Câu 14: Bạn nhận được báo cáo rằng chương trình của bạn thỉnh thoảng đưa ra kết quả sai cho một số trường hợp đầu vào cụ thể, nhưng không báo lỗi gì cả. Loại lỗi nào có khả năng nhất đang xảy ra?
- A. Lỗi cú pháp.
- B. Lỗi ngữ nghĩa/logic.
- C. Lỗi ngoại lệ.
- D. Lỗi hệ thống.
Câu 15: Trong quá trình gỡ lỗi bằng debugger, chức năng "Step Into" (Bước vào) khác "Step Over" (Bước qua) ở điểm nào?
- A. Step Into chạy nhanh hơn Step Over.
- B. Step Over được dùng cho vòng lặp, Step Into dùng cho hàm.
- C. Step Into sẽ đi sâu vào thực thi từng câu lệnh bên trong một hàm được gọi, trong khi Step Over thực thi toàn bộ hàm đó như một bước duy nhất.
- D. Step Into dùng để bỏ qua dòng lệnh, Step Over dùng để chạy dòng lệnh.
Câu 16: Khi chương trình Python gặp lỗi ngoại lệ (exception), điều gì thường xảy ra mặc định nếu ngoại lệ đó không được xử lý?
- A. Chương trình dừng đột ngột và in ra thông báo lỗi (traceback) chi tiết về loại lỗi và vị trí xảy ra lỗi.
- B. Chương trình tự động sửa lỗi và tiếp tục chạy.
- C. Chương trình bỏ qua dòng lệnh gây lỗi và tiếp tục chạy từ dòng tiếp theo.
- D. Chương trình chỉ in ra cảnh báo và vẫn tiếp tục chạy.
Câu 17: Mục tiêu chính của việc kiểm thử chương trình là gì?
- A. Chứng minh chương trình hoàn toàn không có lỗi.
- B. Làm cho chương trình chạy nhanh hơn.
- C. Thay thế hoàn toàn quá trình gỡ lỗi.
- D. Tìm ra càng nhiều lỗi càng tốt để đảm bảo chất lượng và độ tin cậy của chương trình.
Câu 18: Một chương trình tính tổng các số từ 1 đến N. Lập trình viên viết vòng lặp `for i in range(N): sum += i`. Khi chạy với N=5, kết quả thu được là 10 (0+1+2+3+4) thay vì 15 (1+2+3+4+5). Đây là loại lỗi gì và cách khắc phục trong trường hợp này?
- A. Lỗi ngữ nghĩa/logic. Vòng lặp `range(N)` chạy từ 0 đến N-1. Cần sửa thành `range(1, N+1)` hoặc khởi tạo `sum = 0` và vòng lặp `range(N+1)`.
- B. Lỗi cú pháp. Thiếu dấu hai chấm sau `range(N)`. (Sai cấu trúc câu hỏi)
- C. Lỗi ngoại lệ. Khi N quá lớn. (Không đúng trong ví dụ)
- D. Lỗi ngữ nghĩa. Cần sử dụng `while` loop thay vì `for` loop. (Không cần thiết)
Câu 19: Khi sử dụng công cụ debugger, "Watch" (Theo dõi) một biến có ý nghĩa là gì?
- A. Thay đổi giá trị của biến trong quá trình chạy.
- B. Hiển thị giá trị hiện tại của biến đó trong một cửa sổ riêng và cập nhật khi giá trị thay đổi qua từng bước thực thi.
- C. Thực thi chỉ dòng lệnh chứa biến đó.
- D. Đặt điểm dừng (breakpoint) tại dòng lệnh mà biến đó xuất hiện.
Câu 20: Bạn đang gỡ lỗi một chương trình phức tạp và nghi ngờ lỗi nằm trong một hàm cụ thể. Bạn muốn chương trình chạy bình thường cho đến khi vào đầu hàm đó, sau đó mới bắt đầu chạy từng bước. Bạn nên sử dụng công cụ debugger như thế nào?
- A. Đặt một breakpoint tại dòng lệnh đầu tiên của hàm đó và sử dụng chức năng "Run" (Chạy) hoặc "Continue" (Tiếp tục).
- B. Sử dụng chức năng "Step Into" từ đầu chương trình.
- C. Sử dụng chức năng "Step Over" cho toàn bộ chương trình.
- D. Thêm nhiều câu lệnh print vào trong hàm đó.
Câu 21: Phát biểu nào sau đây mô tả đúng nhất về vai trò của việc kiểm thử chương trình trước khi đưa vào sử dụng?
- A. Kiểm thử giúp chứng minh chương trình không có bất kỳ lỗi nào.
- B. Kiểm thử giúp phát hiện lỗi và đảm bảo chương trình hoạt động đúng với các yêu cầu đặt ra trong nhiều trường hợp khác nhau.
- C. Kiểm thử chỉ cần thực hiện một lần duy nhất sau khi hoàn thành code.
- D. Kiểm thử là quá trình chỉ dành cho người dùng cuối, không phải lập trình viên.
Câu 22: Một chương trình yêu cầu người dùng nhập một số nguyên dương. Nếu người dùng nhập một chuỗi văn bản (ví dụ: "abc") thay vì số, loại lỗi nào có khả năng xảy ra nhất khi chương trình cố gắng chuyển đổi chuỗi đó thành số nguyên?
- A. Lỗi cú pháp (Syntax Error)
- B. Lỗi ngữ nghĩa (Semantic Error)
- C. Lỗi ngoại lệ (Exception/Runtime Error), cụ thể là ValueError.
- D. Không có lỗi, chương trình sẽ tự động chuyển đổi.
Câu 23: Đâu là một ví dụ về "dữ liệu đặc biệt" (special data) khi kiểm thử một chương trình xử lý số?
- A. Các số nguyên dương ngẫu nhiên.
- B. Các số thực trong khoảng từ 1 đến 100.
- C. Chuỗi ký tự "hello".
- D. Số 0, số âm, số rất lớn, số rất nhỏ.
Câu 24: Khi gỡ lỗi một chương trình, việc phân tích "traceback" (dấu vết lỗi) được in ra khi xảy ra lỗi ngoại lệ mang lại thông tin quan trọng gì?
- A. Loại lỗi xảy ra, dòng mã nguồn gây ra lỗi, và chuỗi các lệnh gọi hàm dẫn đến dòng mã đó.
- B. Nguyên nhân gốc rễ của lỗi ngữ nghĩa.
- C. Cách sửa lỗi tự động.
- D. Thời gian cần thiết để gỡ lỗi.
Câu 25: Bạn có một hàm tính giai thừa của một số nguyên không âm N. Bạn muốn kiểm thử hàm này một cách kỹ lưỡng. Bộ dữ liệu kiểm thử nào sau đây là phù hợp nhất?
- A. Chỉ các số nguyên dương lớn.
- B. Chỉ các số âm.
- C. Số 0, số 1 (trường hợp biên), một vài số nguyên dương nhỏ (ví dụ: 5, 10), và một số nguyên dương lớn (để kiểm tra giới hạn/hiệu suất).
- D. Các số thực.
Câu 26: Công đoạn nào trong quy trình phát triển phần mềm thường được thực hiện song song hoặc ngay sau khi viết mã nguồn để tìm và sửa lỗi?
- A. Thiết kế hệ thống.
- B. Kiểm thử và gỡ lỗi.
- C. Phân tích yêu cầu.
- D. Triển khai (Deployment).
Câu 27: Khi gỡ lỗi một chương trình bằng cách đọc code và suy luận (desk checking), ưu điểm chính của phương pháp này là gì?
- A. Không cần chạy chương trình, có thể phát hiện lỗi logic hoặc cú pháp ngay từ khi đọc code, đặc biệt hữu ích với các đoạn code ngắn.
- B. Phát hiện lỗi ngoại lệ một cách tự động.
- C. Luôn nhanh hơn và hiệu quả hơn so với sử dụng debugger.
- D. Có thể áp dụng cho mọi chương trình, bất kể độ phức tạp.
Câu 28: Bạn đang gỡ lỗi một vòng lặp trong chương trình. Vòng lặp này dường như không kết thúc hoặc lặp sai số lần. Kỹ thuật gỡ lỗi nào sau đây có thể giúp bạn hiểu rõ hơn vấn đề?
- A. Chỉ kiểm tra lỗi cú pháp.
- B. Chạy toàn bộ chương trình một lần duy nhất.
- C. Xóa bỏ vòng lặp đó.
- D. Sử dụng debugger để chạy từng bước qua vòng lặp và theo dõi giá trị của biến đếm hoặc điều kiện lặp.
Câu 29: Lỗi nào sau đây thường được phát hiện sớm nhất trong quá trình viết mã và thường được IDE hoặc trình thông dịch báo ngay lập tức?
- A. Lỗi cú pháp (Syntax Error)
- B. Lỗi ngữ nghĩa (Semantic Error)
- C. Lỗi ngoại lệ (Exception Error)
- D. Lỗi logic (Logic Error)
Câu 30: Khi kiểm thử một chương trình xử lý dữ liệu đầu vào từ người dùng, việc tạo các bộ dữ liệu kiểm thử đa dạng (thường gặp, đặc biệt, không hợp lệ) giúp đảm bảo điều gì?
- A. Chương trình sẽ chạy nhanh hơn.
- B. Chương trình sẽ tự động sửa lỗi.
- C. Chương trình chỉ hoạt động với dữ liệu hợp lệ.
- D. Chương trình có khả năng xử lý đúng đắn và ổn định trong nhiều tình huống khác nhau, bao gồm cả các trường hợp bất thường hoặc sai sót từ phía người dùng.