1.1. Vai trò của kiểm thử 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.
1.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.
Nhận xét:
– 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.
1.3. Đánh giá hiệu quả của 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.