Trắc nghiệm Tin 10 Cánh diều Bài 16: Kiểm thử và gỡ lỗi chương trình - Đề 10 được xây dựng với nhiều câu hỏi chất lượng, sát với nội dung chương trình học, giúp bạn dễ dàng ôn tập và kiểm tra kiến thức hiệu quả. Hãy cùng bắt đầu làm bài tập trắc nghiệm ngay để nâng cao hiểu biết và chuẩn bị tốt cho kỳ thi sắp tới!
Câu 1: Khi viết chương trình Python, bạn gõ sai chính tả tên một hàm hoặc thiếu dấu hai chấm (:) ở cuối câu lệnh `if`. Đây là loại lỗi gì?
- A. Lỗi cú pháp (Syntax Error)
- B. Lỗi ngoại lệ (Exception Error)
- C. Lỗi ngữ nghĩa (Semantic Error)
- D. Lỗi logic (Logic Error)
Câu 2: Chương trình Python của bạn yêu cầu người dùng nhập một số nguyên, nhưng người dùng lại nhập vào một chuỗi văn bản. Khi chương trình cố gắng chuyển đổi chuỗi này thành số, nó sẽ dừng đột ngột. 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 ngoại lệ (Exception Error)
- C. Lỗi ngữ nghĩa (Semantic Error)
- D. Lỗi logic (Logic Error)
Câu 3: Bạn viết chương trình tính diện tích hình chữ nhật bằng cách lấy chiều dài nhân chiều rộng. Tuy nhiên, bạn nhầm lẫn sử dụng phép cộng thay vì phép nhân. Chương trình chạy không báo lỗi nhưng kết quả tính ra luôn sai. Đây là loại lỗi gì?
- A. Lỗi cú pháp (Syntax Error)
- B. Lỗi ngoại lệ (Exception Error)
- C. Lỗi ngữ nghĩa (Semantic Error)
- D. Lỗi thời gian chạy (Runtime Error)
Câu 4: Lỗi nào trong các loại lỗi cơ bản thường khó phát hiện nhất chỉ bằng việc chạy chương trình mà không có các bộ dữ liệu kiểm thử kỹ lưỡng?
- A. Lỗi cú pháp (Syntax Error)
- B. Lỗi ngoại lệ (Exception Error)
- C. Lỗi ngữ nghĩa (Semantic Error)
- D. Cả ba loại lỗi đều dễ phát hiện như nhau
Câu 5: Mục đích chính của việc kiểm thử chương trình là gì?
- A. Phát hiện lỗi và xác minh chương trình hoạt động đúng yêu cầu.
- B. Làm cho chương trình chạy nhanh hơn.
- C. Giảm dung lượng bộ nhớ mà chương trình sử dụng.
- D. Thay đổi ngôn ngữ lập trình của chương trình.
Câu 6: Khi kiểm thử một chương trình, việc sử dụng các bộ dữ liệu kiểm thử đặc biệt (ví dụ: số 0, số âm, chuỗi rỗng) nhằm mục đích gì?
- A. Kiểm tra chương trình có chạy được với dữ liệu lớn không.
- B. Kiểm tra cách chương trình xử lý các trường hợp biên hoặc không mong đợi.
- C. Chỉ để kiểm tra lỗi cú pháp.
- D. Làm cho quá trình kiểm thử nhanh hơn.
Câu 7: Bạn đang viết một chương trình xử lý danh sách các số. Để kiểm thử chức năng xử lý danh sách trống, bạn nên sử dụng bộ dữ liệu kiểm thử nào?
- A. Một danh sách chứa nhiều số dương.
- B. Một danh sách chứa các số rất lớn.
- C. Một danh sách chứa cả số dương và số âm.
- D. Một danh sách rỗng (không chứa phần tử nào).
Câu 8: Quá trình tìm kiếm và loại bỏ các lỗi trong chương trình được gọi là gì?
- A. Gỡ lỗi (Debugging)
- B. Kiểm thử (Testing)
- C. Biên dịch (Compiling)
- D. Thực thi (Executing)
Câu 9: Khi gặp một lỗi ngữ nghĩa khó hiểu, phương pháp nào sau đây thường hiệu quả nhất để tìm ra nguyên nhân?
- A. Chỉ đọc lại code một cách nhanh chóng.
- B. Sử dụng công cụ gỡ lỗi (debugger) để theo dõi giá trị biến và luồng thực thi từng bước.
- C. Xóa bớt các dòng code để chương trình ngắn gọn hơn.
- D. Chạy chương trình với cùng một bộ dữ liệu kiểm thử nhiều lần.
Câu 10: Công cụ hỗ trợ gỡ lỗi (debugger) trong môi trường lập trình thường cung cấp khả năng nào sau đây?
- A. Chỉ ra tất cả các lỗi cú pháp tự động.
- B. Tự động sửa các lỗi ngữ nghĩa.
- C. Tăng tốc độ thực thi chương trình.
- D. Cho phép chạy chương trình từng bước, tạm dừng tại các điểm nhất định và xem giá trị biến.
Câu 11: Trong quá trình gỡ lỗi, việc đặt "điểm dừng" (breakpoint) có ý nghĩa gì?
- A. Chương trình sẽ tạm dừng thực thi tại dòng code đó để người lập trình kiểm tra.
- B. Đánh dấu dòng code cần xóa.
- C. Chỉ ra dòng code không có lỗi.
- D. Làm cho dòng code đó được bỏ qua khi chạy chương trình.
Câu 12: Bạn có một chương trình tính tổng các số từ 1 đến N. Bạn kiểm thử với N=3 và nhận được kết quả là 5 thay vì 6. Bạn nghi ngờ lỗi nằm trong vòng lặp tính tổng. Phương pháp gỡ lỗi nào sau đây phù hợp nhất để xác định chính xác lúc nào tổng bị sai?
- A. Chỉ đọc code và đoán.
- B. Sử dụng debugger để chạy từng bước vòng lặp và theo dõi giá trị biến tổng.
- C. Chạy chương trình với N=1000.
- D. Kiểm tra lại lỗi cú pháp.
Câu 13: Một chương trình tính trung bình cộng của các số trong danh sách. Khi chạy với danh sách [10, 20, 30], chương trình in ra 20. Khi chạy với danh sách [10, 20, 30, 40], chương trình in ra 25. Nhưng khi chạy với danh sách [5, 5, 5], chương trình in ra 10. Dấu hiệu này cho thấy khả năng cao chương trình đang mắc loại lỗi gì?
- A. Lỗi cú pháp nghiêm trọng.
- B. Lỗi ngoại lệ do dữ liệu nhập.
- C. Lỗi ngữ nghĩa/logic trong công thức hoặc thuật toán tính trung bình.
- D. Lỗi do hệ điều hành.
Câu 14: Khi kiểm thử một chương trình xử lý phép chia, bộ dữ liệu kiểm thử nào sau đây là quan trọng nhất để kiểm tra lỗi ngoại lệ?
- A. Các cặp số dương lớn.
- B. Cặp số mà số bị chia là bất kỳ và số chia là 0.
- C. Cặp số âm.
- D. Cặp số thập phân.
Câu 15: Bạn viết một hàm tính giai thừa của một số nguyên không âm. Để kiểm thử hàm này, bộ dữ liệu nào sau đây thuộc loại "trường hợp đặc biệt" hoặc "biên" cần được cân nhắc?
- A. Số 0 và số 1.
- B. Các số nguyên dương lớn.
- C. Các số nguyên âm.
- D. Các số thập phân.
Câu 16: Giả sử bạn có đoạn code Python sau: `print("Hello world")`. Nếu bạn chạy đoạn code này và nhận được thông báo lỗi `SyntaxError: invalid syntax`, lỗi đó có khả năng là do đâu?
- A. Kết nối mạng bị lỗi.
- B. Bộ nhớ máy tính không đủ.
- C. Bạn đang cố gắng chia cho 0.
- D. Bạn đã gõ sai cú pháp (ví dụ: thiếu dấu nháy kép hoặc dấu ngoặc).
Câu 17: Việc sử dụng các câu lệnh `print()` để in ra giá trị của các biến tại các điểm khác nhau trong chương trình là một kỹ thuật gỡ lỗi. Kỹ thuật này thuộc nhóm nào?
- A. Truy vết thủ công (Manual Tracing)
- B. Sử dụng debugger chuyên nghiệp
- C. Kiểm thử tự động
- D. Tối ưu hóa code
Câu 18: So với việc sử dụng các câu lệnh `print()` để gỡ lỗi, công cụ debugger mang lại lợi thế đáng kể nào?
- A. Chỉ có thể phát hiện lỗi cú pháp.
- B. Yêu cầu phải thay đổi code gốc rất nhiều.
- C. Cho phép kiểm soát luồng thực thi (chạy từng bước, bỏ qua hàm) và xem giá trị biến mà không cần chỉnh sửa code gốc quá nhiều.
- D. Tự động sửa tất cả các loại lỗi.
Câu 19: Khi kiểm thử một chương trình tính toán liên quan đến các số rất lớn (ví dụ: tính tổng 1 triệu số), bộ dữ liệu kiểm thử loại này nhằm mục đích chính là gì?
- A. Kiểm tra lỗi cú pháp.
- B. Kiểm tra lỗi ngoại lệ do chia cho 0.
- C. Kiểm tra các trường hợp đặc biệt như số 0 hoặc số âm.
- D. Kiểm tra hiệu suất và khả năng xử lý dữ liệu lớn của chương trình, có thể phát hiện lỗi tràn bộ nhớ hoặc chậm đáng kể.
Câu 20: Giả sử bạn có đoạn code sau: `age = int(input("Nhập tuổi của bạn: "))`. Nếu người dùng nhập "mười lăm", loại lỗi nào có khả năng xảy ra khi chương trình thực thi dòng lệnh này?
- A. Lỗi cú pháp (Syntax Error).
- B. Lỗi ngoại lệ (Exception Error), cụ thể là ValueError.
- C. Lỗi ngữ nghĩa (Semantic Error).
- D. Không có lỗi nào xảy ra.
Câu 21: Bạn đang gỡ lỗi một chương trình in ra dãy số Fibonacci. Bạn nhận thấy chương trình in ra 1, 1, 2, 3, 5, 8,... (đúng) nhưng khi đến số thứ 100 thì kết quả đột nhiên sai. Bạn nên tập trung kiểm tra phần code nào trước tiên?
- A. Phần code tính toán các số Fibonacci, đặc biệt là cách nó xử lý các giá trị lớn hoặc lặp lại nhiều lần.
- B. Phần code nhập dữ liệu ban đầu.
- C. Phần code in kết quả ra màn hình.
- D. Kiểm tra lại xem có thiếu dấu chấm phẩy ở đâu không.
Câu 22: Một chương trình sắp xếp danh sách các số. Bạn kiểm thử với danh sách [3, 1, 4, 1, 5, 9] và nhận được kết quả [1, 1, 3, 4, 5, 9] (đúng). Nhưng khi kiểm thử với danh sách [5, 4, 3, 2, 1], chương trình lại cho kết quả [1, 2, 3, 5, 4] (sai). Điều này gợi ý rằng lỗi có thể liên quan đến:
- A. Lỗi cú pháp trong câu lệnh `print`.
- B. Lỗi ngoại lệ khi nhập dữ liệu.
- C. Chỉ có lỗi khi danh sách đầu vào đã được sắp xếp một phần.
- D. Lỗi logic trong thuật toán sắp xếp, có thể không xử lý đúng các trường hợp danh sách gần như hoặc đã sắp xếp ngược.
Câu 23: Bạn viết một chương trình có sử dụng hàm `tinh_toan(a, b)`. Khi kiểm thử, bạn thấy rằng với `a=10, b=2`, kết quả đúng. Với `a=5, b=0`, chương trình dừng với lỗi `ZeroDivisionError`. Loại lỗi này là gì và bạn nên làm gì?
- A. Lỗi cú pháp; Sửa lỗi chính tả trong tên hàm.
- B. Lỗi ngữ nghĩa; Thay phép chia bằng phép cộng.
- C. Lỗi ngoại lệ; Bổ sung xử lý trường hợp số chia bằng 0.
- D. Không có lỗi; Đây là hành vi bình thường.
Câu 24: Để đảm bảo chương trình của bạn hoạt động ổn định và đáng tin cậy, quy trình phát triển phần mềm hợp lý nên bao gồm kiểm thử vào giai đoạn nào?
- A. Chỉ sau khi chương trình đã hoàn thành 100%.
- B. Chỉ khi khách hàng báo cáo có lỗi.
- C. Chỉ trước khi phát hành sản phẩm.
- D. Thực hiện song song và lặp đi lặp lại trong suốt quá trình phát triển (viết code, kiểm thử, sửa lỗi, kiểm thử lại).
Câu 25: Khi gỡ lỗi bằng cách sử dụng debugger, việc "bước qua" (step over) một dòng code có ý nghĩa là gì?
- A. Thực thi dòng code đó (và toàn bộ hàm nếu nó là lời gọi hàm) rồi dừng ở dòng tiếp theo.
- B. Chỉ thực thi dòng code đó rồi kết thúc chương trình.
- C. Bỏ qua không thực thi dòng code đó.
- D. Thực thi dòng code đó và dừng lại bên trong hàm nếu đó là lời gọi hàm.
Câu 26: Việc chuẩn bị các bộ dữ liệu kiểm thử đa dạng (thường, đặc biệt, biên, lớn) giúp phát hiện những loại lỗi nào hiệu quả nhất?
- A. Chỉ lỗi cú pháp.
- B. Lỗi ngoại lệ và lỗi ngữ nghĩa.
- C. Chỉ lỗi do thiếu bộ nhớ.
- D. Chỉ lỗi do tốc độ xử lý chậm.
Câu 27: Giả sử bạn có đoạn code sau: `x = 10; if x > 5 print("x lớn hơn 5")`. Khi chạy, bạn nhận được lỗi `SyntaxError`. Vị trí lỗi có khả năng cao nhất là ở đâu?
- A. Ở dòng `x = 10;`
- B. Ở điều kiện `x > 5`.
- C. Thiếu dấu hai chấm (:) sau điều kiện `if` và/hoặc thụt lề dòng `print`.
- D. Trong chuỗi `"x lớn hơn 5"`.
Câu 28: Một chương trình tính tiền cước taxi dựa trên quãng đường. Giá cước có thể thay đổi tại các mốc quãng đường nhất định. Để kiểm thử chính xác, bạn nên chuẩn bị các bộ dữ liệu quãng đường nào?
- A. Chỉ các quãng đường rất dài.
- B. Chỉ các quãng đường ngắn (dưới 1km).
- C. Chỉ các quãng đường là số nguyên.
- D. Các quãng đường thông thường, các quãng đường bằng chính các mốc chuyển giá cước, và các quãng đường ngay sát dưới/trên các mốc đó.
Câu 29: Lỗi ngoại lệ (Exception Error) khác với lỗi cú pháp (Syntax Error) ở điểm nào?
- A. Lỗi cú pháp được phát hiện trước khi chương trình chạy (thường bởi trình thông dịch/biên dịch), còn lỗi ngoại lệ xảy ra trong quá trình chương trình đang chạy.
- B. Lỗi ngoại lệ dễ sửa hơn lỗi cú pháp.
- C. Lỗi cú pháp chỉ liên quan đến các phép toán, còn lỗi ngoại lệ liên quan đến cấu trúc câu lệnh.
- D. Lỗi ngoại lệ làm dừng chương trình ngay lập tức, còn lỗi cú pháp thì không.
Câu 30: Tại sao việc gỡ lỗi (debugging) thường là một quá trình lặp đi lặp lại?
- A. Vì mỗi lần sửa lỗi thường chỉ giải quyết được một lỗi duy nhất.
- B. Vì việc sửa một lỗi có thể vô tình tạo ra các lỗi mới hoặc làm lộ ra các lỗi khác chưa được phát hiện trước đó.
- C. Vì quá trình gỡ lỗi yêu cầu phải viết lại toàn bộ chương trình.
- D. Vì công cụ debugger chỉ hoạt động một lần duy nhất.