Trắc nghiệm Tin học 10 Kết nối tri thức Bài 30: Kiểm thử và gỡ lỗi chương trình - Đề 01
Trắc nghiệm Tin học 10 Kết nối tri thức Bài 30: Kiểm thử và gỡ lỗi chương trình - Đề 01 đượ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 phát triển phần mềm, giai đoạn nào sau đây đóng vai trò quan trọng nhất trong việc đảm bảo chất lượng và độ tin cậy của chương trình trước khi đưa vào sử dụng?
- A. Thiết kế giao diện
- B. Kiểm thử và gỡ lỗi
- C. Viết tài liệu hướng dẫn
- D. Phân tích yêu cầu
Câu 2: Lỗi nào sau đây thường xảy ra khi chương trình đang chạy và gặp phải một tình huống bất thường (ví dụ: chia cho không, truy cập phần tử ngoài phạm vi mảng)?
- A. Lỗi cú pháp (Syntax Error)
- B. Lỗi logic (Semantic/Logic Error)
- C. Lỗi ngoại lệ (Runtime Error/Exception)
- D. Lỗi biên dịch (Compilation Error)
Câu 3: Xem xét đoạn mã Python sau:
count = 10
while count > 0:
print(count)
count += 1
Đoạn mã này có khả năng gây ra lỗi gì khi thực thi?
- A. ZeroDivisionError
- B. IndexError
- C. TypeError
- D. Lặp vô hạn (Infinite loop)
Câu 4: Một phương pháp kiểm thử chương trình tập trung vào việc kiểm tra chức năng của chương trình dựa trên đặc tả yêu cầu, mà không quan tâm đến cấu trúc mã nguồn bên trong. Phương pháp này được gọi là gì?
- A. Kiểm thử hộp đen (Black-box testing)
- B. Kiểm thử hộp trắng (White-box testing)
- C. Kiểm thử hồi quy (Regression testing)
- D. Kiểm thử đơn vị (Unit testing)
Câu 5: Khi gỡ lỗi một chương trình Python, việc sử dụng lệnh `print()` để hiển thị giá trị của các biến tại các điểm khác nhau trong quá trình thực thi nhằm mục đích gì?
- A. Thay đổi giá trị của biến để sửa lỗi.
- B. Theo dõi giá trị của biến tại các bước thực thi để khoanh vùng lỗi.
- C. Tăng tốc độ thực thi của chương trình.
- D. Kiểm tra lỗi cú pháp của chương trình.
Câu 6: Bạn đang kiểm thử một hàm tính căn bậc hai nhận đầu vào là một số. Bộ dữ liệu kiểm thử nào sau đây là quan trọng nhất để kiểm tra các trường hợp biên (boundary cases)?
- A. Các số dương lớn (ví dụ: 100, 1000)
- B. Các số dương nhỏ (ví dụ: 0.1, 0.001)
- C. Số 0 và một số âm (ví dụ: 0, -4)
- D. Các số nguyên lớn và số nguyên nhỏ.
Câu 7: Lỗi nào sau đây không thể được phát hiện bởi trình thông dịch (interpreter) Python trước khi chương trình bắt đầu chạy?
- A. Lỗi cú pháp (Syntax Error)
- B. Lỗi tên biến chưa khai báo (NameError - nếu biến được dùng ngay lập tức)
- C. Lỗi thụt lề (IndentationError)
- D. Lỗi logic (Semantic/Logic Error)
Câu 8: Bạn nhận được thông báo lỗi `ZeroDivisionError: division by zero` khi chạy chương trình. Lỗi này thuộc loại lỗi nào và nguyên nhân phổ biến nhất là gì?
- A. Lỗi ngoại lệ; Số chia có giá trị bằng 0.
- B. Lỗi cú pháp; Sử dụng sai toán tử chia.
- C. Lỗi logic; Kết quả phép chia không mong muốn.
- D. Lỗi tên; Tên biến số chia không tồn tại.
Câu 9: Phương pháp kiểm thử hộp trắng (White-box testing) tập trung vào khía cạnh nào của chương trình?
- A. Chỉ giao diện người dùng.
- B. Chỉ chức năng hoạt động từ bên ngoài.
- C. Cấu trúc mã nguồn, luồng điều khiển và đường đi dữ liệu bên trong chương trình.
- D. Hiệu suất và khả năng chịu tải của chương trình.
Câu 10: Khi gỡ lỗi, nếu bạn nghi ngờ một đoạn mã cụ thể gây ra lỗi, công cụ nào trong môi trường phát triển tích hợp (IDE) giúp tạm dừng chương trình ngay trước khi thực thi đoạn mã đó để bạn có thể kiểm tra trạng thái của các biến?
- A. Công cụ biên dịch.
- B. Điểm dừng (Breakpoint).
- C. Công cụ định dạng mã nguồn.
- D. Trình quản lý dự án.
Câu 11: Bạn đang kiểm thử một hàm nhận vào danh sách và trả về phần tử ở vị trí index `i`. Nếu danh sách có 5 phần tử (index từ 0 đến 4) và bạn gọi hàm với `i = 5`, loại lỗi ngoại lệ nào có khả năng xảy ra?
- A. IndexError
- B. TypeError
- C. ValueError
- D. KeyError
Câu 12: Xem xét đoạn mã Python sau:
def calculate_area(radius):
return 3.14 * radius ** 2
area = calculate_area(
- A. ZeroDivisionError
- B. IndexError
- C. TypeError
- D. NameError
Câu 13: Khi thực hiện kiểm thử, việc sử dụng các bộ dữ liệu ngẫu nhiên (random test data) trong miền hợp lệ của đầu vào có ưu điểm gì?
- A. Đảm bảo kiểm thử tất cả các đường đi trong mã nguồn.
- B. Chỉ tập trung vào các trường hợp biên.
- C. Giảm thiểu số lượng bộ dữ liệu test cần thiết.
- D. Tăng khả năng phát hiện các lỗi tiềm ẩn trong các trường hợp đầu vào không ngờ tới.
Câu 14: Trong quá trình gỡ lỗi, nếu bạn gặp lỗi `NameError: name "my_variable" is not defined`, bạn nên kiểm tra điều gì đầu tiên?
- A. Kiểu dữ liệu của biến `my_variable`.
- B. Chính tả của tên `my_variable` và đảm bảo nó đã được khai báo/gán giá trị trước khi sử dụng.
- C. Giá trị hiện tại của biến `my_variable`.
- D. Phép toán đang được thực hiện với biến `my_variable`.
Câu 15: Mục tiêu chính của giai đoạn gỡ lỗi (debugging) là gì?
- A. Tìm và sửa chữa các lỗi đã được phát hiện trong chương trình.
- B. Thiết kế các bộ dữ liệu kiểm thử mới.
- C. Ngăn chặn lỗi xảy ra trong tương lai.
- D. Đánh giá hiệu suất tổng thể của chương trình.
Câu 16: Khi kiểm thử một chương trình tính toán, việc kiểm tra với các giá trị đầu vào lớn hoặc rất nhỏ nằm gần giới hạn của kiểu dữ liệu (ví dụ: số nguyên lớn nhất, số thực gần 0) nhằm mục đích gì?
- A. Kiểm tra giao diện người dùng.
- B. Kiểm tra lỗi cú pháp.
- C. Kiểm tra khả năng xử lý các giá trị biên và các vấn đề liên quan đến kiểu dữ liệu (ví dụ: tràn số).
- D. Đánh giá tốc độ thực thi chương trình.
Câu 17: Bạn đang gỡ lỗi một chương trình và nghi ngờ một biến có giá trị không chính xác sau một loạt phép tính. Kỹ thuật gỡ lỗi nào sau đây hiệu quả nhất để theo dõi sự thay đổi giá trị của biến đó qua từng bước thực thi?
- A. Chạy lại chương trình nhiều lần với cùng một đầu vào.
- B. Đọc lại toàn bộ mã nguồn từ đầu.
- C. Xóa bớt các đoạn mã mà bạn cho là không liên quan.
- D. Sử dụng trình gỡ lỗi (debugger) để chạy từng bước và theo dõi biến.
Câu 18: Loại lỗi nào sau đây khó phát hiện nhất chỉ bằng cách nhìn vào mã nguồn mà không chạy thử?
- A. Lỗi cú pháp (Syntax Error).
- B. Lỗi logic (Semantic/Logic Error).
- C. Lỗi tên biến (NameError).
- D. Lỗi thụt lề (IndentationError).
Câu 19: Khi thiết kế bộ dữ liệu kiểm thử cho một chương trình, tại sao việc bao gồm các trường hợp đầu vào không hợp lệ (invalid input) lại quan trọng?
- A. Để kiểm tra cách chương trình xử lý các tình huống ngoại lệ hoặc dữ liệu không mong muốn.
- B. Để đảm bảo chương trình luôn đưa ra kết quả đúng.
- C. Để tăng tốc độ thực thi của chương trình.
- D. Để đơn giản hóa quá trình gỡ lỗi.
Câu 20: Xem xét đoạn mã Python sau:
def divide(a, b):
return a / b
result = divide(10, 2)
print(result)
Nếu bạn thay đổi dòng `result = divide(10, 2)` thành `result = divide(10, 0)`, lỗi ngoại lệ nào sẽ xảy ra?
- A. TypeError
- B. IndexError
- C. NameError
- D. ZeroDivisionError
Câu 21: Quá trình gỡ lỗi thường bao gồm các bước theo thứ tự nào sau đây?
- A. Sửa lỗi → Tìm lỗi → Kiểm tra lại → Phân tích nguyên nhân.
- B. Phân tích nguyên nhân → Sửa lỗi → Tìm lỗi → Kiểm tra lại.
- C. Tìm lỗi/Xác định vị trí → Phân tích nguyên nhân → Sửa lỗi → Kiểm tra lại.
- D. Kiểm tra lại → Tìm lỗi → Phân tích nguyên nhân → Sửa lỗi.
Câu 22: Công cụ sinh dữ liệu kiểm thử (Test data generator) có vai trò gì trong quá trình kiểm thử chương trình?
- A. Tự động sửa chữa lỗi trong mã nguồn.
- B. Tạo ra các bộ dữ liệu đầu vào để kiểm thử chương trình.
- C. Phân tích hiệu suất của chương trình.
- D. Viết báo cáo về các lỗi đã tìm thấy.
Câu 23: Khi kiểm thử một chức năng tìm kiếm trong một danh sách, bộ dữ liệu kiểm thử nào sau đây ít hữu ích nhất để phát hiện lỗi liên quan đến các trường hợp đặc biệt?
- A. Tìm kiếm một phần tử ở đầu danh sách.
- B. Tìm kiếm một phần tử không có trong danh sách.
- C. Tìm kiếm trong một danh sách rỗng.
- D. Tìm kiếm một phần tử ở giữa danh sách.
Câu 24: Lỗi nào sau đây là kết quả của việc viết mã sai quy tắc ngữ pháp của ngôn ngữ lập trình?
- A. Lỗi cú pháp (Syntax Error)
- B. Lỗi logic (Logic Error)
- C. Lỗi ngoại lệ (Runtime Error)
- D. Lỗi biên giới (Boundary Error)
Câu 25: Xem xét đoạn mã Python sau:
numbers = [1, 2, 3]
for i in range(4):
print(numbers[i])
Khi thực thi, đoạn mã này sẽ gây ra lỗi gì và tại dòng nào?
- A. TypeError tại dòng 2.
- B. ZeroDivisionError tại dòng 3.
- C. IndexError tại dòng 3.
- D. Syntax Error tại dòng 2.
Câu 26: Trong quá trình gỡ lỗi, sau khi xác định được nguyên nhân của lỗi, bước tiếp theo quan trọng nhất là gì?
- A. Bỏ qua lỗi đó và tiếp tục viết code.
- B. Thông báo cho người khác biết về lỗi.
- C. Xóa toàn bộ đoạn mã gây lỗi.
- D. Thực hiện sửa chữa và kiểm thử lại chương trình.
Câu 27: Việc thiết kế các bộ dữ liệu kiểm thử nên được thực hiện vào thời điểm nào trong vòng đời phát triển phần mềm?
- A. Song song hoặc ngay sau giai đoạn phân tích yêu cầu và thiết kế.
- B. Chỉ sau khi hoàn thành việc viết toàn bộ mã nguồn.
- C. Chỉ sau khi chương trình đã được triển khai cho người dùng cuối.
- D. Không quan trọng thời điểm, chỉ cần có bộ test trước khi bàn giao.
Câu 28: Bạn đang viết một chương trình xử lý ngày tháng. Bộ dữ liệu kiểm thử nào sau đây là ví dụ về kiểm thử trường hợp biên (boundary case) cho ngày trong tháng?
- A. Ngày 15 hàng tháng.
- B. Ngày 1, ngày 31, và ngày 32 của tháng 1.
- C. Một ngày ngẫu nhiên trong tháng.
- D. Chỉ kiểm tra ngày hiện tại của hệ thống.
Câu 29: Xem xét đoạn mã Python sau:
def process_list(data):
total = 0
for item in data:
total += item
return total / len(data)
result = process_list([])
print(result)
Khi chạy đoạn mã này với danh sách rỗng `[]`, lỗi ngoại lệ nào sẽ xảy ra tại dòng `return total / len(data)`?
- A. ZeroDivisionError
- B. IndexError
- C. TypeError
- D. ValueError
Câu 30: Công cụ nào sau đây không phải là một công cụ hoặc kỹ thuật trực tiếp hỗ trợ quá trình gỡ lỗi (debugging)?
- A. Sử dụng các lệnh in (print statements) để hiển thị giá trị biến.
- B. Sử dụng trình gỡ lỗi (debugger) để chạy từng bước và đặt điểm dừng.
- C. Ghi log (logging) các sự kiện và giá trị quan trọng.
- D. Công cụ biên dịch (Compiler).