Độ bao phủ dòng lệnh được tính bằng:
Các nghiên cứu và kinh nghiệm trong ngành đã chỉ ra rằng những gì được cân nhắc một cách hợp lý thông qua kiểm thử hộp đen (black-box testing) có thể thực sự chỉ đạt được mức độ bao phủ từ 60% đến 75%. Kiểm thử đặc biệt điển hình (ad hoc) có thì khả năng bao phủ khoảng 30% (điều này có nghĩa là 70% các dòng lệnh chưa được kiểm thử).
Các công cụ đo độ bao phủ khác nhau có thể hoạt động theo những cách hơi khác nhau, vì vậy chúng có thể đưa ra các số liệu về phạm vi bao phủ khác nhau cho cùng một nhóm kiểm thử trên cùng một mã (code), mặc dù ở mức độ phù hợp 100%, chúng phải giống nhau.
Chúng ta sẽ minh họa các nguyên tắc bao phủ trên mã. Để đơn giản hóa các ví dụ, chúng ta sẽ sử dụng mã giả cơ bản (không phải là một ngôn ngữ lập trình cụ thể nào) nhưng phải dễ đọc và dễ hiểu ngay cả khi bạn chưa tự mình thực thi bất kỳ chương trình nào.
Ví dụ: xem xét code mẫu
Để đạt được phạm vi bao phủ 100% câu lệnh của đoạn mã này, chỉ cần một trường hợp kiểm thử, một trường hợp đảm bảo rằng biến A chứa giá trị lớn hơn giá trị của biến B, ví dụ: A = 12 và B = 10. Lưu ý rằng ở đây đang thực hiện thiết kếkiểm thử cấu trúc trước, vì chúng ta đang chọn các giá trị đầu vào để đảm bảo phạm vi bao phủ câu lệnh.
Hãy xem một ví dụ mà chúng ta đo độ bao phủ. Để đơn giản hóa ví dụ, ta sẽ coi mỗi dòng là một câu lệnh. (Các công cụ và phương pháp khác nhau có thể tính những thứ khác nhau (ví dụ câu lệnh), nhưng nguyên tắc cơ bản là giống nhau cho dù chúng được tính như thế nào.) Một câu lệnh có thể nằm trên một dòng hoặc có thể trải dài trên nhiều dòng. Một dòng có thể chứa nhiều câu lệnh, chỉ một câu lệnh, hoặc chỉ một phần của câu lệnh. Một số câu lệnh có thể chứa các câu lệnh khác bên trong chúng. Trong code mẫu ở dưới, có hai câu lệnh đọc, một câu lệnh gán và sau đó là một câu lệnh IF trên ba dòng, nhưng câu lệnh IF chứa một câu lệnh khác (câu lệnh Print) như một phần của nó.
Mặc dù không hoàn toàn chính xác, nhưng chúng ta đã đánh số từng dòng và sẽ coi mỗi dòng là một câu lệnh. (Một số công cụ có thể nhóm các câu lệnh luôn được thực thi cùng nhau trong một khối cơ bản được coi là một câu lệnh đơn lẻ.) Tuy nhiên, chúng ta sẽ chỉ sử dụng các dòng được đánh số để minh họa các nguyên tắc bao phủ các câu lệnh (dòng). Hãy phân tích mức độ phù hợp của một tập hợp các bài kiểm thử trong chương trình sáu câu lệnh ở trên:
TEST SET 1
Test 1_1: A = 2, B = 3
Test 1_2: A = 0, B = 25
Test 1_3: A = 47, B = 1
Chúng ta đã đề cập đến những tuyên bố nào?
- Trong Test 1_1, giá trị của C sẽ là 8, vì vậy sẽ bao gồm các câu lệnh trên dòng 1 đến 4 và dòng 6.
- Trong Test 1_2, giá trị của C sẽ là 50, vì vậy sẽ đề cập chính xác các câu lệnh giống như Test 1_1.
- Trong Test 1_3, giá trị của C sẽ là 49, vì vậy một lần nữa chúng ta sẽ đề cập đến các câu lệnh tương tự.
Vì chúng ta đã kiểm tra năm trong số sáu câu lệnh, nên ta có mức độ phù hợp của câu lệnh là 83% (với ba bài kiểm thử). Chúng ta sẽ cần bài kiểm thử nào để hoàn thành câu lệnh 5 (là câu mà chúng ta chưa thực hiện)?
Test 1_4: A = 20, B = 25
Lần này giá trị của C là 70, vì vậy ta sẽ in “C lớn” và tất cả sáu câu lệnh đã được thực hiện, vì vậy bây giờ độ bao phủ của câu lệnh = 100%. Lưu ý rằng chúng ta đã đo mức độ bao phủ trước, sau đó thiết kế một bài kiểm thử để bao phủ câu lệnh mà chúng ta chưa bao phủ.
Lưu ý rằng bản thân Test 1_4 sẽ hiệu quả hơn (hướng tới mục tiêu là đạt được mức độ bao phủ dòng lệnh 100%) so với ba kiểm thử đầu tiên. Chỉ làm riêng Test 1_4 cũng hiệu quả hơn trong bộ bốn bài kiểm thử, vì nó chỉ sử dụng một bài kiểm thử thay vì bốn bài kiểm thử. Hiệu quả hơn và tiết kiệm thời gian hơn là dấu hiệu của một kỹ thuật kiểm thử tốt.
Bản gốc Tiếng Anh các bạn có thể Tải về Tại đây