Trắc nghiệm Tin học 11 Kết nối tri thức Bài 23: Kiểm thử và đánh giá chương trình - Đề 04
Trắc nghiệm Tin học 11 Kết nối tri thức Bài 23: Kiểm thử và đánh giá chương trình - Đề 04 đượ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 kiểm thử một chương trình tính toán tiền lương, bộ dữ liệu kiểm thử nào sau đây được xem là quan trọng nhất để phát hiện các lỗi tiềm ẩn liên quan đến điều kiện tính toán?
- A. Bộ dữ liệu với các mức lương trung bình.
- B. Bộ dữ liệu chỉ chứa các mức lương cao.
- C. Bộ dữ liệu chứa các trường hợp biên (ví dụ: mức lương ngay tại ngưỡng thay đổi thuế suất, lương bằng 0).
- D. Bộ dữ liệu được tạo ra hoàn toàn ngẫu nhiên.
Câu 2: Một lập trình viên đã viết một chương trình sắp xếp danh sách các số nguyên. Anh ta đã kiểm thử chương trình với 100 bộ dữ liệu ngẫu nhiên và chương trình đều chạy đúng. Tuy nhiên, điều này KHÔNG ĐẢM BẢO điều gì?
- A. Chương trình sẽ chạy nhanh trên mọi bộ dữ liệu.
- B. Chương trình không sử dụng nhiều bộ nhớ.
- C. Chương trình dễ hiểu và dễ bảo trì.
- D. Thuật toán sắp xếp được cài đặt là hoàn toàn đúng cho mọi trường hợp đầu vào.
Câu 3: Phương pháp nào sau đây cung cấp cơ sở lý thuyết vững chắc nhất để khẳng định tính đúng đắn của một thuật toán cho mọi trường hợp đầu vào hợp lệ?
- A. Thực hiện kiểm thử với một lượng lớn dữ liệu đa dạng.
- B. Sử dụng phương pháp chứng minh bằng lôgic toán học hoặc các phương pháp hình thức.
- C. Đo lường thời gian chạy và dung lượng bộ nhớ sử dụng trên các máy tính khác nhau.
- D. So sánh kết quả chạy chương trình với kết quả mong đợi trên một số ít trường hợp đặc biệt.
Câu 4: Khi đánh giá hiệu quả của một thuật toán, yếu tố "độ phức tạp thời gian" thường được biểu diễn bằng ký hiệu Big O (ví dụ: O(n), O(n log n), O(n^2)). Ký hiệu này chủ yếu mô tả điều gì?
- A. Tốc độ tăng trưởng của thời gian chạy khi kích thước dữ liệu đầu vào tăng lên.
- B. Thời gian chạy chính xác của thuật toán trên một máy tính cụ thể.
- C. Tổng số dòng mã trong thuật toán.
- D. Lượng bộ nhớ mà thuật toán sử dụng.
Câu 5: Giả sử bạn có hai thuật toán giải cùng một bài toán. Thuật toán A có độ phức tạp thời gian là O(n^2) và thuật toán B có độ phức tạp thời gian là O(n log n). Với một bộ dữ liệu đầu vào có kích thước N rất lớn, thuật toán nào có khả năng chạy nhanh hơn đáng kể?
- A. Thuật toán A.
- B. Thuật toán B.
- C. Thời gian chạy của cả hai thuật toán là như nhau với N lớn.
- D. Không thể xác định nếu không biết giá trị cụ thể của N.
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ó tính "tiêu cực" (negative test cases) nhằm mục đích gì?
- A. Kiểm tra khả năng xử lý các trường hợp đầu vào không hợp lệ hoặc bất thường.
- B. Kiểm tra xem chương trình có cho kết quả đúng với dữ liệu hợp lệ không.
- C. Đo lường hiệu suất của chương trình khi tải cao.
- D. Chứng minh rằng chương trình không có bất kỳ lỗi nào.
Câu 7: Một chương trình được thiết kế để tìm kiếm một phần tử trong danh sách đã sắp xếp. Thuật toán tìm kiếm nhị phân thường được ưa chuộng hơn tìm kiếm tuần tự cho danh sách lớn vì lý do nào sau đây?
- A. Tìm kiếm nhị phân sử dụng ít bộ nhớ hơn.
- B. Tìm kiếm nhị phân dễ cài đặt hơn.
- C. Tìm kiếm nhị phân có độ phức tạp thời gian tốt hơn (logarit) so với tìm kiếm tuần tự (tuyến tính) trên danh sách lớn.
- D. Tìm kiếm nhị phân không yêu cầu danh sách phải được sắp xếp.
Câu 8: Mục đích chính của việc sử dụng bất biến vòng lặp (loop invariant) trong chứng minh tính đúng đắn của thuật toán là gì?
- A. Đo lường số lần vòng lặp thực hiện.
- B. Xác định lượng bộ nhớ mà vòng lặp tiêu thụ.
- C. Phát hiện các lỗi cú pháp trong vòng lặp.
- D. Thiết lập một tính chất luôn đúng qua mỗi lần lặp, làm cơ sở để chứng minh tính đúng đắn của vòng lặp và toàn bộ thuật toán.
Câu 9: Giả sử bạn đang kiểm thử một hàm tính giai thừa của một số nguyên dương n. Bộ dữ liệu kiểm thử nào sau đây là ví dụ tốt cho "trường hợp biên" (boundary case)?
- A. n = 1.
- B. n = 50.
- C. n = 1000.
- D. n = -5 (nếu hàm chỉ xử lý số dương).
Câu 10: Khi nào thì việc chứng minh tính đúng đắn của thuật toán bằng lôgic toán học trở nên đặc biệt quan trọng và cần thiết hơn so với chỉ kiểm thử?
- A. Khi chương trình cần chạy rất nhanh.
- B. Khi dung lượng bộ nhớ là hạn chế.
- C. Khi chương trình xử lý các tác vụ quan trọng, yêu cầu độ tin cậy và chính xác tuyệt đối (ví dụ: hệ thống điều khiển tự động, phần mềm y tế).
- D. Khi chương trình có giao diện người dùng phức tạp.
Câu 11: Đánh giá "độ phức tạp không gian" của một thuật toán chủ yếu liên quan đến việc đo lường yếu tố nào sau đây?
- A. Số lượng phép tính cơ bản.
- B. Lượng bộ nhớ (RAM) mà thuật toán cần để lưu trữ dữ liệu và biến trong quá trình chạy.
- C. Số lần vòng lặp thực hiện.
- D. Thời gian cần thiết để biên dịch chương trình.
Câu 12: Giả sử bạn viết một chương trình tính tổng các phần tử trong một mảng có N phần tử. Thuật toán đơn giản nhất là duyệt qua mảng từ đầu đến cuối. Độ phức tạp thời gian của thuật toán này là gì?
- A. O(N)
- B. O(N^2)
- C. O(log N)
- D. O(1)
Câu 13: Tại sao việc kiểm thử chương trình với "dữ liệu thực tế" (real-world data) lại quan trọng, ngay cả khi đã kiểm thử với dữ liệu tổng hợp?
- A. Dữ liệu thực tế luôn nhỏ hơn dữ liệu tổng hợp.
- B. Dữ liệu thực tế giúp chương trình chạy nhanh hơn.
- C. Dữ liệu thực tế dễ tạo hơn dữ liệu tổng hợp.
- D. Dữ liệu thực tế có thể chứa các trường hợp, mẫu hình hoặc lỗi mà dữ liệu tổng hợp không mô phỏng được, giúp phát hiện lỗi trong môi trường sử dụng thực tế.
Câu 14: "Độ tin cậy" của chương trình, được tăng cường đáng kể thông qua quá trình kiểm thử, có nghĩa là gì?
- A. Chương trình chạy rất nhanh.
- B. Chương trình hoạt động đúng và ổn định trong các điều kiện hoạt động dự kiến.
- C. Chương trình sử dụng ít bộ nhớ.
- D. Mã nguồn của chương trình ngắn gọn và dễ đọc.
Câu 15: Trong quá trình kiểm thử, việc phát hiện và sửa một lỗi (bug) trong chương trình có tác động trực tiếp đến khía cạnh nào sau đây?
- A. Độ phức tạp thời gian của thuật toán.
- B. Độ phức tạp không gian của thuật toán.
- C. Tính đúng đắn và độ tin cậy của chương trình.
- D. Khả năng dễ hiểu của mã nguồn.
Câu 16: Giả sử bạn có một chương trình xử lý chuỗi văn bản. Một bộ dữ liệu kiểm thử hiệu quả để kiểm tra khả năng xử lý các "trường hợp đặc biệt" (edge cases) của chuỗi có thể bao gồm những gì?
- A. Chỉ các chuỗi có độ dài trung bình.
- B. Chỉ các chuỗi chứa các từ thông dụng.
- C. Chỉ các chuỗi tiếng Anh đơn giản.
- D. Chuỗi rỗng, chuỗi chỉ có một ký tự, chuỗi rất dài, chuỗi chứa ký tự đặc biệt.
Câu 17: Khi so sánh hai thuật toán về mặt hiệu quả, tại sao chúng ta thường tập trung vào "độ phức tạp tiệm cận" (asymptotic complexity) thay vì đo lường thời gian chạy chính xác trên một máy cụ thể?
- A. Độ phức tạp tiệm cận phản ánh hiệu suất của thuật toán khi kích thước đầu vào rất lớn và độc lập với phần cứng cụ thể.
- B. Đo lường thời gian chạy chính xác là không thể.
- C. Độ phức tạp tiệm cận cho biết chính xác thời gian chạy trên mọi máy tính.
- D. Độ phức tạp tiệm cận chỉ áp dụng cho các thuật toán đơn giản.
Câu 18: Giả sử một chương trình được kiểm thử và cho kết quả đúng với mọi bộ dữ liệu kiểm thử đã sử dụng. Tuy nhiên, sau khi triển khai, chương trình vẫn gặp lỗi trong một số trường hợp. Nguyên nhân có thể là gì?
- A. Chương trình chạy quá nhanh.
- B. Bộ dữ liệu kiểm thử chưa đủ đa dạng hoặc chưa bao phủ hết các trường hợp có thể xảy ra trong thực tế.
- C. Lỗi là do phần cứng máy tính của người dùng.
- D. Thuật toán được chứng minh là đúng bằng toán học.
Câu 19: Đâu là một trong những nhược điểm chính của việc chỉ dựa vào kiểm thử để đảm bảo chất lượng chương trình?
- A. Kiểm thử làm tăng độ phức tạp của thuật toán.
- B. Kiểm thử luôn đòi hỏi nhiều bộ nhớ.
- C. Kiểm thử chỉ có thể phát hiện sự hiện diện của lỗi, không thể chứng minh sự vắng mặt của lỗi cho mọi trường hợp.
- D. Kiểm thử chỉ áp dụng cho các chương trình nhỏ.
Câu 20: Khi đánh giá một thuật toán đệ quy, yếu tố "độ sâu đệ quy" tối đa có thể ảnh hưởng trực tiếp đến khía cạnh hiệu quả nào?
- A. Độ phức tạp không gian (do sử dụng ngăn xếp cho các lời gọi đệ quy).
- B. Độ phức tạp thời gian (không phải ảnh hưởng trực tiếp nhất, mà là số lượng phép tính).
- C. Tính đúng đắn của thuật toán.
- D. Khả năng dễ hiểu của mã nguồn.
Câu 21: Giả sử bạn đang viết một chương trình xử lý các giao dịch ngân hàng. Để đảm bảo tính đúng đắn, ngoài việc kiểm thử, bạn cần xem xét phương pháp nào khác để tăng cường độ tin cậy, đặc biệt với các tác vụ nhạy cảm?
- A. Chỉ tập trung vào tối ưu hóa tốc độ chạy.
- B. Giảm thiểu dung lượng bộ nhớ sử dụng.
- C. Kết hợp kiểm thử với phân tích mã nguồn tĩnh, kiểm tra lại logic thuật toán, hoặc áp dụng các phương pháp chứng minh hình thức (nếu phù hợp).
- D. Chỉ cần kiểm thử với dữ liệu ngẫu nhiên.
Câu 22: Một lỗi trong chương trình khiến nó hoạt động không như mong đợi khi gặp một giá trị đầu vào cụ thể. Đây là loại lỗi gì theo góc độ kiểm thử?
- A. Lỗi logic/chức năng (Functional/Logic Error).
- B. Lỗi cú pháp (Syntax Error).
- C. Lỗi thời gian chạy (Runtime Error) - trừ khi nó gây ra ngoại lệ.
- D. Lỗi biên dịch (Compilation Error).
Câu 23: Khi đánh giá hiệu quả của thuật toán sắp xếp nổi bọt (Bubble Sort), ta thường thấy độ phức tạp thời gian trung bình và xấu nhất là O(n^2). Điều này có ý nghĩa gì đối với việc sử dụng thuật toán này với danh sách có kích thước N lớn?
- A. Thuật toán sẽ chạy rất nhanh với N lớn.
- B. Thời gian chạy của thuật toán sẽ tăng lên rất nhanh khi kích thước N tăng lên, khiến nó kém hiệu quả cho danh sách lớn.
- C. Thuật toán sử dụng ít bộ nhớ với N lớn.
- D. Thuật toán chỉ hoạt động với danh sách nhỏ.
Câu 24: Một trong những kỹ thuật tạo bộ dữ liệu kiểm thử là "phân vùng tương đương" (equivalence partitioning). Kỹ thuật này dựa trên nguyên tắc nào?
- A. Chia miền giá trị đầu vào thành các nhóm mà chương trình được kỳ vọng xử lý giống nhau, chỉ cần kiểm thử đại diện cho mỗi nhóm.
- B. Kiểm thử tất cả các giá trị đầu vào có thể có.
- C. Chỉ kiểm thử các giá trị ngẫu nhiên.
- D. Chỉ kiểm thử các giá trị biên của miền đầu vào.
Câu 25: Phương pháp kiểm thử nào tập trung vào việc kiểm tra cấu trúc bên trong của mã nguồn, bao gồm các đường đi thực thi, các vòng lặp và các điều kiện rẽ nhánh?
- A. Kiểm thử hộp trắng (White Box Testing).
- B. Kiểm thử hộp đen (Black Box Testing).
- C. Kiểm thử tự động (Automated Testing).
- D. Kiểm thử hiệu năng (Performance Testing).
Câu 26: Khi sử dụng phương pháp kiểm thử hộp đen (Black Box Testing), người kiểm thử dựa vào yếu tố nào để thiết kế bộ dữ liệu kiểm thử?
- A. Cấu trúc mã nguồn và các đường đi thực thi bên trong chương trình.
- B. Hiệu suất và tốc độ chạy của chương trình.
- C. Lượng bộ nhớ mà chương trình sử dụng.
- D. Đặc tả yêu cầu chức năng và hành vi mong đợi của chương trình.
Câu 27: Một chương trình được thiết kế để tính diện tích hình tròn với bán kính r là số thực dương. Bộ dữ liệu kiểm thử nào sau đây là "trường hợp bất thường" (exceptional case) cần được xem xét?
- A. r = 5.0.
- B. r = -2.5 (số âm).
- C. r = 10.0.
- D. r = 1.0.
Câu 28: Giả sử một thuật toán có độ phức tạp thời gian O(N!) (giai thừa). Điều này có ý nghĩa gì về tính khả thi của thuật toán này khi xử lý các bài toán với kích thước đầu vào N hơi lớn (ví dụ N = 15-20)?
- A. Thuật toán rất hiệu quả và nhanh chóng.
- B. Thuật toán sử dụng ít bộ nhớ.
- C. Thuật toán chỉ khả thi với N rất lớn.
- D. Thời gian chạy của thuật toán tăng trưởng cực kỳ nhanh, khiến nó không khả thi cho các giá trị N chỉ hơi lớn.
Câu 29: Khi đánh giá một chương trình, ngoài tính đúng đắn và hiệu quả (thời gian, bộ nhớ), những tiêu chí nào khác cũng thường được xem xét, đặc biệt trong môi trường phát triển phần mềm chuyên nghiệp?
- A. Khả năng đọc hiểu mã nguồn, khả năng bảo trì, khả năng mở rộng.
- B. Số dòng mã lệnh, màu sắc giao diện.
- C. Tên biến và tên hàm.
- D. Năm xuất bản của ngôn ngữ lập trình.
Câu 30: Việc tạo ra các bộ dữ liệu kiểm thử đa dạng và phong phú là một công việc tốn kém và mất thời gian. Tuy nhiên, đầu tư vào việc này mang lại lợi ích quan trọng nhất là gì?
- A. Giảm thiểu chi phí phát triển ban đầu.
- B. Tăng khả năng phát hiện lỗi sớm, nâng cao độ tin cậy và chất lượng của chương trình.
- C. Giảm thời gian chạy của chương trình.
- D. Chứng minh tính đúng đắn tuyệt đối của thuật toán.