Lý thuyết Tin học 11 Bài 23 (Kết nối tri thức): Kiểm thử và đánh giá chương trình
Tóm tắt lý thuyết Tin học lớp 11 Bài 23: Kiểm thử và đánh giá chương trình hay, chi tiết sách Kết nối tri thức sẽ giúp học sinh nắm vững kiến thức trọng tâm, ôn luyện để học tốt Tin học 11.
Lý thuyết Tin học 11 Bài 23: Kiểm thử và đánh giá chương trình
A. Lý thuyết Kiểm thử và đánh giá chương trình
1. Vai trò của kiểm thử chương trình
- Phương pháp 1: Sử dụng bộ dữ liệu kiểm thử để kiểm tra tính đúng của chương trình. Nếu phát hiện lỗi thì kết luận chương trình không đúng, nhưng nếu không có lỗi thì chưa chứng minh được tính đúng của chương trình.
- Mục đích của phương pháp 2 và 3 là tìm và sửa lỗi để tăng tính tin cậy của chương trình, nhưng không chứng minh được tính đúng của thuật toán và chương trình.
- Một thuật toán được thiết kế đúng sẽ cho ra kết quả đúng với mọi bộ dữ liệu đầu vào tương ứng. Phương pháp kiểm thử không có khả năng chứng minh tính đúng của một thuật toán.
2. Kiểm tra tính đúng của chương trình
- Phương pháp 1 sử dụng các bộ dữ liệu kiểm thử để kiểm tra tính đúng của chương trình. Tuy nhiên, việc kiểm tra với các bộ dữ liệu kiểm thử không chứng minh được tính đúng của thuật toán hay chương trình, chỉ làm tăng khả năng đúng của chương trình.
- Phương pháp 2 và 3 nhằm tìm và sửa lỗi của chương trình để chương trình trở nên tin cậy hơn. Tuy nhiên, điều đó không chứng minh được tính đúng của thuật toán và chương trình.
- Việc chứng minh tính đúng của thuật toán đều phải dựa trên logic toán học. Bắt biến vòng lặp là một phương pháp thường được sử dụng. Ví dụ với thuật toán sắp xếp chèn, bằng bất biến vòng lặp, ta có thể chứng minh tính đúng của thuật toán.
- Trong trao đổi 1, việc sử dụng các bộ dữ liệu kiểm thử chưa chứng minh được tính đúng của thuật toán và chương trình. Tuy nhiên, việc thử nhiều bộ dữ liệu kiểm thử sẽ tăng độ tin cậy của chương trình.
- Trao đổi 2 là một luận điệu logic vì nó dựa trên ý tưởng chính của thuật toán sắp xếp chèn. Đây là cách lập luận đơn giản thường được sử dụng để chứng minh tính đúng của thuật toán.
- Trong trao đổi 3, việc chứng minh tính đúng của chương trình thường được thực hiện bằng lập luận toán học, sử dụng phương pháp quy nạp toán học. Đây là cách tốt nhất để chứng minh tính đúng của một thuật toán.
3. Đánh giá hiệu quả chương trình
- Độ phức tạp tính toán (computational complexity) là lượng tài nguyên (amounts of resources) cần thiết để thực hiện chương trình, được sử dụng để đánh giá hiệu quả hoặc tính tối ưu của chương trình.
- Độ phức tạp thời gian (time complexity) được xác định là thời gian thực hiện chương trình/thuật toán, phụ thuộc vào khối lượng dữ liệu cần xử lý và các bước giải quyết vấn đề.
- Độ phức tạp không gian (space complexity) là lượng bộ nhớ máy tính cần sử dụng để thực hiện chương trình/thuật toán.
- Một chương trình/thuật toán được coi là hiệu quả nếu độ phức tạp của nó thấp, tức là tốn ít thời gian và bộ nhớ cần thiết để thực hiện.
- Các tiêu chí như tính dễ hiểu, rõ ràng, ngắn gọn, dễ bảo trì, dễ cài đặt,... của chương trình cũng được quan tâm trong đánh giá hiệu quả chương trình.
- Độ phức tạp thời gian của chương trình/thuật toán phụ thuộc vào số lần thực hiện các phép toán/câu lệnh trong chương trình/thuật toán. Đối với các bài toán kĩ thuật, thiết kế, nghiên cứu khoa học đòi hỏi khối lượng tính toán lớn, việc thiết kế chương trình/thuật toán có độ phức tạp thời gian thấp là mối quan tâm hàng đầu.
- Đối với các bài toán chạy liên tục như các dịch vụ trực tuyến thì tính dễ cài đặt, dễ duy trì và độ tin cậy của phần mềm cũng cỏ vai trò quan trọng.
- Trong phạm vi kiến thức phổ thông, ta chỉ quan tâm đến độ phức tạp thời gian của chương trình/thuật toán. Việc xác định độ phức tạp thời gian dựa trên ước lượng thời gian thực hiện các bước (câu lệnh) trong chương trình/thuật toán sẽ được trình bày trong các bài học sau.
Sơ đồ tư duy Kiểm thử và đánh giá chương trình

B. Bài tập Kiểm thử và đánh giá chương trình
Câu 1: Chương trình chạy phát sinh lỗi ngoại lệ ZeroDivision, nên xử lí như thế nào?
A. Kiểm tra lại giá trị số chia.
B. Kiểm tra lại chỉ số trong mảng.
C. Kiểm tra giá trị của số bị chia.
D. Kiểm tra kiểu dữ liệu nhập vào.
Câu 2: Chương trình sau bị lỗi ở dòng lệnh thứ bao nhiêu ?
>>> fruits = ['Banana', 'Apple', 'Lime']
>>> loud_fruits = [fruit.upper() for fruit in fruits]
>>> print(loud_fruits)
>>> list(enumerate(fruits))
A. 2.
B. 3.
C. 4.
D. Không phát sinh lỗi
Câu 3: Chương trình sau phát sinh lỗi gì?
>>> 1 / 0
0.5
>>> 2 ** 3
8
A. NameError.
B. TypeError.
C. ZeroDivisionError.
D. Syntax Error.
Câu 4: Chương trình chạy phát sinh lỗi ngoại lệ IndexError, nên xử lí như thế nào?
A. Kiểm tra lại giá trị số chia.
B. Kiểm tra lại chỉ số trong mảng.
C. Kiểm tra giá trị của số bị chia.
D. Kiểm tra kiểu dữ liệu nhập vào.
Câu 5: Chương trình sau có lỗi ở dòng lệnh nào?
n = int(input("Nhập số tự nhiên n: "))
s = ""
for i in range(10):
s = s + i
A. 1.
B. 2.
C. 3.
D. 4.
Câu 6: Hoàn thành phát biểu sau: “Có rất nhiều công cụ và phương pháp khác nhau để kiểm thử chương trình. Các công cụ có mục đích … của chương trình và …, … các lỗi phát sinh trong tương lai”
A. Tìm ra lỗi, phòng ngừa, ngăn chặn.
B. Tìm ra lỗi, phòng ngừa, xử lí.
C. Phòng ngừa, ngăn chặn, xử lí lỗi.
D. Xử lí lỗi, phòng ngừa, ngăn chặn.
Câu 7: Đâu không là công cụ để kiểm thử chương trình?
A. Công cụ in biến trung gian.
B. Công cụ sinh các bộ dữ liệu test.
C. Công cụ thống kê dữ liệu
D. Công cụ điểm dừng trong phần mềm soạn thảo lập trình.
Câu 8: Trong các phát biểu sau, phát biểu nào chưa chính xác về kiểm thử chương trình?
A. Hiện nay, có ít phương pháp và công cụ khác nhau để kiểm thử chương trình.
B. Chương trình cần được thử với một số bộ dữ liệu test gồm đầu vào tiêu biểu và kết quả đầu ra biết trước.
C. Các bộ test phụ thuộc vào các tiêu chí khác nhau.
D. Các bộ test dữ liệu nên có nhiều bộ test ngẫu nhiên,...
Câu 9: Phát biểu nào sau đây đúng nhất khi nói về các bộ dữ liệu test khi kiểm thử chương trình?
A. Các bộ test có thể có đầu vào theo các tiêu chí khác nhau.
B. Các bộ test có đầu vào theo một số tiêu chí nhất định.
C. Các bộ test có thể có đầu vào theo các tiêu chí khác nhau như độ lớn, tính đa dạng của dữ liệu.
D. Các bộ test có đầu vào phải theo các tiêu chí về độ lớn, tính đa dạng của dữ liệu.
Câu 10: Số phát biểu đúng trong các phát biểu sau:
1) Cần chú ý nên có nhiều bộ test khi test các bộ dữ liệu.
2) Việc sinh ngẫu nhiên dữ liệu đầu vào trong miền xác định của chương trình làm tăng khả năng tìm lỗi.
3) Thực tế cho thấy ít khi phát sinh lỗi tại các vùng biên hoặc lân cận biên.
4) Không thể sử dụng các lệnh print() để in ra các biến trung gian.
A. 2.
B. 3.
C. 1.
D. 4.
Trắc nghiệm Tin học 11 Bài 23: Kiểm thử và đánh giá chương trình
Câu 1: Phương pháp kiểm thử nào dưới đây có thể giúp tăng độ tin cậy của chương trình nhưng không chứng minh được tính đúng của thuật toán?
A. Kiểm thử bằng chứng minh lôgic toán học
B. Sử dụng các bộ dữ liệu kiểm thử
C. Sử dụng phương pháp quy nạp toán học
D. Xem xét thời gian chạy của chương trình
Đáp án: B
Giải thích: Sử dụng các bộ dữ liệu kiểm thử có thể giúp phát hiện các lỗi và tăng độ tin cậy của chương trình. Tuy nhiên, điều này không thể chứng minh tính đúng của thuật toán một cách tuyệt đối.
Câu 2: Phương pháp nào sau đây thường được sử dụng để chứng minh tính đúng của thuật toán một cách chắc chắn?
A. Kiểm thử bằng cách chạy nhiều lần
B. Dùng dữ liệu kiểm thử ngẫu nhiên
C. Chứng minh bằng lôgic toán học
D. Kiểm tra độ phức tạp tính toán
Đáp án: C
Giải thích: Để chứng minh tính đúng của một thuật toán, lôgic toán học là phương pháp tin cậy và chuẩn xác nhất, vì nó đảm bảo tính đúng cho mọi trường hợp.
Câu 3: Mục đích chính của việc kiểm thử chương trình là gì?
A. Đảm bảo chương trình chạy nhanh nhất có thể
B. Phát hiện lỗi và sửa lỗi để tăng độ tin cậy của chương trình
C. Chứng minh chương trình không bao giờ sai
D. Đánh giá khả năng tối ưu của thuật toán
Đáp án: B
Giải thích: Kiểm thử chủ yếu để tìm và sửa lỗi, từ đó làm tăng độ tin cậy của chương trình, mặc dù không đảm bảo chứng minh được tính đúng của thuật toán.
Câu 4: Trong kiểm thử chương trình, tại sao không thể chỉ dựa vào các bộ dữ liệu kiểm thử để chứng minh tính đúng của thuật toán?
A. Vì các bộ dữ liệu kiểm thử thường có sai sót
B. Vì kiểm thử không kiểm tra được tất cả các tình huống có thể xảy ra
C. Vì thuật toán luôn có khả năng chạy sai
D. Vì kiểm thử chỉ làm tăng thời gian chạy của chương trình
Đáp án: B
Giải thích: Các bộ dữ liệu kiểm thử không thể bao quát mọi trường hợp có thể xảy ra trong thực tế, nên chúng chỉ giúp phát hiện lỗi và tăng độ tin cậy, không thể chứng minh được tính đúng.
Câu 5: Tiêu chí nào dưới đây thường được xem xét khi đánh giá hiệu quả của một thuật toán?
A. Tính đơn giản và dễ hiểu
B. Thời gian và không gian bộ nhớ sử dụng
C. Khả năng phát hiện lỗi tự động
D. Độ dài của mã lệnh
Đáp án: B
Giải thích: Để đánh giá hiệu quả, cần xem xét thời gian và không gian bộ nhớ mà thuật toán tiêu thụ, vì đây là hai yếu tố quan trọng ảnh hưởng đến hiệu suất của chương trình
Câu 6: Một chương trình có thể tối ưu về mặt thời gian nhưng không tối ưu về mặt nào dưới đây?
A. Tính đúng của thuật toán
B. Dung lượng bộ nhớ sử dụng
C. Khả năng kiểm thử
D. Độ phức tạp logic
Đáp án: B
Giải thích: Một chương trình có thể chạy nhanh (tối ưu về thời gian), nhưng có thể tiêu tốn bộ nhớ nhiều, tức là không tối ưu về dung lượng bộ nhớ.
Câu 7: Trong kiểm thử chương trình, tại sao nên sử dụng các bộ dữ liệu có tính đa dạng cao?
A. Để kiểm tra độ nhanh chậm của thuật toán
B. Để tăng khả năng phát hiện lỗi trong các trường hợp khác nhau
C. Để giúp chương trình dễ hiểu hơn
D. Để giảm thời gian chạy chương trình
Đáp án: B
Giải thích: Các bộ dữ liệu đa dạng giúp kiểm tra nhiều tình huống khác nhau, từ đó tăng khả năng phát hiện các lỗi tiềm ẩn.
Câu 8: Độ phức tạp tính toán của một thuật toán chủ yếu đánh giá điều gì?
A. Tính đơn giản của thuật toán
B. Tài nguyên phần cứng cần thiết để chạy chương trình
C. Tốc độ thực thi và bộ nhớ cần thiết cho chương trình
D. Khả năng kiểm tra lỗi của chương trình
Đáp án: C
Giải thích: Độ phức tạp tính toán đánh giá tốc độ thực thi và không gian bộ nhớ mà thuật toán cần, từ đó xác định khả năng tối ưu của thuật toán.
Câu 9: Trong các lựa chọn sau, đâu là lợi ích của việc sử dụng các bộ dữ liệu kiểm thử?
A. Chứng minh thuật toán chạy đúng cho mọi trường hợp
B. Tăng độ tin cậy của chương trình
C. Giảm thời gian cần để viết mã
D. Đảm bảo bộ nhớ sử dụng tối thiểu
Đáp án: B
Giải thích: Các bộ dữ liệu kiểm thử giúp tăng độ tin cậy của chương trình bằng cách tìm và sửa lỗi, nhưng không đảm bảo tính đúng hoàn toàn của thuật toán.
Câu 10: Phương pháp quy nạp toán học thường được sử dụng để làm gì trong kiểm thử chương trình?
A. Để tìm và sửa lỗi trong mã lệnh
B. Để chứng minh tính đúng của thuật toán
C. Để đo độ phức tạp của chương trình
D. Để đánh giá dung lượng bộ nhớ sử dụng
Đáp án: B
Giải thích: Quy nạp toán học là phương pháp giúp chứng minh tính đúng của thuật toán bằng cách lập luận logic, đảm bảo tính đúng trong mọi trường hợp đầu vào.
PHẦN II. Câu trắc nghiệm đúng sai. Thí sinh trả lời từ câu 1 đến câu 2. Trong mỗi ý a), b), c), d) ở mỗi câu, thí sinh chọn đúng hoặc sai
Câu 1: Mục đích chính của việc sử dụng các bộ dữ liệu kiểm thử là gì?
a) Chứng minh tính đúng đắn tuyệt đối của chương trình.
b) Kiểm tra độ tin cậy của chương trình bằng cách phát hiện lỗi có thể có.
c) Đánh giá tốc độ thực thi của chương trình.
d) Đảm bảo chương trình tiết kiệm bộ nhớ tối đa.
Câu 1:
a) Sai. Sử dụng các bộ dữ liệu kiểm thử giúp tăng độ tin cậy của chương trình nhưng không thể chứng minh tính đúng đắn tuyệt đối của chương trình.
b) Đúng. Mục đích của các bộ dữ liệu kiểm thử là phát hiện lỗi có thể có và đánh giá độ tin cậy của chương trình.
c) Sai. Kiểm tra tốc độ thực thi là một yếu tố khác trong đánh giá hiệu quả, nhưng không phải là mục tiêu chính của việc kiểm thử.
d) Sai. Mục tiêu tiết kiệm bộ nhớ thuộc về tối ưu hóa bộ nhớ, không phải mục đích của kiểm thử bằng bộ dữ liệu kiểm thử
Câu 2: Tiêu chí nào dưới đây là quan trọng nhất khi đánh giá hiệu quả của một thuật toán?
a) Thời gian chạy nhanh hơn các thuật toán khác cùng giải bài toán.
b) Sử dụng bộ nhớ ít nhất có thể.
c) Chương trình phải rõ ràng, dễ hiểu và dễ áp dụng.
d) Phải chứng minh được tính đúng đắn tuyệt đối của thuật toán.
a) Đúng. Thời gian chạy của thuật toán là một tiêu chí quan trọng để đánh giá hiệu quả của nó, đặc biệt là khi xét đến độ phức tạp thời gian.
b) Sai. Bộ nhớ ít cũng quan trọng, nhưng không phải là yếu tố quan trọng nhất trong mọi trường hợp.
c) Sai. Rõ ràng và dễ hiểu giúp lập trình dễ bảo trì, nhưng không phải là tiêu chí chính để đánh giá hiệu quả.
d) Sai. Tính đúng đắn là yêu cầu cần có, nhưng tính hiệu quả còn đòi hỏi thuật toán phải chạy nhanh và sử dụng bộ nhớ hợp lý.
PHẦN III. Câu trả lời ngắn. Thí sinh trả lời từ câu 1 đến câu 3
Câu 1: Kiểm thử chương trình có vai trò gì trong việc đánh giá tính đúng đắn của thuật toán?
Đáp án: Kiểm thử chương trình giúp tăng độ tin cậy của chương trình bằng cách phát hiện và sửa các lỗi thông qua việc sử dụng các bộ dữ liệu đầu vào khác nhau. Tuy nhiên, kiểm thử không thể chứng minh tính đúng đắn hoàn toàn của một thuật toán.
Giải thích: Kiểm thử có thể phát hiện lỗi khi chương trình không cho ra kết quả đúng với các bộ dữ liệu đầu vào cụ thể. Tuy nhiên, vì số lượng trường hợp đầu vào là vô hạn, nên kiểm thử không đảm bảo rằng chương trình luôn đúng với mọi trường hợp. Để chứng minh tính đúng của một thuật toán, ta cần sử dụng các phương pháp chứng minh logic hoặc toán học.
Câu 2: Làm thế nào để kiểm tra tính đúng của thuật toán sắp xếp chèn bằng phương pháp lập luận logic?
Đáp án: Ta có thể kiểm tra tính đúng của thuật toán sắp xếp chèn bằng cách sử dụng bất biến vòng lặp. Sau mỗi bước lặp, dãy con từ đầu đến phần tử hiện tại phải được sắp xếp đúng theo thứ tự tăng dần
Giải thích: Phương pháp lập luận logic như bất biến vòng lặp giúp chúng ta theo dõi trạng thái của chương trình ở từng bước, đảm bảo rằng các phần tử trong dãy con từ đầu đến vị trí hiện tại luôn được sắp xếp đúng. Nếu bất biến này đúng sau mỗi bước lặp và duy trì đến cuối vòng lặp, thì dãy đã được sắp xếp tăng dần, chứng tỏ thuật toán sắp xếp chèn là đúng.
Câu 3: Hai tiêu chí quan trọng nhất để đánh giá hiệu quả của một chương trình là gì?
Đáp án: Hai tiêu chí quan trọng nhất để đánh giá hiệu quả của một chương trình là độ phức tạp thời gian và độ phức tạp không gian
Giải thích: Độ phức tạp thời gian cho biết thời gian thực hiện của chương trình và có ảnh hưởng trực tiếp đến tốc độ xử lý, đặc biệt là khi xử lý lượng lớn dữ liệu. Độ phức tạp không gian liên quan đến lượng bộ nhớ mà chương trình sử dụng. Trong nhiều ứng dụng, tối ưu thời gian thường quan trọng hơn, nhưng với các thiết bị có hạn chế về bộ nhớ, việc tiết kiệm không gian cũng rất cần thiết.
Xem thêm các bài lý thuyết Tin học 11 sách Kết nối tri thức hay, chi tiết tại:
Lý thuyết Bài 21: Các thuật toán sắp xếp đơn giản
Lý thuyết Bài 24: Đánh giá độ phức tạp thời gian thuật toán
Lý thuyết Bài 26: Phương pháp làm mịn dần trong thiết kế chương trình
Lý thuyết Bài 28: Thiết kế chương trình theo Mô đun
Lý thuyết Bài 30: Thiết lập thư viện cho chương trình
Xem thêm tài liệu Tin học lớp 11:
Giải Tin học 11 Bài 23: Kiểm thử và đánh giá chương trình
Giải SBT Tin học 11 Bài 23: Kiểm thử và đánh giá chương trình
Xem thêm các chương trình khác:
- Soạn văn lớp 11 Kết nối tri thức - hay nhất
- Văn mẫu lớp 11 - Kết nối tri thức
- Tóm tắt tác phẩm Ngữ văn 11 – Kết nối tri thức
- Tác giả tác phẩm Ngữ văn 11 - Kết nối tri thức
- Giải SBT Ngữ văn 11 – Kết nối tri thức
- Bố cục tác phẩm Ngữ văn 11 – Kết nối tri thức
- Giải Chuyên đề học tập Ngữ văn 11 – Kết nối tri thức
- Nội dung chính tác phẩm Ngữ văn lớp 11 – Kết nối tri thức
- Soạn văn 11 Kết nối tri thức (ngắn nhất)
- 100+ đề Đọc hiểu Ngữ Văn 11 (có đáp án)
- Giải sgk Toán 11 – Kết nối tri thức
- Giải Chuyên đề học tập Toán 11 – Kết nối tri thức
- Lý thuyết Toán 11 - Kết nối tri thức
- Giải sbt Toán 11 – Kết nối tri thức
- Bài tập Tiếng Anh 11 Global success theo Unit có đáp án
- Giải sgk Tiếng Anh 11 – Global success
- Giải sbt Tiếng Anh 11 - Global Success
- Trọn bộ Từ vựng Tiếng Anh 11 Global success đầy đủ nhất
- Ngữ pháp Tiếng Anh 11 Global success
- Giải sgk Vật lí 11 – Kết nối tri thức
- Lý thuyết Vật lí 11 – Kết nối tri thức
- Giải sbt Vật lí 11 – Kết nối tri thức
- Giải Chuyên đề học tập Vật lí 11 – Kết nối tri thức
- Chuyên đề dạy thêm Vật lí 11 cả 3 sách (2026 có đáp án)
- Giải sgk Hóa học 11 – Kết nối tri thức
- Giải Chuyên đề học tập Hóa học 11 – Kết nối tri thức
- Lý thuyết Hóa 11 - Kết nối tri thức
- Giải sbt Hóa học 11 – Kết nối tri thức
- Chuyên đề dạy thêm Hóa 11 cả 3 sách (2026 có đáp án)
- Giải sgk Sinh học 11 – Kết nối tri thức
- Lý thuyết Sinh học 11 – Kết nối tri thức
- Giải Chuyên đề học tập Sinh học 11 – Kết nối tri thức
- Giải sbt Sinh học 11 – Kết nối tri thức
- Giải sgk Giáo dục Kinh tế và Pháp luật 11 – Kết nối tri thức
- Giải Chuyên đề học tập Kinh tế pháp luật 11 – Kết nối tri thức
- Lý thuyết Kinh tế pháp luật 11 – Kết nối tri thức
- Giải sbt Kinh tế pháp luật 11 – Kết nối tri thức
- Giải sgk Lịch sử 11 – Kết nối tri thức
- Giải Chuyên đề học tập Lịch sử 11 – Kết nối tri thức
- Lý thuyết Lịch sử 11 - Kết nối tri thức
- Giải sbt Lịch sử 11 – Kết nối tri thức
- Giải sgk Địa lí 11 – Kết nối tri thức
- Giải Chuyên đề học tập Địa lí 11 – Kết nối tri thức
- Lý thuyết Địa lí 11 - Kết nối tri thức
- Giải sbt Địa lí 11 – Kết nối tri thức
- Giải sgk Công nghệ 11 – Kết nối tri thức
- Lý thuyết Công nghệ 11 - Kết nối tri thức
- Giải sbt Công nghệ 11 – Kết nối tri thức
- Giải sgk Giáo dục quốc phòng an ninh 11 – Kết nối tri thức
- Lý thuyết Giáo dục quốc phòng 11 – Kết nối tri thức
- Giải sbt Giáo dục quốc phòng 11 – Kết nối tri thức
- Giải sgk Hoạt động trải nghiệm 11 – Kết nối tri thức
