Giải ngắn gọn Tin học 11 định hướng KHMT cánh diều bài 6: Kiểm thử và sửa lỗi chương trình

Giải siêu ngắn bài 6: Kiểm thử và sửa lỗi chương trình sách tin học 11 định hướng Khoa học máy tính cánh diều. Với câu từ ngắn gọn, ý tứ xúc tích, dễ hiểu, học sinh nhanh chóng nắm bắt các ý chính của bài, giúp nhớ nhanh và nhớ lâu. Từ đó, việc chinh phục kiến thức trở nên dễ hơn bao giờ hết.


Nếu chưa hiểu - hãy xem: => Lời giải chi tiết ở đây

KHỞI ĐỘNG

Câu 1: Theo em, tại sao rất ít khi viết chương trình xong có thể chạy được ngay?

Trả lời:

Bởi vì chương trình vừa viết xong còn lỗi và chưa được sửa 

Do đó, người lập trình thường phải dành thời gian để tìm và sửa lỗi trước khi chương trình có thể chạy đúng và hoàn thành công việc mà nó được thiết kế để thực hiện.

 

3. MỘT SỐ KINH NGHIỆM THỰC HÀNH GỠ LỖI CHƯƠNG TRÌNH

Câu 1: Hãy cho một số ví dụ ca kiểm thử:

1) Chương trình giải phương trình bậc hai.

2) Chương trình tính đếm (tính tổng, tính trung bình cộng...) các số dương trong một mảng số thực.

Trả lời:

  1. a) Ví cụ ca kiểm thử chương trình giải phương trình bậc hai:

Ý tưởng:

  • Dùng một vòng do while để nhập a, b, c nếu a = 0, thì nhập lại.

  • Chúng ta dùng hàm sqrt() trong thư viện math.h để tính căn delta hoặc tính căn không dùng hàm sqrt() tại đây.

  • Chúng ta tạo hàm giaiPT trả về kiểu int chính là số nghiệm của phương trình (1).

  • Chúng ta sẽ đưa tham chiếu 2 biến x1 , x2 vào hàm giaiPT để gán giá trị hai nghiệm.

  • Nếu pt (1) vô nghiệm thì giaiPT sẽ trả về 0 , đồng thời gán x1 = x2 =0 .

  • Nếu pt (1) có nghiệm kép thì giaiPT sẽ trả về 1 , đồng thời gán x1 = x2 = -b/2a .

  • Nếu pt (1) có 2 nghiệm thì giaiPT sẽ trả về 2 , gán x1 = (-b+√delta ) / 2a  x = (-b-√delta ) / 2a .

b) Gợi ý:

using namespace std;

void nhap(int &n, int a[]) {

    for(int i = 0; i < n; i++) {

        cout << "a[" << i + 1 << "] = ";

        cin >> a[i];

    }

}

void xuat(int n, int a[]) {

    for(int i = 0; i < n; i++) {

        cout << a[i] << " ";

    }

    cout << endl;

}

int tinhTBCongint(int n, int a[]) {

    int sum = 0, dem = 0;

    for(int i = 0; i < n; i++) {

        sum += a[i];

        dem++;

    }

    return sum / dem;

}

int tinhTBCongDuong(int n, int a[]) {

    int sum = 0, dem = 0;

    for(int i = 0; i < n; i++) {

        if(a[i] > 0) {

            sum += a[i];

            dem++;

        }

    }

    if(dem == 0) return 0;

    return sum / dem;

}

int tinhTBCongAm(int n, int a[]) {

    int sum = 0, dem = 0;

    for(int i = 0; i < n; i++) {

        if(a[i] < 0) {

            sum += a[i];

            dem++;

        }

    }

    if(dem == 0) return 0;

    return sum / dem;

}

int main() {

    int n;

    int a[100];

    do {

        cout << "Nhap n: ";

        cin >> n;

    } while(n <= 0 || n >= 100);

    nhap(n, a);

    cout << "--------XUAT MANG----" << endl;

    xuat(n, a);

    cout << "Trung binh cong: " << tinhTBCongint(n, a) << endl << endl;

    cout << "Trung binh so duong: " << tinhTBCongDuong(n, a) << endl << endl;

    cout << "Trung binh so am: " << tinhTBCongAm(n, a) << endl << endl;

}

 

LUYỆN TẬP

Câu 1: Có các loại lỗi chương trình nào? Nguyên nhân gây ra loại lỗi đó có thể là gì?

Trả lời:

Các loại lỗi chương trình:

-  Lỗi Cú Pháp (Syntax Errors)

-  Lỗi Logic

- Thiếu Thư Viện Hoặc Module

- Tương Thích Ngôn Ngữ

- Lỗi Run-Time

Câu 2: Hãy nêu một vài thói quen lập trình tốt để chương trình ít lỗi và dễ gỡ lỗi.

Trả lời:

- Đặt tên biến và hàm một cách rõ ràng và thể hiện chính xác chức năng của chúng.

- Tận dụng việc sử dụng các lời gọi hàm phù hợp để tái sử dụng mã nguồn.

- Tạo cấu trúc mã bằng cách đặt các phần quan trọng vào các hàm và lớp để thuận tiện trong việc tái sử dụng và kiểm thử.

- Sử dụng phương thức kiểm thử để xác minh tính chính xác và hỗ trợ trong việc gỡ lỗi khi có lỗi xuất hiện.

- Sử dụng chú thích mã nguồn một cách chi tiết để giải thích chức năng của mã và cách sử dụng nó.

- Thường xuyên sao lưu mã nguồn để đảm bảo an toàn dữ liệu và tránh mất mát khi xảy ra sự cố.

- Sử dụng các công cụ gỡ lỗi để phát hiện và khắc phục lỗi một cách nhanh chóng và dễ dàng hơn.

 

VẬN DỤNG

Câu 1: Em hãy liệt kê một số ca kiểm thử cho chương trình:

a) Tìm số x trong một dãy số (đã cho cụ thể).
b) Sắp xếp một dãy số.

Trả lời:

a) Hướng dẫn:

- Bước 1: Bắt đầu bằng việc khai báo một mảng tĩnh chứa số nguyên với 100 ô nhớ: `int a[100]`.

- Bước 2: Tiếp theo, chúng ta định nghĩa biến nguyên `n` để lưu số lượng phần tử trong mảng. Điều kiện để chấp nhận giá trị của `n` là n>1 hoặc n<100; nếu không thỏa mãn, yêu cầu người dùng nhập lại `n`.

- Bước 3: Tạo hàm `void Nhap(int a[], int n)` để nhập dữ liệu từ bàn phím cho mảng `a`. Trong hàm này, chúng ta sử dụng vòng lặp for để duyệt từng phần tử của mảng và nhập giá trị cho từng phần tử.

- Bước 4: Để hiển thị dữ liệu từ mảng ra màn hình, chúng ta tạo hàm `void Xuat(int a[], int n)`. Hàm này cũng sử dụng vòng lặp for để duyệt mảng và in giá trị từng phần tử ra màn hình.

- Bước 5: Để thực hiện tìm kiếm phần tử trong mảng, chúng ta tạo hàm `int TimKiem(int a[], int n)`. Trong hàm này, chúng ta nhập giá trị cần tìm kiếm và sử dụng vòng lặp for để duyệt mảng và kiểm tra từng phần tử. Nếu phần tử nào trùng khớp với giá trị cần tìm, chúng ta trả về vị trí của phần tử đó.

- Bước 6: Trong hàm `main`, chúng ta gọi các hàm đã tạo và sau đó chạy chương trình.

b) Sắp xếp một dãy số giảm dần:

#include <stdio.h>

int main(){

    int a[100];

    int n;

    printf("\nNhap so luong phan tu n = ");

    do{

        scanf("%d", &n);

        if(n <= 0){

            printf("\nNhap lai n = ");

        }

    }while(n <= 0);

    for(int i = 0; i < n; i++){

        printf("\nNhap a[%d] = ",i);

        scanf("%d", &a[i]);

    }

    Sắp xếp mảng theo thứ tự giảm dần bằng thuật toán sắp xếp chọn

    int temp;

    for(int i = 0; i < n - 1; i++){

        for(int j = i + 1; j < n; j++){

            if(a[i] < a[j]){

                // Hoán đổi vị trí hai phần tử a[i] và a[j]

                temp = a[i];

                a[i] = a[j];

                a[j] = temp;        

            }

        }

    }

    printf("\nMang da sap xep la: ");

    for(int i = 0; i < n; i++){

        printf("%5d", a[i]);

    }

}

 

CÂU HỎI TỰ KIỂM TRA

Câu 1: Tại sao nói kiểm thử chương trình làm tăng độ tin cậy của chương trình nhưng chưa chứng minh được chương trình đã hết lỗi?

Trả lời:

Kiểm tra chương trình đóng vai trò quan trọng trong việc đảm bảo tính chính xác của chương trình và giảm thiểu sự xuất hiện của lỗi trong quá trình sử dụng. Tuy nhiên, cần nhận thức rằng kiểm tra không thể bảo đảm rằng tất cả các lỗi đã được loại bỏ, vì không thể kiểm tra tất cả các trường hợp có thể xảy ra. Một số lỗi có thể không được phát hiện trong quá trình kiểm tra do thiếu kiểm tra cho các trường hợp đặc biệt, hoặc do các vấn đề như lỗi tràn số, lỗi đồng bộ hóa, hoặc các vấn đề liên quan đến môi trường thực thi của chương trình.

Vì vậy, kiểm tra là một phần quan trọng của quá trình phát triển phần mềm, nhưng không đảm bảo rằng tất cả lỗi đã được loại bỏ. Chương trình vẫn cần được kiểm tra và bảo trì sau khi triển khai để đảm bảo tính ổn định và chất lượng của nó.

Câu 2: Nên làm gì mỗi khi nghi ngờ một chức năng nào đó của chương trình chưa chắc đúng như ta mong muốn?

Trả lời:

Khi có nghi ngờ về tính chính xác của một chức năng trong chương trình, có một số cách tiếp cận có thể thực hiện như sau:

- Xác định vấn đề chính xác: Cần phân tích kỹ về đầu vào, thuật toán và kết quả của chức năng để hiểu rõ hơn về vấn đề.

- Thực hiện kiểm tra lặp lại: Lặp lại thao tác nhiều lần để kiểm tra xem vấn đề có tái diễn không. Nếu vấn đề xuất hiện định kỳ, ta có thể xác định nguyên nhân và tiến hành khắc phục.

- Kiểm tra mã nguồn: Cần kiểm tra mã nguồn của chương trình để đảm bảo rằng không có lỗi cú pháp hoặc sai sót nào trong quá trình viết mã.

- Sử dụng công cụ gỡ lỗi: Sử dụng các công cụ gỡ lỗi để xác định nguyên nhân của vấn đề.

- Tìm kiếm sự hỗ trợ từ chuyên gia: Nếu không tìm ra nguyên nhân, có thể tham khảo ý kiến từ người có chuyên môn, như các thành viên trong nhóm phát triển hoặc tìm kiếm hỗ trợ từ các diễn đàn trực tuyến.

- Tra cứu tài liệu: Có thể tra cứu trong tài liệu của chương trình hoặc tài liệu liên quan để tìm giải pháp cho vấn đề.


Nếu chưa hiểu - hãy xem: => Lời giải chi tiết ở đây

Nội dung quan tâm khác

Thêm kiến thức môn học

Từ khóa tìm kiếm: Giải ngắn gọn Tin học 11 cánh diều bài 6: Kiểm thử và sửa lỗi chương trình, Giải ngắn gọn Tin học 11 cánh diều bài 6: Kiểm thử và sửa lỗi chương trình

Bình luận

Giải bài tập những môn khác