1. Nếu một chương trình hoạt động đúng với một bộ dữ liệu kiểm thử nhưng lại sai với bộ dữ liệu khác, vấn đề có khả năng nằm ở đâu?
A. Lỗi cú pháp.
B. Lỗi logic chưa bao quát hết các trường hợp hoặc điều kiện biên.
C. Trình biên dịch bị lỗi.
D. Thiếu bộ nhớ RAM.
2. Trong phương pháp Chia để trị để gỡ lỗi, mục tiêu chính là gì?
A. Viết lại toàn bộ chương trình từ đầu.
B. Chia nhỏ vấn đề phức tạp thành các phần nhỏ hơn, dễ quản lý và kiểm tra hơn.
C. Sử dụng một công cụ gỡ lỗi tự động để tìm và sửa lỗi.
D. Yêu cầu người khác kiểm tra code.
3. Trong quá trình lập trình, khi gặp một lỗi không mong muốn, bước đầu tiên và quan trọng nhất để xử lý là gì?
A. Thay đổi tất cả các dòng code một cách ngẫu nhiên để xem có khắc phục được không.
B. Bỏ qua lỗi và tiếp tục chạy chương trình để xem kết quả cuối cùng.
C. Xác định và hiểu rõ thông báo lỗi hoặc hành vi bất thường của chương trình.
D. Tìm kiếm giải pháp trên mạng mà không cần hiểu nguyên nhân gốc rễ.
4. Khi sử dụng printf debugging (in giá trị biến ra màn hình), mục đích chính là gì?
A. Tạo ra giao diện người dùng đẹp mắt hơn.
B. Theo dõi luồng thực thi và giá trị của các biến tại các điểm khác nhau trong chương trình.
C. Tăng tốc độ xử lý của chương trình.
D. Kiểm tra kết nối mạng của chương trình.
5. Phát biểu nào sau đây mô tả đúng nhất về Runtime Error (Lỗi trong khi chạy)?
A. Lỗi xảy ra ngay trong quá trình biên dịch, ngăn chương trình chạy.
B. Lỗi xảy ra khi chương trình đang chạy, gây ra sự cố hoặc dừng đột ngột.
C. Lỗi do sai sót trong thuật toán dẫn đến kết quả không mong muốn.
D. Lỗi cú pháp trong câu lệnh lập trình.
6. Phát biểu nào sau đây không phải là một kỹ thuật gỡ lỗi phổ biến?
A. Sử dụng trình gỡ lỗi (Debugger).
B. In giá trị biến (Printf debugging).
C. Kiểm thử đơn vị (Unit testing).
D. Viết code không cần kiểm tra lại.
7. Nếu một chương trình báo lỗi Null Pointer Exception (Ngoại lệ con trỏ rỗng), điều này thường ám chỉ vấn đề gì?
A. Lỗi cú pháp nghiêm trọng.
B. Cố gắng truy cập hoặc sử dụng một biến tham chiếu (con trỏ) chưa được gán giá trị hợp lệ (null).
C. Chương trình đã hết dung lượng lưu trữ.
D. Lỗi logic trong vòng lặp.
8. Khi gỡ lỗi, việc tạo ra các test case (trường hợp kiểm thử) đa dạng, bao gồm cả các trường hợp thông thường và trường hợp biên (edge cases), nhằm mục đích gì?
A. Làm cho chương trình phức tạp hơn.
B. Đảm bảo chương trình hoạt động chính xác trong mọi tình huống có thể xảy ra.
C. Giảm số lượng dòng code.
D. Tăng tốc độ thực thi của chương trình.
9. Khi một chương trình hiển thị thông báo lỗi Syntax Error, điều này thường chỉ ra vấn đề gì?
A. Lỗi logic trong thuật toán.
B. Lỗi trong cấu trúc cú pháp của ngôn ngữ lập trình.
C. Lỗi liên quan đến việc sử dụng bộ nhớ.
D. Lỗi do nhập dữ liệu không hợp lệ từ người dùng.
10. Công cụ nào sau đây thường được sử dụng để theo dõi giá trị của biến hoặc biểu thức trong quá trình thực thi chương trình, giúp phát hiện lỗi?
A. Trình soạn thảo văn bản (Text Editor).
B. Trình biên dịch (Compiler).
C. Trình gỡ lỗi (Debugger).
D. Trình duyệt web (Web Browser).
11. Phát biểu nào sau đây mô tả đúng nhất về Logic Error (Lỗi logic)?
A. Chương trình không thể biên dịch hoặc chạy được do sai cú pháp.
B. Chương trình chạy mà không báo lỗi nhưng cho ra kết quả sai hoặc không như mong đợi.
C. Chương trình gặp sự cố bất ngờ và dừng đột ngột.
D. Lỗi liên quan đến việc truy cập hoặc ghi dữ liệu vào bộ nhớ không hợp lệ.
12. Phát biểu nào sau đây là một bước quan trọng trong quá trình gỡ lỗi lặp đi lặp lại (iterative debugging)?
A. Thực hiện một lần sửa lỗi và không bao giờ kiểm tra lại.
B. Sau khi sửa lỗi, chạy lại chương trình để xác nhận lỗi đã được khắc phục và không gây ra lỗi mới.
C. Luôn luôn bắt đầu lại từ đầu với một đoạn mã hoàn toàn mới.
D. Chỉ sửa những lỗi hiển thị rõ ràng trên màn hình.
13. Một lập trình viên muốn kiểm tra xem một hàm có thực sự nhận đúng các tham số đầu vào và trả về đúng giá trị mong đợi hay không. Họ nên thực hiện hành động nào sau đây?
A. Biên dịch lại toàn bộ chương trình.
B. Thực hiện unit testing (kiểm thử đơn vị) cho hàm đó.
C. Chỉ chạy chương trình với một vài trường hợp dữ liệu thông thường.
D. Thay đổi cách đặt tên biến trong hàm.
14. Phương pháp Binary Search (Tìm kiếm nhị phân) có thể áp dụng để gỡ lỗi như thế nào?
A. Chia nhỏ đoạn code đang nghi ngờ thành hai nửa và kiểm tra nửa nào chứa lỗi.
B. Tìm kiếm trên mạng theo từng từ khóa nhỏ.
C. Kiểm tra toàn bộ mã nguồn từ đầu đến cuối.
D. Chỉ tập trung vào các dòng code mới được viết.
15. Khi một lập trình viên tìm thấy một lỗi, họ nên làm gì trước khi cố gắng sửa nó?
A. Xóa toàn bộ code và viết lại.
B. Ghi chú lại chi tiết lỗi, bao gồm thông báo lỗi, các bước tái hiện và môi trường chạy.
C. Hỏi đồng nghiệp xem họ có biết cách sửa không mà không cần tìm hiểu.
D. Bỏ qua lỗi đó và hy vọng nó sẽ tự biến mất.
16. Khi gỡ lỗi, stepping through (đi qua từng bước) chương trình bằng trình gỡ lỗi (debugger) giúp ích gì?
A. Giúp chương trình chạy nhanh hơn.
B. Cho phép quan sát chi tiết từng lệnh được thực thi và sự thay đổi giá trị biến.
C. Tự động sửa tất cả các lỗi cú pháp.
D. Tạo báo cáo lỗi chi tiết cho nhà phát triển.
17. Công nghệ nào sau đây giúp lập trình viên xem xét lại lịch sử thay đổi của mã nguồn, quay về các phiên bản trước để tìm lỗi hoặc khôi phục?
A. Hệ thống quản lý cơ sở dữ liệu (DBMS).
B. Hệ thống kiểm soát phiên bản (Version Control System), ví dụ Git.
C. Công cụ tạo báo cáo (Reporting Tool).
D. Trình biên dịch mã nguồn (Source Code Compiler).
18. Khi một lập trình viên nhận được báo cáo lỗi từ người dùng, bước tiếp theo hiệu quả nhất sau khi thu thập thông tin là gì?
A. Ngay lập tức thay đổi toàn bộ code.
B. Cố gắng tái hiện lại lỗi dựa trên thông tin được cung cấp.
C. Phớt lờ báo cáo lỗi vì người dùng có thể sai.
D. Gửi một thông báo tự động cho người dùng rằng lỗi đã được ghi nhận.
19. Trong trường hợp chương trình chạy chậm bất thường, đâu có thể là nguyên nhân?
A. Sử dụng thuật toán không hiệu quả hoặc lặp lại vô hạn.
B. Thiếu các comment trong code.
C. Tên biến quá dài.
D. Sử dụng quá nhiều dấu chấm phẩy.
20. Khi một chương trình yêu cầu nhập liệu từ người dùng và người dùng nhập sai định dạng (ví dụ: nhập chữ thay vì số), lỗi này thường thuộc loại nào?
A. Syntax Error.
B. Logic Error.
C. Runtime Error (do chương trình không xử lý được input sai).
D. Compile Error.
21. Một lập trình viên viết một đoạn mã tính chu vi hình tròn nhưng quên nhân với số Pi (π). Đây là loại lỗi gì?
A. Syntax Error.
B. Runtime Error.
C. Logic Error.
D. Compile Error.
22. Trong quá trình gỡ lỗi, nếu bạn nghi ngờ một đoạn mã cụ thể, hành động nào sau đây là hợp lý?
A. Xóa bỏ hoàn toàn đoạn mã đó.
B. Thêm các câu lệnh print hoặc sử dụng trình gỡ lỗi để theo dõi hoạt động của đoạn mã đó.
C. Chỉ đọc lại đoạn mã đó một lần nữa.
D. Chuyển sang gỡ lỗi một phần khác của chương trình.
23. Công cụ nào giúp tự động kiểm tra và tìm lỗi trong mã nguồn mà không cần chạy chương trình?
A. Trình gỡ lỗi (Debugger).
B. Trình biên dịch (Compiler).
C. Trình phân tích tĩnh mã nguồn (Static Code Analyzer).
D. Trình thông dịch (Interpreter).
24. Một chương trình bị treo và không phản hồi khi thực hiện một tác vụ nhất định. Đây có thể là dấu hiệu của loại lỗi nào?
A. Syntax Error.
B. Logic Error (ví dụ: vòng lặp vô hạn).
C. Compile Error.
D. Lỗi chính tả trong tên biến.
25. Khi bạn gặp lỗi Index Out of Bounds trong một mảng (array), điều đó có nghĩa là gì?
A. Bạn đang cố gắng truy cập một phần tử của mảng bằng một chỉ số (index) không tồn tại.
B. Kích thước của mảng lớn hơn bộ nhớ cho phép.
C. Bạn đã sử dụng sai kiểu dữ liệu cho các phần tử trong mảng.
D. Chương trình đã cố gắng truy cập vào một biến chưa được khai báo.