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 - Đề 01
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 - Đề 01 bao gồm nhiều câu hỏi hay, bám sát chương trình. Cùng làm bài tập trắc nghiệm ngay.
Câu 1: Trong quá trình phát triển phần mềm, giai đoạn nào mà kiểm thử và đánh giá chương trình đóng vai trò quan trọng nhất trong việc đảm bảo chất lượng sản phẩm cuối cùng?
- A. Giai đoạn phân tích yêu cầu
- B. Giai đoạn thiết kế hệ thống
- C. Giai đoạn lập trình (coding)
- D. Giai đoạn nghiệm thu và triển khai
Câu 2: Một nhóm phát triển phần mềm quyết định chỉ sử dụng phương pháp kiểm thử hộp đen (black-box testing). Hạn chế lớn nhất của phương pháp này là gì?
- A. Tốn kém nhiều thời gian và nguồn lực
- B. Có thể bỏ sót các lỗi liên quan đến cấu trúc bên trong và logic mã nguồn
- C. Khó xác định được bộ dữ liệu kiểm thử phù hợp
- D. Chỉ phù hợp với các chương trình nhỏ và đơn giản
Câu 3: Để đánh giá hiệu quả của thuật toán sắp xếp trộn (merge sort) so với thuật toán sắp xếp nổi bọt (bubble sort) khi xử lý một lượng lớn dữ liệu (ví dụ, 1 triệu phần tử), tiêu chí nào sau đây là quan trọng nhất để so sánh?
- A. Độ phức tạp thời gian trung bình và trường hợp xấu nhất
- B. Độ phức tạp không gian sử dụng
- C. Tính dễ cài đặt và bảo trì mã nguồn
- D. Số dòng code cần thiết để cài đặt thuật toán
Câu 4: Trong tình huống nào, việc sử dụng phương pháp 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 kiểm thử bằng bộ dữ liệu?
- A. Khi chương trình có giao diện người dùng phức tạp
- B. Khi thời gian phát triển chương trình bị hạn chế
- C. Khi chương trình được sử dụng trong các hệ thống quan trọng, ví dụ như điều khiển máy bay hoặc thiết bị y tế
- D. Khi chương trình cần chạy trên nhiều nền tảng hệ điều hành khác nhau
Câu 5: Giả sử bạn có một chương trình tính toán thuế thu nhập cá nhân. Bạn thiết kế một bộ dữ liệu kiểm thử bao gồm các trường hợp thu nhập khác nhau (từ thấp đến cao), các khoản giảm trừ khác nhau, và các tình huống đặc biệt (ví dụ, người phụ thuộc, thu nhập từ nhiều nguồn). Mục tiêu chính của việc thiết kế bộ dữ liệu kiểm thử đa dạng này là gì?
- A. Đảm bảo chương trình chạy nhanh hơn
- B. Tăng khả năng phát hiện lỗi trong nhiều tình huống và điều kiện khác nhau
- C. Giảm dung lượng bộ nhớ chương trình sử dụng
- D. Làm cho mã nguồn chương trình dễ đọc và dễ hiểu hơn
Câu 6: Trong kiểm thử phần mềm, khái niệm "độ bao phủ mã" (code coverage) dùng để chỉ điều gì?
- A. Số lượng lỗi được phát hiện trên một đơn vị mã nguồn
- B. Mức độ chi tiết của tài liệu đặc tả yêu cầu phần mềm
- C. Phần trăm mã nguồn đã được thực thi bởi bộ dữ liệu kiểm thử
- D. Thời gian cần thiết để kiểm thử toàn bộ chương trình
Câu 7: Xét một thuật toán tìm kiếm nhị phân (binary search). Để chứng minh tính đúng đắn của thuật toán này, phương pháp lập luận logic nào thường được sử dụng?
- A. Kiểm thử bằng bộ dữ liệu biên
- B. Phân tích trường hợp xấu nhất
- C. Sử dụng phương pháp quy nạp toán học trực tiếp
- D. Sử dụng bất biến vòng lặp để đảm bảo điều kiện đúng sau mỗi bước lặp
Câu 8: Khi đánh giá độ phức tạp thời gian của một thuật toán, chúng ta thường quan tâm đến trường hợp nào nhất?
- A. Trường hợp trung bình
- B. Trường hợp xấu nhất
- C. Trường hợp tốt nhất
- D. Trường hợp điển hình
Câu 9: Lợi ích chính của việc kiểm thử chương trình thường xuyên và liên tục trong suốt quá trình phát triển phần mềm (ví dụ, kiểm thử hồi quy - regression testing) là gì?
- A. Giảm chi phí phát triển phần mềm ban đầu
- B. Tăng tốc độ phát triển các tính năng mới
- C. Đảm bảo rằng các thay đổi mới không gây ra lỗi cho các chức năng đã hoạt động ổn định trước đó
- D. Giúp tài liệu hóa mã nguồn chương trình tốt hơn
Câu 10: Trong ngữ cảnh kiểm thử chương trình, "test case" (trường hợp kiểm thử) bao gồm những thành phần chính nào?
- A. Dữ liệu đầu vào, điều kiện thực hiện, và kết quả mong đợi
- B. Mô tả lỗi, mức độ nghiêm trọng, và người phát hiện lỗi
- C. Tên module kiểm thử, người thực hiện kiểm thử, và ngày kiểm thử
- D. Mục tiêu kiểm thử, phương pháp kiểm thử, và công cụ kiểm thử sử dụng
Câu 11: Khi phân tích độ phức tạp không gian của thuật toán, yếu tố nào sau đây thường được xem xét?
- A. Thời gian thực thi thuật toán trên các loại dữ liệu khác nhau
- B. Lượng bộ nhớ cần thiết để lưu trữ dữ liệu đầu vào và các biến tạm trong quá trình thực thi
- C. Số lượng phép toán số học và logic mà thuật toán thực hiện
- D. Độ dài mã nguồn của thuật toán
Câu 12: Trong quy trình kiểm thử, khi nào thì việc kiểm thử "hộp trắng" (white-box testing) được ưu tiên sử dụng hơn so với kiểm thử "hộp đen" (black-box testing)?
- A. Khi kiểm thử giao diện người dùng của ứng dụng
- B. Khi kiểm thử hiệu năng của hệ thống
- C. Khi kiểm thử tích hợp giữa các module khác nhau
- D. Khi cần kiểm tra chi tiết các nhánh và đường dẫn thực thi trong mã nguồn, ví dụ trong kiểm thử đơn vị
Câu 13: Để so sánh hiệu quả của hai thuật toán giải cùng một bài toán, bạn chạy thử nghiệm cả hai thuật toán với cùng một bộ dữ liệu đầu vào và đo thời gian thực thi. Phương pháp đánh giá này thuộc loại nào?
- A. Phân tích độ phức tạp thuật toán
- B. Chứng minh tính đúng đắn của thuật toán
- C. Đánh giá hiệu năng thực nghiệm
- D. Kiểm thử chức năng
Câu 14: Một chương trình sau khi sửa lỗi có thể phát sinh lỗi mới ở những khu vực khác. Loại kiểm thử nào giúp phát hiện các lỗi mới phát sinh do sửa đổi mã nguồn?
- A. Kiểm thử đơn vị (Unit testing)
- B. Kiểm thử hồi quy (Regression testing)
- C. Kiểm thử tích hợp (Integration testing)
- D. Kiểm thử chấp nhận (Acceptance testing)
Câu 15: Trong quá trình kiểm thử hộp đen, kỹ thuật phân vùng tương đương (equivalence partitioning) giúp ích gì?
- A. Giảm số lượng bộ dữ liệu kiểm thử cần thiết bằng cách chia miền giá trị đầu vào thành các lớp tương đương
- B. Tăng cường khả năng kiểm tra cấu trúc bên trong của chương trình
- C. Tự động sinh ra các trường hợp kiểm thử ngẫu nhiên
- D. Đo lường độ bao phủ mã của bộ dữ liệu kiểm thử
Câu 16: Mục tiêu của việc đánh giá chương trình không chỉ dừng lại ở việc phát hiện lỗi mà còn hướng đến điều gì quan trọng hơn?
- A. Tối ưu hóa tốc độ thực thi của chương trình
- B. Giảm thiểu dung lượng bộ nhớ chương trình sử dụng
- C. Làm cho giao diện người dùng trở nên hấp dẫn hơn
- D. Đảm bảo chất lượng tổng thể của chương trình, đáp ứng yêu cầu của người dùng và các tiêu chuẩn chất lượng
Câu 17: Trong kiểm thử hiệu năng (performance testing), "stress testing" (kiểm thử chịu tải) được sử dụng để làm gì?
- A. Đo thời gian phản hồi của hệ thống trong điều kiện sử dụng bình thường
- B. Kiểm tra tính ổn định của hệ thống khi chạy trong thời gian dài
- C. Xác định điểm giới hạn chịu tải và khả năng phục hồi của hệ thống khi vượt quá tải
- D. Đánh giá khả năng mở rộng của hệ thống khi tăng số lượng người dùng
Câu 18: Phương pháp quy nạp toán học được áp dụng để chứng minh tính đúng đắn của thuật toán thường dựa trên nguyên tắc nào?
- A. Kiểm tra thuật toán với một số lượng lớn các bộ dữ liệu kiểm thử khác nhau
- B. Chứng minh tính đúng đắn cho trường hợp cơ sở và sau đó chứng minh nếu nó đúng cho trường hợp thứ k thì cũng đúng cho trường hợp thứ k+1
- C. Phân tích độ phức tạp thời gian và không gian của thuật toán
- D. Sử dụng các công cụ kiểm thử tự động để tìm kiếm lỗi trong mã nguồn
Câu 19: Khi nào thì việc sử dụng "phương pháp làm mịn dần" (stepwise refinement) trong thiết kế chương trình có thể giúp cho việc kiểm thử và đánh giá chương trình trở nên dễ dàng hơn?
- A. Khi chương trình có yêu cầu về hiệu năng rất cao
- B. Khi chương trình cần được phát triển trong thời gian rất ngắn
- C. Khi chương trình có cấu trúc phức tạp và nhiều module tương tác với nhau
- D. Khi chương trình cần được bảo mật cao
Câu 20: Trong kiểm thử tích hợp (integration testing), phương pháp "top-down" (từ trên xuống) có ưu điểm gì?
- A. Dễ dàng kiểm thử các module ở mức độ thấp trước
- B. Giúp phát hiện sớm các lỗi liên quan đến giao diện và tương tác giữa các module cấp cao
- C. Yêu cầu ít stub (module giả lập) hơn so với phương pháp bottom-up
- D. Phù hợp với các hệ thống có cấu trúc dữ liệu phức tạp
Câu 21: Giả sử bạn viết một hàm tính giai thừa. Để kiểm thử hàm này, bạn nên thiết kế bộ dữ liệu kiểm thử tập trung vào các trường hợp nào?
- A. Các trường hợp biên (ví dụ, 0, 1) và các giá trị điển hình, cũng như các giá trị lớn để kiểm tra giới hạn
- B. Chỉ các giá trị ngẫu nhiên trong phạm vi đầu vào dự kiến
- C. Chỉ các giá trị là số nguyên tố
- D. Chỉ các giá trị là số chẵn và số lẻ
Câu 22: Trong kiểm thử chương trình, thuật ngữ "bug" (lỗi) và "defect" (sai sót) thường được dùng để chỉ điều gì?
- A. Các vấn đề liên quan đến hiệu năng của chương trình
- B. Các lỗi trong tài liệu hướng dẫn sử dụng chương trình
- C. Các sai sót hoặc lỗi trong mã nguồn chương trình dẫn đến hành vi không đúng
- D. Các yêu cầu chức năng chưa được thực hiện đầy đủ
Câu 23: Khi đánh giá hiệu quả của thuật toán, tại sao độ phức tạp tính toán lại quan trọng hơn thời gian chạy thực tế trên một máy tính cụ thể?
- A. Thời gian chạy thực tế dễ đo lường hơn độ phức tạp tính toán
- B. Độ phức tạp tính toán không phản ánh đúng hiệu năng của thuật toán trong thực tế
- C. Thời gian chạy thực tế phụ thuộc vào ngôn ngữ lập trình và trình biên dịch
- D. Độ phức tạp tính toán cho biết cách thời gian hoặc không gian tăng lên theo kích thước đầu vào một cách tổng quát, không phụ thuộc vào phần cứng cụ thể
Câu 24: Trong kiểm thử chấp nhận (acceptance testing), ai là người chịu trách nhiệm chính trong việc xác định chương trình có đạt yêu cầu và có thể được chấp nhận hay không?
- A. Nhóm phát triển phần mềm
- B. Khách hàng hoặc người dùng cuối
- C. Nhóm kiểm thử chất lượng (QA)
- D. Quản lý dự án
Câu 25: Để cải thiện độ tin cậy của chương trình, ngoài việc kiểm thử và sửa lỗi, biện pháp nào sau đây cũng rất quan trọng?
- A. Tăng cường tài liệu hướng dẫn sử dụng chương trình
- B. Tối ưu hóa giao diện người dùng
- C. Áp dụng các nguyên tắc thiết kế chương trình tốt và quy trình phát triển phần mềm chất lượng
- D. Sử dụng ngôn ngữ lập trình mới nhất
Câu 26: Trong kiểm thử hộp trắng, kỹ thuật "kiểm thử đường dẫn cơ bản" (basis path testing) tập trung vào việc gì?
- A. Kiểm tra tất cả các biến và cấu trúc dữ liệu
- B. Kiểm tra tất cả các vòng lặp với số lần lặp khác nhau
- C. Kiểm tra tất cả các trường hợp lỗi có thể xảy ra
- D. Đảm bảo rằng mỗi đường dẫn độc lập trong mã nguồn được thực thi ít nhất một lần
Câu 27: Giả sử bạn có một thuật toán với độ phức tạp thời gian O(n^2). Nếu kích thước dữ liệu đầu vào tăng gấp đôi, thời gian thực thi của thuật toán sẽ tăng lên khoảng bao nhiêu lần?
- A. Gấp đôi
- B. Gấp bốn
- C. Không đổi
- D. Tăng theo hàm mũ
Câu 28: Trong môi trường phát triển phần mềm Agile, kiểm thử thường được thực hiện ở giai đoạn nào?
- A. Liên tục và song song với quá trình phát triển, trong mỗi sprint
- B. Chỉ được thực hiện sau khi hoàn thành giai đoạn lập trình
- C. Chỉ được thực hiện trước khi chuyển giao sản phẩm cho khách hàng
- D. Thực hiện theo từng giai đoạn lớn (ví dụ, kiểm thử hệ thống sau khi kiểm thử đơn vị)
Câu 29: Mục đích chính của việc "đánh giá độ phức tạp thời gian thuật toán" là gì?
- A. Tìm ra lỗi trong thuật toán
- B. Chứng minh tính đúng đắn của thuật toán
- C. So sánh hiệu quả của các thuật toán khác nhau và dự đoán hiệu suất của thuật toán khi kích thước đầu vào tăng lên
- D. Đo thời gian chạy thực tế của thuật toán trên máy tính
Câu 30: Loại kiểm thử nào tập trung vào việc xác minh rằng chương trình đáp ứng các yêu cầu chức năng đã được xác định?
- A. Kiểm thử hiệu năng (Performance testing)
- B. Kiểm thử chức năng (Functional testing)
- C. Kiểm thử bảo mật (Security testing)
- D. Kiểm thử khả năng sử dụng (Usability testing)