1. Loại lỗi nào thường khó phát hiện nhất vì nó không làm chương trình bị treo hoặc dừng đột ngột mà chỉ làm kết quả tính toán sai lệch?
A. Lỗi cú pháp (Syntax Error).
B. Lỗi logic (Logic Error).
C. Lỗi ngoại lệ (Exception Error).
D. Lỗi tràn bộ nhớ (Memory Leak).
2. Mục đích của kiểm thử hiệu năng (performance testing) là gì?
A. Kiểm tra xem chương trình có dễ sử dụng hay không.
B. Đánh giá tốc độ, khả năng phản hồi và độ ổn định của chương trình dưới các tải trọng khác nhau.
C. Xác minh tính đúng đắn của các thuật toán.
D. Kiểm tra khả năng tương thích trên nhiều hệ điều hành.
3. Mục tiêu chính của gỡ lỗi (debugging) trong lập trình là gì?
A. Tối ưu hóa hiệu suất của chương trình.
B. Tìm và sửa các lỗi (bug) gây ra hành vi sai hoặc sự cố cho chương trình.
C. Viết tài liệu hướng dẫn sử dụng chi tiết.
D. Tạo các trường hợp kiểm thử mới.
4. Một lỗi (bug) trong chương trình máy tính thường được định nghĩa là gì?
A. Một tính năng không được người dùng mong đợi.
B. Một vấn đề trong chương trình gây ra kết quả sai hoặc hành vi không mong muốn.
C. Một đoạn mã không hiệu quả.
D. Một yêu cầu thay đổi từ phía khách hàng.
5. Loại kiểm thử nào tập trung vào việc xác minh rằng từng đơn vị mã (ví dụ: một hàm hoặc một phương thức) hoạt động đúng theo yêu cầu?
A. Kiểm thử tích hợp (Integration Testing).
B. Kiểm thử hệ thống (System Testing).
C. Kiểm thử đơn vị (Unit Testing).
D. Kiểm thử chấp nhận (Acceptance Testing).
6. Nếu bạn phát hiện một lỗi trong chương trình và sau khi sửa lỗi đó, bạn chạy lại các bài kiểm thử trước đó để đảm bảo rằng việc sửa lỗi không gây ra vấn đề mới, bạn đang thực hiện loại kiểm thử nào?
A. Kiểm thử hồi quy (Regression Testing).
B. Kiểm thử khám phá (Exploratory Testing).
C. Kiểm thử hiệu năng (Performance Testing).
D. Kiểm thử chấp nhận (Acceptance Testing).
7. Trong quá trình kiểm thử, test data (dữ liệu kiểm thử) có vai trò gì?
A. Chỉ dùng để tăng kích thước của chương trình.
B. Là các giá trị đầu vào được sử dụng để thực thi chương trình và kiểm tra xem nó có hoạt động đúng theo yêu cầu hay không.
C. Là các báo cáo lỗi sau khi kiểm thử.
D. Là các công cụ dùng để tự động hóa kiểm thử.
8. Một kiểm thử hiệu năng tải (load testing) sẽ tập trung vào việc gì?
A. Kiểm tra xem chương trình có bị lỗi khi có nhiều người dùng truy cập đồng thời hay không.
B. Đảm bảo chương trình có giao diện đẹp và dễ dùng.
C. Xác minh rằng tất cả các chức năng đều hoạt động đúng.
D. Tìm các lỗ hổng bảo mật.
9. Kiểm thử hộp đen (black-box testing) tập trung vào khía cạnh nào của chương trình?
A. Cấu trúc mã và các câu lệnh bên trong.
B. Hiệu năng và tốc độ xử lý.
C. Chức năng và hành vi của chương trình dựa trên đầu vào và đầu ra, không xem xét cấu trúc bên trong.
D. Bảo mật dữ liệu và hệ thống.
10. Lỗi ngữ nghĩa (semantic error) trong lập trình là gì?
A. Lỗi do đặt tên biến không rõ ràng.
B. Lỗi do không khai báo biến trước khi sử dụng.
C. Lỗi do câu lệnh đúng về mặt cú pháp nhưng lại mang ý nghĩa sai lệch, dẫn đến kết quả không mong muốn.
D. Lỗi do chương trình chạy quá chậm.
11. Mục tiêu của kiểm thử bảo mật (security testing) là gì?
A. Đảm bảo chương trình hoạt động nhanh nhất có thể.
B. Kiểm tra xem chương trình có bị tấn công bởi các mã độc hoặc truy cập trái phép hay không.
C. Xác minh rằng tất cả các chức năng đều hoạt động đúng.
D. Đảm bảo giao diện người dùng thân thiện.
12. Trong kiểm thử chấp nhận (acceptance testing), ai thường là người thực hiện kiểm thử?
A. Nhóm phát triển phần mềm.
B. Người quản lý dự án.
C. Khách hàng hoặc người dùng cuối của sản phẩm.
D. Nhóm kiểm thử chuyên nghiệp.
13. Phương pháp chia để trị (divide and conquer) trong gỡ lỗi đề cập đến việc gì?
A. Chia nhỏ chương trình thành nhiều phần nhỏ hơn để kiểm thử riêng lẻ.
B. Chia sẻ trách nhiệm gỡ lỗi cho nhiều lập trình viên.
C. Chia chương trình thành các module chức năng.
D. Chia nhỏ tập dữ liệu đầu vào để kiểm thử.
14. Khi bạn sửa một lỗi và muốn chắc chắn rằng việc sửa đó không ảnh hưởng đến các chức năng khác của chương trình, bạn nên thực hiện loại kiểm thử nào?
A. Kiểm thử khám phá (Exploratory Testing).
B. Kiểm thử hồi quy (Regression Testing).
C. Kiểm thử tải (Load Testing).
D. Kiểm thử giao diện người dùng (UI Testing).
15. Khi hai hoặc nhiều mô-đun phần mềm được kết hợp lại, loại kiểm thử nào được thực hiện để kiểm tra sự tương tác giữa chúng?
A. Kiểm thử đơn vị (Unit Testing).
B. Kiểm thử tích hợp (Integration Testing).
C. Kiểm thử hiệu năng (Performance Testing).
D. Kiểm thử bảo mật (Security Testing).
16. Trong quá trình gỡ lỗi, sử dụng công cụ debugger giúp lập trình viên thực hiện hành động nào?
A. Tự động tạo ra các trường hợp kiểm thử.
B. Theo dõi từng bước thực thi của chương trình, kiểm tra giá trị biến và phát hiện điểm bất thường.
C. Biên dịch toàn bộ mã nguồn thành mã máy.
D. Tối ưu hóa thuật toán để tăng tốc độ xử lý.
17. Khi một lỗi xuất hiện, bước đầu tiên quan trọng nhất trong quy trình gỡ lỗi là gì?
A. Viết lại toàn bộ chương trình.
B. Tìm hiểu và tái hiện lại lỗi một cách nhất quán.
C. Báo cáo lỗi cho người quản lý dự án ngay lập tức.
D. Xóa bỏ tất cả các đoạn mã nghi ngờ.
18. Một trường hợp kiểm thử (test case) là gì?
A. Một đoạn mã được viết để tự động hóa quá trình kiểm thử.
B. Một tập hợp các điều kiện hoặc biến số, mục tiêu là tìm lỗi.
C. Một bộ các bước thực hiện, dữ liệu đầu vào và kết quả mong đợi để xác định xem một tính năng cụ thể có hoạt động đúng hay không.
D. Một báo cáo về các lỗi đã tìm thấy.
19. Kiểm thử hộp trắng (white-box testing) dựa trên thông tin nào của chương trình?
A. Chỉ dựa trên yêu cầu chức năng và giao diện người dùng.
B. Dựa trên cấu trúc bên trong, logic và mã nguồn của chương trình.
C. Dựa trên cách người dùng cuối tương tác với chương trình.
D. Dựa trên các trường hợp sử dụng (use cases).
20. Khi sử dụng phương pháp in ấn gỡ lỗi (print debugging), lập trình viên sẽ làm gì?
A. Sử dụng một công cụ chuyên dụng để theo dõi biến.
B. Chèn các câu lệnh in ra màn hình (ví dụ: print, console.log) để hiển thị giá trị của biến hoặc thông báo về luồng thực thi.
C. Biên dịch lại toàn bộ mã nguồn.
D. Viết lại các hàm bị lỗi.
21. Trong một quy trình gỡ lỗi, sau khi đã xác định được nguyên nhân của lỗi, bước tiếp theo là gì?
A. Viết báo cáo lỗi chi tiết.
B. Thực hiện sửa lỗi.
C. Chạy lại chương trình để xem lỗi còn tồn tại không.
D. Đóng trường hợp lỗi.
22. Loại kiểm thử nào đánh giá chương trình như một tổng thể, bao gồm cả phần cứng và phần mềm, để đảm bảo nó đáp ứng các yêu cầu ban đầu?
A. Kiểm thử đơn vị (Unit Testing).
B. Kiểm thử tích hợp (Integration Testing).
C. Kiểm thử hệ thống (System Testing).
D. Kiểm thử hồi quy (Regression Testing).
23. Khi bạn đang gỡ lỗi và muốn biết giá trị của một biến tại một thời điểm cụ thể trong quá trình thực thi, bạn sẽ sử dụng chức năng nào của debugger?
A. Step Over (Thực thi qua).
B. Watch (Theo dõi).
C. Run (Chạy).
D. Break (Dừng).
24. Trong quá trình phát triển phần mềm, khi nào kiểm thử (testing) là hoạt động quan trọng nhất cần được thực hiện?
A. Sau khi chương trình đã hoàn thành tất cả các chức năng.
B. Trong suốt vòng đời phát triển phần mềm, từ khi có yêu cầu đến khi bàn giao.
C. Chỉ trước khi phát hành phiên bản cuối cùng.
D. Chủ yếu khi có báo cáo lỗi từ người dùng cuối.
25. Lỗi cú pháp (syntax error) là loại lỗi gì và thường được phát hiện khi nào?
A. Lỗi logic, phát hiện khi chạy chương trình.
B. Lỗi do cấu trúc câu lệnh không tuân thủ quy tắc của ngôn ngữ lập trình, thường được trình biên dịch (compiler) phát hiện.
C. Lỗi do thiết kế giao diện người dùng không đẹp.
D. Lỗi do thiếu bộ nhớ, phát hiện khi chương trình chạy.