Bài 23 Kiểm thử và đánh giá chương trình

Lớp 11Tin Học12 câu hỏiBài tập

Phần 1

Câu 1

(Câu 23.2 trang 73 SBT Tin học 11) Giả sử một chương trình đã được kiểm tra chạy chính xác với hơn 1000 lần test. Mệnh đề nào sau đây là đúng?
AChương trình đó có độ tin cậy cao.
BChương trình đó hoàn toàn chính xác.
CChương trình đó chắc là sai ít đúng nhiều.
DChưa thể nói gì được về chương trình đó.

Câu 2

(Câu 23.3 trang 73 SBT Tin học 11) Để chứng minh một thuật toán là đúng cần phải làm gì? Chọn phương án đúng nhất trong các phương án sau:
ACần chứng minh bằng toán học chặt chẽ tính đúng của thuật toán.
BCần tiến hành kiểm thử chương trình cài đặt thuật toán, kiểm thử càng nhiều càng tốt.
CCần cài đặt thuật toán trên càng nhiều ngôn ngữ lập trình càng tốt.
DCần chạy thử chương trình cài đặt thuật toán xem thời gian chạy có nhanh hay không.

Phần 2

Câu 1

(Câu 23.1 trang 73 SBT Tin học 11) Xét mệnh đề: “Muốn chứng minh một chương trình chạy đúng chỉ cần thực hiện thật nhiều việc kiểm thử. Nếu kiểm tra trên tất cả các bộ dữ liệu kiểm thử đều đúng thì chương trình đúng.”
a)Mệnh đề trên là không đúng.
b)Kiểm thử nhiều bộ dữ liệu giúp tăng độ tin cậy của chương trình.
c)Kiểm thử có thể giúp phát hiện lỗi trong chương trình.
d)Chỉ cần kiểm thử thật nhiều là có thể chứng minh chắc chắn chương trình luôn đúng trong mọi trường hợp.

Câu 2

(Câu 23.4 trang 74 SBT Tin học 11) Cùng một chương trình, với hai bộ dữ liệu đầu vào khác nhau nhưng cùng kích thước, xét thời gian chạy chương trình với hai bộ dữ liệu này.
a)Thời gian chạy chương trình có thể giống nhau.
b)Thời gian chạy chương trình có thể khác nhau.
c)Thời gian chạy không chỉ phụ thuộc vào kích thước dữ liệu mà còn có thể phụ thuộc vào đặc điểm cụ thể của dữ liệu.
d)Nếu hai bộ dữ liệu có cùng kích thước thì thời gian chạy chương trình chắc chắn luôn giống nhau.

Câu 3

(Câu 23.5 trang 74 SBT Tin học 11) Với thuật toán sắp xếp chèn, xét các bộ dữ liệu kiểm thử có cùng kích thước n.
a)Bộ dữ liệu là dãy đã sắp xếp đúng cho thời gian chạy nhanh nhất.
b)Bộ dữ liệu là dãy đã sắp xếp theo thứ tự ngược lại cho thời gian chạy chậm nhất.
c)Thời gian chạy của thuật toán sắp xếp chèn có thể phụ thuộc vào trạng thái ban đầu của dãy dữ liệu.
d)Với cùng kích thước n, mọi bộ dữ liệu kiểm thử luôn cho thời gian chạy giống hệt nhau.

Câu 4

(Câu 23.6 trang 74 SBT Tin học 11) Xác định kích thước đầu vào của một số bài toán.
a)Với bài toán sắp xếp dãy số A theo thứ tự tăng dần, kích thước đầu vào có thể tính bằng chiều dài của dãy A.
b)Với bài toán tính tổng 1 + 2 + ... + n, kích thước đầu vào có thể tính theo số n.
c)Với bài toán tính gcd(a, b), kích thước đầu vào có thể xét theo số lớn hơn trong hai số a, b.
d)Kích thước đầu vào của mọi bài toán luôn bằng số dòng lệnh của chương trình giải bài toán đó.

Câu 5

(Câu 23.7 trang 74 SBT Tin học 11) Viết chương trình nhập dãy số A từ bàn phím, thực hiện các thuật toán sắp xếp chèn, sắp xếp chọn, sắp xếp nổi bọt trên dãy A và tính thời gian chạy của từng thuật toán.
a)Cần nhập dãy số A từ bàn phím trước khi thực hiện các thuật toán sắp xếp.
b)Cần chạy lần lượt các thuật toán sắp xếp chèn, sắp xếp chọn và sắp xếp nổi bọt trên dãy A.
c)Có thể dùng thư viện hoặc hàm đo thời gian để tính thời gian chạy của từng thuật toán.
d)Chỉ cần chạy một thuật toán sắp xếp bất kì là đủ để biết thời gian chạy của tất cả các thuật toán còn lại.

Câu 6

(Câu 23.7 trang 74 SBT Tin học 11) Khi đo thời gian chạy của nhiều thuật toán sắp xếp trên cùng một dãy A.
a)Nên sao chép dãy A ban đầu thành các bản sao riêng để mỗi thuật toán được chạy trên cùng dữ liệu đầu vào.
b)Nếu dùng chung một dãy A, sau khi thuật toán đầu tiên sắp xếp xong thì các thuật toán sau có thể không còn chạy trên dữ liệu ban đầu nữa.
c)Kết quả thời gian chạy cần được đưa ra màn hình để so sánh.
d)Việc đo thời gian chạy không cần quan tâm đến dữ liệu đầu vào của thuật toán.

Câu 7

(Câu 23.8 trang 74 SBT Tin học 11) Hàm sinh_day(n, a, b) tạo một dãy số nguyên có n phần tử và các giá trị nằm ngẫu nhiên trong phạm vi [a, b]. Xét yêu cầu tạo dãy A với các độ dài n khác nhau rồi đo thời gian chạy của các thuật toán sắp xếp.
a)Có thể dùng randint(a, b) để sinh ngẫu nhiên một số nguyên trong phạm vi [a, b].
b)Có thể dùng biểu thức [randint(a, b) for i in range(n)] để tạo dãy gồm n số nguyên ngẫu nhiên.
c)Cần ghi lại bảng kết quả thời gian chạy với các giá trị n = 100, 1000, 10 000, 100 000.
d)Khi n tăng lên, thời gian chạy của các thuật toán sắp xếp đơn giản chắc chắn luôn giảm xuống.

Câu 8

(Câu 23.8 trang 74 SBT Tin học 11) Khi thực hiện kiểm thử thời gian chạy của thuật toán sắp xếp chèn, sắp xếp chọn và sắp xếp nổi bọt với các dãy sinh ngẫu nhiên.
a)Cần chạy từng thuật toán trên dãy dữ liệu phù hợp để đo thời gian.
b)Nên ghi kết quả đo được vào bảng để dễ so sánh.
c)Khi kích thước n rất lớn, các thuật toán sắp xếp đơn giản có thể mất nhiều thời gian chạy.
d)Chỉ cần đo với n = 100 là đủ để kết luận chính xác thời gian chạy trong mọi trường hợp.

Câu 9

(Câu 23.9 trang 74 SBT Tin học 11) Viết chương trình tạo dãy A có n phần tử với giá trị ngẫu nhiên, sau đó tính thời gian chạy của lệnh sắp xếp A.sort() của Python và so sánh với các thuật toán sắp xếp đã biết.
a)Có thể dùng phương thức A.sort() của Python để sắp xếp dãy A.
b)Cần đo thời gian chạy của A.sort() để so sánh với sắp xếp chèn, sắp xếp chọn và sắp xếp nổi bọt.
c)Theo kết quả thử nghiệm trong bài, phương thức sort() của Python nhanh hơn hẳn ba thuật toán sắp xếp đơn giản đã biết.
d)Phương thức sort() của Python luôn chậm hơn thuật toán sắp xếp nổi bọt.

Câu 10

(Câu 23.9 trang 74 SBT Tin học 11) Với n = 10000, một ví dụ kết quả tính toán thời gian chạy theo giây là: sắp xếp chèn khoảng 10,77; sắp xếp chọn khoảng 10,30; sắp xếp nổi bọt khoảng 20,89; sắp xếp Python khoảng 0,0012.
a)Trong ví dụ này, sắp xếp Python có thời gian chạy nhỏ nhất.
b)Trong ví dụ này, sắp xếp nổi bọt có thời gian chạy lớn hơn sắp xếp chèn.
c)Kết quả minh hoạ cho thấy A.sort() của Python nhanh hơn hẳn các thuật toán sắp xếp đơn giản đã học.
d)Trong ví dụ này, sắp xếp Python chậm hơn sắp xếp nổi bọt.