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:
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
Giải bài tập những môn khác
Giải sgk lớp 11 KNTT
Giải sgk lớp 11 CTST
Giải sgk lớp 11 cánh diều
Giải SBT lớp 11 kết nối tri thức
Giải SBT lớp 11 chân trời sáng tạo
Giải SBT lớp 11 cánh diều
Giải chuyên đề học tập lớp 11 kết nối tri thức
Giải chuyên đề toán 11 kết nối tri thức
Giải chuyên đề ngữ văn 11 kết nối tri thức
Giải chuyên đề vật lí 11 kết nối tri thức
Giải chuyên đề hóa học 11 kết nối tri thức
Giải chuyên đề sinh học 11 kết nối tri thức
Giải chuyên đề kinh tế pháp luật 11 kết nối tri thức
Giải chuyên đề lịch sử 11 kết nối tri thức
Giải chuyên đề địa lí 11 kết nối tri thức
Giải chuyên đề mĩ thuật 11 kết nối tri thức
Giải chuyên đề âm nhạc 11 kết nối tri thức
Giải chuyên đề công nghệ chăn nuôi 11 kết nối tri thức
Giải chuyên đề công nghệ cơ khí 11 kết nối tri thức
Giải chuyên đề tin học 11 định hướng Khoa học máy tính kết nối tri thức
Giải chuyên đề tin học 11 định hướng Tin học ứng dụng kết nối tri thức
Giải chuyên đề quốc phòng an ninh 11 kết nối tri thức
Giải chuyên đề hoạt động trải nghiệm hướng nghiệp 11 kết nối tri thức
Giải chuyên đề học tập lớp 11 chân trời sáng tạo
Giải chuyên đề học tập lớp 11 cánh diều
Trắc nghiệm 11 Kết nối tri thức
Trắc nghiệm 11 Chân trời sáng tạo
Trắc nghiệm 11 Cánh diều
Bộ đề thi, đề kiểm tra lớp 11 kết nối tri thức
Đề thi Toán 11 Kết nối tri thức
Đề thi ngữ văn 11 Kết nối tri thức
Đề thi vật lí 11 Kết nối tri thức
Đề thi sinh học 11 Kết nối tri thức
Đề thi hóa học 11 Kết nối tri thức
Đề thi lịch sử 11 Kết nối tri thức
Đề thi địa lí 11 Kết nối tri thức
Đề thi kinh tế pháp luật 11 Kết nối tri thức
Đề thi công nghệ cơ khí 11 Kết nối tri thức
Đề thi công nghệ chăn nuôi 11 Kết nối tri thức
Đề thi tin học ứng dụng 11 Kết nối tri thức
Đề thi khoa học máy tính 11 Kết nối tri thức
Bộ đề thi, đề kiểm tra lớp 11 chân trời sáng tạo
Bộ đề thi, đề kiểm tra lớp 11 cánh diều
Đề thi Toán 11 Cánh diều
Đề thi ngữ văn 11 Cánh diều
Đề thi vật lí 11 Cánh diều
Đề thi sinh học 11 Cánh diều
Đề thi hóa học 11 Cánh diều
Đề thi lịch sử 11 Cánh diều
Đề thi địa lí 11 Cánh diều
Đề thi kinh tế pháp luật 11 Cánh diều
Đề thi công nghệ cơ khí 11 Cánh diều
Đề thi công nghệ chăn nuôi 11 Cánh diều
Đề thi tin học ứng dụng 11 Cánh diều
Đề thi khoa học máy tính 11 Cánh diều
Bình luận