Bài tập tuần 9: Kĩ thuật review inspection - misaphan/STQA-khoai-team GitHub Wiki

Nhóm 42:

  • Ngô Quốc Thắng
  • Phan Bá Mỹ
  • Nguyễn Hoàng Quân
  • Phạm Văn Bộ

1. Kỹ thuật review:

Sử dụng danh sách kiểm tra.

Danh sách kiểm tra là tập các câu hỏi nhằm xác định xem code có mắc phải 1 trong các lỗi phổ biến nào hay không.

Thường được chia thành các danh sách khác nhau, mỗi danh sách đề cập đến 1 kiểu lỗi khác nhau.

Ví dụ:

image image image image

2. Áp dụng:

Nhóm thực hiện review code của nhau (sử dụng danh sách kiểm tra) để phát hiện những điểm gây lỗi, dễ gây lỗi, sai chuẩn...cần được sửa.

Ví dụ:

Review code sau

#include <iostream>
#include <cmath>
using namespace std;

void main()
{
    int n, number[50], s = 0;
    cout << "Nhap so phan tu cua day so: ";
    cin >> n;
    
    for(int i = 0; i < n; i++)
    {
        do
        {
            cout << "Nhap phan tu thu " << i + 1 << " : ";
            cin >> number[i];
            if(number[i] < 0 || number[i] > 24)
                cout << "Ngoai khoang 0 den 24, moi nhap lai.\n";
            else
                break;
        }
        while(1);
    }
    cout << "------------------------\n";

    for(int i = 0; i < n; i++)
        s = s + number[i];
    cout << "Tong day so = " << s << endl;
    
    cout << "Cac so nguyen to trong day so: ";
    for(int i = 0; i < n; i++)
    {
        if(number[i] > 1)
        {
            int check = 1;
            for(int j = 2; j <= sqrt(number[i]); j++)
                if(number[i] % j == 0)
                {
                    check = 0;
                    break;
                }
            if(check == 1)
                cout << number[i] <<' ';
        }
    }
    system("pause");
}

Ta sẽ review code trên dựa vào các danh sách kiểm tra ở phần 1, rồi liệt kê các vấn đề tìm thấy và cách sửa.

Structure

  • Does the code conform to any pertinent coding standards?

    Có thể "void main()" không gây lỗi ở đa số trường hợp, tuy nhiên sử dụng "int main()" và "return 0" là đúng chuẩn và an toàn hơn.

  • Are symbolic used rather than “magic number” constants or string constants?

    Nên khai báo 1 biến lưu hằng số 50 (ví dụ là MAX), khi đó phần khai báo mảng "number[50]" sẽ trở thành "number[MAX]". Thói quen này sẽ có ích khi chúng ta cần sửa đổi những chương trình lớn.

  • Are any modules excessively complex and should be restructured or split into multiple routines?

    Nên dùng 1 hàm kiểm tra số nguyên tố thay vì dùng trong main. Việc này giúp code đỡ phức tạp và rõ ràng hơn.

Documentation

  • Is the code clearly and adequately documented with an easy-to-maintain commenting style?

    Không có comment nào. Cần bổ sung comment để người đọc biết code nào làm công việc gì.

Variables

  • Are all variables properly defined with meaningful, consistent, and clear names?

    Biến "s" (để lưu tổng các phần tử trong mảng) cần có 1 cái tên thích hợp hơn. Có thể là "sum".

Arithmetic Operations

Không có.

Loops and Branches

Không có

Defensive Programming

  • Are imported data and input arguments tested for validity and completeness?

    Biến n chưa được kiểm tra tính hợp lệ trước khi gán giá trị (VD: giá trị âm là không hợp lệ).


Sau khi chỉnh sửa theo các vấn đề ở trên, ta được code mới:

//Chuong trinh tinh tong cac phan tu cua 1 mang va liet ke so nguyen to trong mang

#include <iostream>
#include <cmath>
using namespace std;
const int MAX = 50;

//ham kiem tra 1 so la so nguyen to hay ko
bool isPrime(int n)
{
    if(n < 2)
        return false;
    else
    {
        for(int i = 2; i <= sqrt(n); i++)
            if(n % i == 0)
                return false;
    }
    return true;
}

//main
int main()
{
    int n, number[MAX], sum = 0;
    
    //nhap n
    do
    {
        cout << "Nhap so phan tu cua day so: ";
        cin >> n;
        if(n < 0 || n > MAX)
            cout << "n khong hop le, moi nhap lai.\n";
        else
            break;
    }
    while(1);
    
    //Nhap day so
    for(int i = 0; i < n; i++)
    {
        do
        {
            cout << "Nhap phan tu thu " << i + 1 << " : ";
            cin >> number[i];
            if(number[i] < 0 || number[i] > 24)
                cout << "Ngoai khoang 0 den 24, moi nhap lai.\n";
            else
                break;
        }
        while(1);
    }
    cout << "------------------------\n";
    
    //Tinh tong day so
    for(int i = 0; i < n; i++)
        sum = sum + number[i];
    cout << "Tong day so = " << sum << endl;
    
    //Tim so nguyen to 
    cout << "Cac so nguyen to trong day so: ";
    for(int i = 0; i < n; i++)
    {
        if(isPrime(number[i]))
            cout << number[i] <<' ';
    }
    cout << "\n------------------------\n";
    system("pause");
    return 0;
}
⚠️ **GitHub.com Fallback** ⚠️