Mỗi bộ thử cần một kết quả để đối chiếu
Giả sử quy tắc **giả định**: điểm từ 50 trở lên là “Đạt”, dưới 50 là “Chưa đạt”. Viết hàm đúng và chạy với các giá trị quanh mốc:
```python
def xep(diem):
if diem >= 50:
return "Đạt"
return "Chưa đạt"
for diem in [49, 50, 51]:
print(diem, xep(diem))
```
Kết quả cần là `49 Chưa đạt`, `50 Đạt`, `51 Đạt`. Nếu nhầm `>=` thành `>`, ca 49 và 51 vẫn đúng nhưng ca **50** sai. Vì vậy bảng thử phải có giá trị ngay tại mốc, không chỉ những giá trị cách xa. Đây là ngưỡng của ví dụ lập trình, không phải quy chế điểm thật.
Bài luyện
Với quy tắc giả định từ 50 trở lên là Đạt, bộ nào dễ phát hiện lỗi viết `>` thay `>=`?
Không có giá trị đúng tại mốc.
50 phân biệt rõ hai điều kiện.
0 đều chưa đạt.
Cả hai đều đạt theo hai điều kiện.
Lời giải
Ở điểm 50, `diem>=50` đúng còn `diem>50` sai. Bộ 49,50,51 kiểm cả dưới, đúng tại và trên mốc.
Bài luyện
Theo mã đúng trong bài, `xep(50)` trả gì?
50 thỏa điều kiện >=.
Mốc 50 được tính Đạt.
Hàm trả xâu, không trả số.
Cả hai nhánh đều return.
Lời giải
`50>=50` đúng, nên nhánh đầu trả xâu `"Đạt"`.
Ca thường, ca biên và dữ liệu sai
Một bảng kiểm thử nhỏ cho hàm `xep` nên ghi **đầu vào → kết quả mong đợi → kết quả chạy**. Có thể thử 20→Chưa đạt, 49→Chưa đạt, 50→Đạt, 51→Đạt, 90→Đạt. Nếu phạm vi nhận điểm là 0–100, cần quyết định rõ cách xử lí -1, 101 hoặc xâu chữ; hàm đơn giản trong bài **chưa kiểm phạm vi hay kiểu**, nên không gọi nó là chương trình nhập điểm hoàn chỉnh.
Một số ca đạt làm tăng tin cậy nhưng không chứng minh chương trình đúng cho mọi đầu vào. Khi phát hiện một ca sai, cần lưu chính ca đó để kiểm lại sau khi sửa.
Bài luyện
Nếu hàm `xep` trong bài nhận 101, kết luận nào đúng?
Mã chưa có kiểm phạm vi.
101>=50 nên trả Đạt, dù có thể là đầu vào không hợp lệ theo yêu cầu mở rộng.
Mã hợp cú pháp.
Mã không giới hạn điểm.
Lời giải
Hàm chỉ xét `diem>=50`, nên 101 trả `"Đạt"`. Nếu quy định điểm 0–100, phải thêm bước kiểm phạm vi; bộ thử 101 giúp thấy thiếu sót.
Bài luyện
Vài bộ kiểm thử đều đúng cho phép kết luận gì?
Không thể suy mọi đầu vào từ vài mẫu.
Sau sửa mã cần kiểm lại.
Kết luận chỉ trong phạm vi bộ thử đã chạy.
Lỗi lôgic có thể nằm ở ca chưa thử.
Lời giải
Kết quả đúng chứng minh hành vi của các ca đã thử. Những ca chưa thử, nhất là biên hoặc sai dạng, vẫn có thể phát lộ lỗi.
Đang học