Trắc Nghiệm Tin Học 11 KHMT Kết Nối Tri Thức Chủ Đề 6 Bài 23: Kiểm Thử Và Đánh Giá Chương Trình là bộ câu hỏi thuộc môn Tin học, được biên soạn nhằm giúp học sinh hiểu đúng quy trình kiểm thử, đánh giá và hoàn thiện chương trình trong lập trình. Đây là đề tham khảo của Trường THPT Nguyễn Bỉnh Khiêm (Quảng Nam), do thầy Trần Quốc Hậu – giáo viên Tin học của trường biên soạn năm 2024. Bộ câu hỏi được thiết kế theo dạng trắc nghiệm Tin học 11 KHMT, bám sát nội dung SGK Kết nối tri thức và được tích hợp trên hệ thống detracnghiem.edu.vn, giúp học sinh ôn tập hiệu quả và tiếp cận kiến thức theo hướng thực tiễn.
Trắc nghiệm Tin học 11 trong chủ đề này tập trung vào các kỹ năng kiểm thử phần mềm, phân tích lỗi, đánh giá mức độ hoàn thiện chương trình và hiểu rõ vai trò của việc kiểm tra chất lượng trong lập trình. Mỗi câu hỏi đều kèm đáp án và giải thích chi tiết, hỗ trợ quá trình tự học, tự đánh giá và tăng khả năng vận dụng kiến thức vào thực hành. Bộ đề là công cụ hữu ích cho học sinh lớp 11 chuẩn bị các bài kiểm tra, đồng thời hình thành nền tảng tư duy lập trình chuẩn mực theo chương trình KHMT. Trắc nghiệm ôn tập lớp 11
Trắc nghiệm Tin học 11 KHMT Kết nối tri thức
Chủ đề 6: Kỹ thuật lập trình
Bài 23: Kiểm thử và đánh giá chương trình
Câu 1: Mục tiêu chính của việc kiểm thử chương trình là gì?
A. Để chứng minh rằng chương trình chạy nhanh hơn các phần mềm khác.
B. Để đảm bảo giao diện người dùng đẹp mắt và dễ sử dụng.
C. Để phát hiện ra lỗi (bug) có trong chương trình.
D. Để chứng minh chương trình hoàn toàn đúng và không bao giờ sai.
Câu 2: Câu nói nổi tiếng của E.W. Dijkstra về kiểm thử có ý nghĩa gì?
A. Kiểm thử là phương pháp duy nhất để chứng minh chương trình đúng.
B. Kiểm thử chỉ chứng minh sự hiện diện của lỗi, không chứng minh được sự vắng mặt của lỗi.
C. Nếu chương trình chạy đúng với mọi bộ dữ liệu thử nghiệm thì nó không còn lỗi.
D. Lập trình viên giỏi thì không cần phải kiểm thử chương trình.
Câu 3: Hai tiêu chí quan trọng nhất để đánh giá hiệu quả của một thuật toán là gì?
A. Độ dài của mã nguồn và ngôn ngữ lập trình được sử dụng.
B. Số lượng biến được khai báo và số lượng dòng chú thích.
C. Thời gian lập trình và chi phí mua phần cứng máy tính.
D. Thời gian thực hiện và dung lượng bộ nhớ cần sử dụng.
Câu 4: Khi kiểm thử chương trình giải phương trình bậc hai ax^2 + bx + c, trường hợp nào sau đây được coi là “trường hợp biên” (corner case) quan trọng nhất cần kiểm tra?
A. a = 1, b = 2, c = 1 (nghiệm kép thông thường).
B. a = 2, b = 3, c = 1 (hai nghiệm phân biệt).
C. a = 0 (phương trình suy biến thành bậc nhất).
D. a, b, c đều là các số dương lớn.
Câu 5: Giả sử bạn viết chương trình tính tổng các số từ 1 đến n. Khi chạy thử với n = 10, chương trình cho kết quả đúng. Bạn có thể kết luận gì?
A. Chương trình chắc chắn đúng với mọi n.
B. Chương trình đã được tối ưu hóa tốt nhất.
C. Chương trình đúng với n = 10, nhưng chưa chắc đúng với n khác.
D. Chương trình không có lỗi cú pháp và lỗi logic.
Câu 6: Trong Python, công cụ nào sau đây thường được sử dụng đơn giản nhất để theo dõi giá trị của biến nhằm tìm lỗi logic?
A. Viết lại toàn bộ chương trình sang ngôn ngữ C++.
B. Sử dụng câu lệnh print() để in giá trị biến tại các bước trung gian.
C. Mua thêm thanh RAM để máy chạy nhanh hơn.
D. Sử dụng phần mềm diệt virus để quét mã nguồn.
Câu 7: Một chương trình báo lỗi “IndexError: list index out of range”. Đây là loại lỗi gì?
A. Lỗi cú pháp (Syntax Error).
B. Lỗi thực thi (Runtime Error) do truy cập phần tử ngoài phạm vi danh sách.
C. Lỗi logic (Logical Error) do thuật toán sai.
D. Lỗi phần cứng do thanh RAM bị hỏng.
Câu 8: Để kiểm tra tính đúng đắn của chương trình tìm kiếm nhị phân, điều kiện tiên quyết của dữ liệu đầu vào là gì?
A. Dãy số phải có ít nhất 100 phần tử.
B. Dãy số phải bao gồm cả số âm và số dương.
C. Dãy số phải được sắp xếp theo thứ tự (tăng hoặc giảm).
D. Dãy số không được chứa các phần tử trùng nhau.
Câu 9: Tại sao nên sử dụng các bộ dữ liệu nhỏ khi bắt đầu kiểm thử chương trình?
A. Vì dữ liệu nhỏ giúp máy tính tiết kiệm điện năng.
B. Vì dữ liệu nhỏ không bao giờ gây ra lỗi tràn bộ nhớ.
C. Vì ta có thể tự tính toán kết quả bằng tay để đối chiếu với kết quả của máy.
D. Vì chương trình Python chỉ xử lý được các số nhỏ.
Câu 10: Lỗi logic là gì?
A. Lỗi do gõ sai từ khóa của ngôn ngữ lập trình khiến chương trình không chạy được.
B. Lỗi do máy tính bị treo khi đang chạy chương trình.
C. Lỗi mà chương trình vẫn chạy nhưng đưa ra kết quả sai mong muốn.
D. Lỗi do người dùng nhập dữ liệu không đúng định dạng.
Câu 11: Trong đánh giá thuật toán, thuật ngữ “độ phức tạp không gian” đề cập đến điều gì?
A. Số lượng dòng code trong tệp tin.
B. Thời gian cần thiết để viết xong chương trình.
C. Dung lượng đĩa cứng để lưu bộ cài đặt.
D. Dung lượng bộ nhớ RAM cần thiết khi chương trình hoạt động.
Câu 12: Khi kiểm thử một hàm tính giai thừa n!, giá trị nào sau đây là quan trọng để kiểm tra khả năng xử lý ngoại lệ của chương trình?
A. n = 5
B. n = 0
C. n = -1 (số âm).
D. n = 10
Câu 13: Giả sử thuật toán A chạy hết 10 giây trên máy tính cũ, thuật toán B chạy hết 5 giây trên máy tính mới (cấu hình mạnh gấp đôi). Ta kết luận:
A. Thuật toán B chắc chắn tốt hơn thuật toán A.
B. Thuật toán A tốt hơn thuật toán B.
C. Hai thuật toán có hiệu quả ngang nhau.
D. Chưa đủ cơ sở để so sánh hiệu quả thực sự của hai thuật toán.
Câu 14: Phương pháp “kiểm thử hộp đen” (black-box testing) có đặc điểm gì?
A. Người kiểm thử phải đọc hiểu từng dòng code bên trong.
B. Người kiểm thử chỉ quan tâm đến đầu vào và đầu ra mà không cần biết cấu trúc mã bên trong.
C. Chỉ thực hiện kiểm thử khi màn hình máy tính bị tắt.
D. Chỉ áp dụng cho các phần mềm mã nguồn mở.
Câu 15: Một chương trình tính trung bình cộng của một danh sách số. Nếu danh sách rỗng (không có phần tử nào), chương trình gặp lỗi “ZeroDivisionError”. Đây là lỗi do:
A. Máy tính không biết làm phép chia.
B. Chưa xét trường hợp ngoại lệ (chia cho 0).
C. Biến tổng bị tràn số.
D. Khai báo sai kiểu dữ liệu.
Câu 16: Việc đặt tên biến gợi nhớ (ví dụ: dien_tich thay vì a, b) có tác dụng gì trong quá trình kiểm thử và bảo trì?
A. Giúp chương trình chạy nhanh hơn do tên biến dài hơn.
B. Giúp máy tính hiểu được ý nghĩa của biến.
C. Giúp người đọc code dễ hiểu logic và dễ tìm ra lỗi sai hơn.
D. Không có tác dụng gì, chỉ làm mất thời gian gõ phím.
Câu 17: Khi kiểm thử vòng lặp while, một trong những rủi ro lớn nhất cần kiểm tra là gì?
A. Vòng lặp chạy quá nhanh làm nóng máy.
B. Biến đếm không phải là số nguyên.
C. Vòng lặp vô hạn (không bao giờ dừng).
D. Vòng lặp không sử dụng lệnh break.
Câu 18: Để kiểm thử chương trình Sắp xếp dãy số, bộ dữ liệu nào sau đây được xem là “khó chịu” nhất để kiểm tra tính ổn định của thuật toán?
A. Dãy đã được sắp xếp sẵn (tăng dần).
B. Dãy được sắp xếp ngược (giảm dần).
C. Dãy có nhiều phần tử có giá trị bằng nhau.
D. Dãy gồm các số ngẫu nhiên không trùng lặp.
Câu 19: Nếu một chương trình chạy đúng nhưng tốn quá nhiều bộ nhớ (RAM), ta nói chương trình đó:
A. Hiệu quả về thời gian nhưng kém về không gian.
B. Chưa tối ưu về độ phức tạp không gian.
C. Bị lỗi cú pháp nghiêm trọng.
D. Cần phải cài lại hệ điều hành.
Câu 20: Trong Python, cách nào sau đây giúp đo thời gian thực hiện của một đoạn chương trình?
A. Sử dụng đồng hồ bấm giờ bên ngoài.
B. Đếm nhẩm trong đầu khi chạy chương trình.
C. Sử dụng thư viện time (hàm time.time() hoặc time.perf_counter()).
D. Dùng hàm len() để đo độ dài mã nguồn.
Câu 21: Vận dụng cao: Bạn có hai thuật toán giải cùng một bài toán. Thuật toán X dùng ít bộ nhớ nhưng chạy chậm. Thuật toán Y chạy rất nhanh nhưng tốn nhiều bộ nhớ. Bạn nên chọn thuật toán nào?
A. Luôn chọn thuật toán Y vì thời gian là vàng bạc.
B. Luôn chọn thuật toán X để tiết kiệm tiền mua RAM.
C. Tùy thuộc vào yêu cầu cụ thể và tài nguyên phần cứng của hệ thống thực tế.
D. Viết một thuật toán Z là trung bình cộng của X và Y.
Câu 22: Vận dụng cao: Giả sử bạn cần lưu trữ danh sách 1 triệu số nguyên. Cách nào sau đây tối ưu bộ nhớ nhất trong Python?
A. Sử dụng list thông thường: [1, 2, …]
B. Sử dụng tuple: (1, 2, …)
C. Lưu vào tệp văn bản .txt rồi đọc từng dòng khi cần.
D. Sử dụng thư viện array hoặc numpy để lưu trữ mảng số nguyên thuần túy.
Câu 23: Vận dụng cao: Một chương trình tính
S = 1/1 + 1/2 + … + 1/n. Khi n rất lớn, kết quả có thể bị sai lệch nhỏ so với tính toán lý thuyết. Nguyên nhân chính là:
A. Do thuật toán bị sai logic.
B. Do máy tính tính toán quá nhanh nên bị vấp.
C. Do sai số làm tròn trong biểu diễn số thực (floating-point) của máy tính.
D. Do bộ nhớ RAM bị đầy.
Câu 24: Vận dụng cao: Để chứng minh tính đúng đắn của thuật toán một cách chặt chẽ về mặt toán học (thay vì chỉ chạy thử), người ta sử dụng khái niệm nào?
A. Biểu đồ luồng (Flowchart).
B. Mã giả (Pseudocode).
C. Bất biến vòng lặp (Loop Invariant).
D. Kiểm thử hộp trắng (White-box testing).
Câu 25: Vận dụng cao: Trong bài toán đếm số cặp nghịch thế của dãy số, nếu sử dụng thuật toán “vét cạn” (2 vòng lặp lồng nhau) với n = 100.000, chương trình chạy rất lâu. Đánh giá nào sau đây là đúng?
A. Chương trình bị treo máy.
B. Chương trình sai, cần viết lại.
C. Máy tính bị hỏng.
D. Thuật toán có độ phức tạp O(n^2) nên không hiệu quả với dữ liệu lớn, cần dùng thuật toán tối ưu hơn như O(nlogn).
