ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƢỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
DƢƠNG THỊ PHƢỢNG
CƠ SỞ TOÁN HỌC CHO CÁC KỸ THUẬT
KIỂM THỬ PHẦN MỀM
LUẬN VĂN THẠC SĨ KHOA HỌC
Hà Nội - Năm 2012
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƢỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
DƢƠNG THỊ PHƢỢNG
CƠ SỞ TOÁN HỌC CHO CÁC KỸ THUẬT
KIỂM THỬ PHẦN MỀM
Chuyên ngành: BẢO ĐẢM TOÁN CHO MÁY TÍNH
VÀ HỆ THỐNG TÍNH TOÁN
Mã số: 60.46.35
LUẬN VĂN THẠC SĨ KHOA HỌC
NGƢỜI HƢỚNG DẪN KHOA HỌC:
TS. PHẠM NGỌC HÙNG
Hà Nội - Năm 2012
Luận văn cao học Dương Thị Phượng
- 1 -
MỤC LỤC
MỞ ĐẦU 5
1.1. Đặt vấn đề 3
1.2. Nội dung nghiên cứu 4
1.3. Cấu trúc luận văn 5
Chƣơng 1: Tổng quan về kiểm thử phần mềm 6
1.1. Các khái niệm cơ bản về kiểm thử phần mềm 6
1.1.1. Kiểm thử phần mềm là gì? 6
1.1.2. Lý do kiểm thử phần mềm 7
1.1.3. Vai trò của kiểm thử phần mềm 8
1.1.4. Mục đích của kiểm thử phần mềm 9
1.2. Tiến trình kiểm thử phần mềm 10
Chƣơng 2: Phƣơng pháp phân hoạch (quy hoạch) toán học trong kiểm thử hộp
đen 12
2.1. Phƣơng pháp kiểm thử dựa trên phân hoạch tƣơng đƣơng 12
2.1.1. Phân lớp tƣơng đƣơng mạnh 17
2.1.2. Phân lớp tƣơng đƣơng yếu 18
2.1.3. Phân lớp tƣơng đƣơng truyền thống 19
2.2 Ứng dụng 21
2.2.1 Kiểm thử chƣơng trình nhập điểm thi cao học 21
2.2.2 Kiểm thử chƣơng trình sau khi lập trình viên đã sửa lỗi 26
Chƣơng 3: Cơ sở toán học trong kiểm thử hộp trắng 27
3.1. Ứng dụng đồ thị lƣu trình trong lý thuyết đồ thị vào kiểm thử luồng điều khiển
(Basic Path Testing). 27
3.2 Áp dụng vào kiểm thử đoạn mã chƣơng trình trong ví dụ "Nhập điểm thi cao
học" 33
3.2.1 Trƣờng hợp 1: Đoạn mã chƣơng trình A 34
3.2.2 Trƣờng hợp 2: Đoạn mã chƣơng trình B (đã chỉnh sửa). 39
Chƣơng 4: Kết luận 44
Luận văn cao học Dương Thị Phượng
- 2 -
DANH MỤC CÁC BẢNG VÀ HÌNH VẼ
Hình 1.1 - Giai đoạn kiểm thử trong xử lý phần mềm 9
Hình 1.2 - Tiến trình kiểm thử phần mềm 10
Bảng 2.1 - Mẫu bảng liệt kê các lớp tƣơng đƣơng 13
Hình 2.1 - Nguyên tắc phân hoạch tập hợp. 14
Hình 2.2 - Phân lớp tƣơng đƣơng cho bài toán điểm thi cao học 16
Bảng 2.2. Bảng liệt kê các lớp tƣơng đƣơng cho bài toán điểm thi cao học 16
Hình 2.3 - Chọn giá trị tại mỗi lớp tƣơng đƣơng cho bài toán điểm thi cao học 16
Bảng 2.3 - Danh sách các ca kiểm thử sinh ra theo phân lớp tƣơng đƣơng mạnh
Bảng 2.4 - Danh sách các ca kiểm thử sinh ra theo phân lớp tƣơng đƣơng yếu 18
Bảng 2.5 - Danh sách các ca kiểm thử sinh ra theo phân lớp tƣơng đƣơng truyền
thống. 19
Hình 2.4 - Giao diện màn hình nhập điểm thi cao học 21
Bảng 2.6. Kết quả kiểm thử với trƣờng hợp phân lớp tƣơng đƣơng mạnh 22
Bảng 2.7. Kết quả kiểm thử qua với trƣờng hợp phân hoạch tƣơng đƣơng yếu 24
Bảng 2.8. Kết quả kiểm thử với trƣờng hợp phân lớp tƣơng đƣơng truyền thống 24
Bảng 2.9. Bảng kết quả chạy thực tế với đoạn mã chƣơng trình A 26
Hình 3.1 - Ký hiệu đồ thị lƣu trình 29
Hình 3.2 - Điều kiện phức 30
Hình 3.3 - Đồ thị lƣu trình 30
Hình 3.4 - Đồ thị lƣu trình trên đoạn mã chƣơng trình A 35
Bảng 3.1: Kết quả kiểm thử theo phƣơng pháp kiểm thử luồng điều khiển trên đoạn mã
chƣơng trình A 38
Hình 3.4 - Đồ thị lƣu trình trên đoạn mã chƣơng trình B 40
Bảng 3.2: Kết quả kiểm thử theo phƣơng pháp kiểm thử luồng điều khiển trên đoạn
mã chƣơng trình B 43
Luận văn cao học Dương Thị Phượng
- 3 -
MỞ ĐẦU
1.1. Đặt vấn đề
Việc phát triển phần mềm ngày càng đƣợc hỗ trợ bởi nhiều công cụ tiên
tiến giúp cho việc xây dựng phần mềm hiệu quả hơn, với chất lƣợng tốt hơn.
Tuy nhiên, vì độ phức tạp của phần mềm và những giới hạn về thời gian và
chi phí, cho dù các hoạt động đảm bảo chất lƣợng phần mềm nói chung và
kiểm thử phần mềm nói riêng ngày càng chặt chẽ và khoa học, chung ta vẫn
rất khó khăn trong việc đảm bảo tính đúng đắn của các sản phẩm phần mềm.
Lỗi vẫn luôn tiềm ẩn trong mọi sản phẩm phần mềm và cũng có thể gây
những thiệt hại khôn lƣờng khi triển khai chúng trong thực tế [13].
Để xây dựng đƣợc một phần mềm đáp ứng yêu cầu ngƣời sử dụng và có
chất lƣợng cao, các dự án phát triển phần mềm cần phải trải qua một quy trình
gồm các khâu sau: Phân tích yêu cầu, phân tích hệ thống, thiết kế phần mềm,
lập trình, kiểm thử phần mềm, triển khai phần mềm và bảo trì phần mềm [2,
6, 13]. Trong quy trình này, kiểm thử phần mềm đóng vai trò hết sức quan
trọng nhằm đảm bảo chất lƣợng của sản phẩm. Nó giúp cho ngƣời xây dựng
hệ thống và khách hàng thấy đƣợc hệ thống mới đã đáp ứng yêu cầu đặt ra
hay chƣa. Tuy nhiên, kiểm thử phần mềm đang đƣợc xem là một khâu yếu
nhất trong quy trình phát triển phần mềm. Mỗi dự án gia công phần mềm cho
Công ty nƣớc ngoài, trên thực tế 50% dùng để chi phí cho lập trình, còn lại
50% dùng chi phí cho việc kiểm thử [13]. Hiện tại các Công ty phần mềm làm
công tác kiểm thử chƣa tốt và là công việc khó khăn trong Công ty phần mềm,
nên công tác đào tạo về kiểm thử cần đƣợc coi trọng.
Quy trình kiểm thử phần mềm gồm bai giai đoạn chính: sinh các ca kiểm
thử và chạy các ca kiểm thử này nhằm phát hiện các lỗi/khiếm khuyết của hệ
thống [5]. Nếu sản phẩm chạy qua tất cả các ca kiểm thử với kết quả thu đƣợc
Luận văn cao học Dương Thị Phượng
- 4 -
giống với kết quả mong muốn thì ta có thể tin tƣởng vào chất lƣợn của sản
phẩm. Ngƣợc lại, một kết quả không đúng giúp ta tìm và sửa các lỗi và kết
quả là ta phải chạy lại toàn bộ các ca kiểm thử. Trong hai giai đoạn này, việc
sinh các ca kiểm thử có vai trò quyết định đến khả năng phát hiện lỗi/khiếm
khuyết của quá trình kiểm thử. Làm thế nào để sinh đƣợc bộ kiểm thử tốt
(gồm các ca kiểm thử) là bài toán khó trong kiểm thử phần mềm. Việc sinh bộ
kiểm thử tốt phụ thuộc vào phƣơng pháp chúng ta sử dụng. Có nhiều phƣơng
pháp sinh ra bộ kiểm thử [10], mỗi phƣơng pháp đều có ƣu và nhƣợc điểm
riêng. Vì vậy, ngƣời sinh ra bộ kiểm thử phải bơi trong biển các phƣơng pháp
kiểm thử. Trong nhiều trƣờng hợp, có thể họ sử dụng một phƣơng pháp kiểm
thử nào đó nhƣng không nắm đƣợc bản chất toán học của phƣơng pháp này
nên sinh ra các ca kiểm thử không tốt. Điều này giống nhƣ việc khi mua m ột
chiếc máy tính mới cấu hình mạnh, tính năng sử dụng nhiều nhƣng ngƣời sử
dụng lại không biết khai thác điểm mạnh của nó mà chỉ sử dụng thƣờng
xuyên nhƣ chiếc máy tính cũ. Theo khảo sát của chúng tôi, hầu hết những
ngƣời làm kiểm thử đều ít để ý đến bản chất toán học của các phƣơng pháp
sinh bộ kiểm thử. Trong thực tế, mỗi phƣơng pháp kiểm thử đều dựa trên một
cơ sở toán học. Việc nắm rõ bản chất toán học của các phƣơng pháp kiểm thử
giúp cho chúng ta khai thác tối đa khả năng phát hiện lỗi/khiếm khuyết của
các phƣơng pháp này. Hơn nữa, công việc này cũng là cơ sở quan trọng để
đào tạo nguồn nhân lực về kiểm thử phần mềm trong môi trƣờng thƣờng
xuyên biến động và ngày càng có nhiều phƣơng pháp kiểm thử mới ra đời.
1.2. Nội dung nghiên cứu
Nhằm tìm hiểu cơ sở toán học của các phƣơng pháp kiểm thử, luận văn
tập trung nghiên cứu các nội dung chính nhƣ sau.
Tìm hiểu các kỹ thuật kiểm thử nhằm đảm bảo chất lƣợng phần mềm.
Luận văn cao học Dương Thị Phượng
- 5 -
Tập trung nghiên cứu cơ sở toán học của phƣơng pháp phân hoạch tƣơng
đƣơng (một kỹ thuật kiểm thử hộp đen) và phƣơng pháp kiểm thử luồng điều
khiển (một kỹ thuật kiểm thử hộp trắng).
Áp dụng các kỹ thuật trên nhằm kiểm thử một số chƣơng trình đơn giản.
1.3. Cấu trúc luận văn
Phần còn lại của luận văn đƣợc cấu trúc nhƣ sau. Chƣơng 1 giới thiệu
tổng quan về kiểm trử phần mềm gồm khái niệm về phần mềm, lý do kiểm
thử phần mềm, vai trò của kiểm thử phần mềm và mục đích của kiểm thử
phần mềm. Phƣơng pháp phân hoạch (quy hoạch) toán học và ứng dụng của
phân hoạch tƣơng đƣơng vào kiểm thử hộp đen (kiểm thử dựa theo đặc tả
không quan tâm tới mã nguồn) cùng ví dụ áp dụng đƣợc trình bày trong
Chƣơng 2. Chƣơng 3 mô tả về đồ thị lƣu trình trong lý thuyết đồ thị và ứng
dụng vào kiểm thử luồng điều khiển chƣơng trình trong kiểm thử hộp trắng
cùng ví dụ áp dụng. Cuối cùng, Chƣơng 4 trình bày kết luận của luận văn và
hƣớng nghiên cứu tiếp theo.
Luận văn cao học Dương Thị Phượng
- 6 -
CHƯƠNG 1
TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM
1.1. Các khái niệm cơ bản về kiểm thử phần mềm
Kiểm thử phần mềm
Kiểm thử phần mềm là quá trình khảo sát một hệ thống hay thành phần
dƣới những điều kiện xác định, quan sát và ghi lại các kết quả, và đánh giá
một khía cạnh nào đó của hệ thống hay thành phần đó [5].
Kiểm thử phần mềm thƣờng đồng nghĩa với việc tìm ra lỗi chƣa đƣợc
phát hiện. Tuy nhiên, có nhiều bối cảnh kiểm thử không bộc lộ ra lỗi. Kiểm
thử phần mềm là quá trình thực thi một hệ thống phần mềm để xác định xem
phần mềm đó có đúng với đặc tả không và thực hiện trong môi trƣờng nhƣ
mong đợi hay không.
Trên thực tế, hệ thống đang thực hiện khác biệt với việc duyệt lại mã
nguồn. Thông thƣờng, ngƣời phát triển thực hiện việc đọc lại và phân tích mã
nguồn. Nói cách khác, kiểm thử đòi hỏi một hệ thống chạy đƣợc. Đặc tả là
căn cứ chủ yếu hỗ trợ cho việc kiểm thử. Nó xác định những hành vi đúng và
làm cho dễ dàng hơn trong việc xác định những hành vi không đúng. Mỗi
hành vi không đúng chính là một lỗi phần mềm. Nói chung, ngƣời phát triển
phải tự chẩn đoán nguyên nhân sinh lỗi trong mã nguồn.
Mục đích của kiểm thử phần mềm là tìm ra lỗi chƣa đƣợc phát hiện, tìm
một cách sớm nhất có thể và đảm bảo rằng lỗi đã đƣợc sửa, mà kiểm thử phần
mềm không làm công việc chẩn đoán nguyên nhân gây ra lỗi đã đƣợc phát
hiện và sửa lỗi. Chúng ta sẽ nghiên cứu kĩ hơn vấn đề này ở những phần tiếp
theo.
Luận văn cao học Dương Thị Phượng
- 7 -
Mục tiêu của kiểm thử phần mềm là thiết kế tài liệu kiểm thử một cách
có hệ thống và thực hiện nó sao cho có hiệu quả, nhƣng tiết kiệm đƣợc thời
gian, công sức và chi phí.
Kiểm thử phần mềm là một tiến trình hay một tập hợp các tiến trình đƣợc
thiết kế để đảm bảo mã hóa máy tính thực hiện theo cái mà chúng đã đƣợc
thiết kế để làm, và không thực hiện bất cứ thứ gì không mong muốn. Đây là
một pha quan trọng trong quá trình phát triển hệ thống, giúp cho ngƣời xây
dựng hệ thống và khách hàng thấy đƣợc hệ thống mới đã đáp ứng yêu cầu đặt
ra hay chƣa.
1.1.1. Lý do kiểm thử phần mềm
Mặc dù kiểm thử phần mềm là một quy trình bắt buộc trong vòng đời
phát triển phần mềm nhƣng hầu hết các phần mềm hiện tại vẫn còn lỗi lọt đến
khách hàng hoặc đƣợc chính ngƣời sử dụng tìm ra trong quá trình kiểm thử
chấp nhận sản phẩm (acceptance test). Nguyên nhân một phần lớn là do kiểm
thử viên chƣa làm đúng quy trình trong quá trình xây dựng các ca kiểm thử.
Vì vậy chúng ta cần hiểu rõ lý do của việc kiểm thử để từ đó thấy đƣợc ý
nghĩa của việc xây dựng ca kiểm thử hiệu quả. Có một số lý do chính của hoạt
động kiểm thử phần mềm nhƣ sau. Lý do thứ nhất, về khía cạnh xem xét sản
phẩm, ngƣời phát triển muốn kiểm tra phần mềm nhƣ một phần tử của hệ
thống hoạt động thì cần phải thực hiện thông qua hoạt động kiểm thử phẩn
mềm. Lý do quan trọng thứ hai là khi thực hiện tốt hoạt động kiểm thử, chúng
ta sẽ hạn chế đƣợc chi phí cho các thất bại do lỗi gây ra sau này. Đây chính là
hiệu quả của hoạt động kiểm thử mang lại và cũng chính là mục tiêu của
ngƣời phát triển hệ thống khi thực hiện hoạt động kiểm thử phần mềm. Ngoài
ra còn có một lý do liên quan đến giải pháp phát triển, khi thực hiện hoạt động
kiểm thử, đội phát triển sẽ có kế hoạch tốt nâng cao chất lƣợng suốt quá trình
phát triển phần mềm [4].
Luận văn cao học Dương Thị Phượng
- 8 -
Chất lƣợng phần mềm là một khái niệm đa chiều, không dễ định nghĩa
đơn giản theo cách chung cho các sản phẩm là: “Sản phẩm đƣợc phát triển
phù hợp với đặc tả của nó.” (Ian Somerville [6] trích dẫn định nghĩa của
Crosby). Có một số vấn đề khó trong hệ thống phần mềm, đó là: Đặc tả phải
định hƣớng theo những đòi hỏi về chất lƣợng của khách hàng (nhƣ tính hiệu
quả, độ tin cậy, tính dễ hiểu, tính bảo mật,…) và những yêu cầu của chính tổ
chức phát triển phần mềm vốn không có trong đặc tả (nhƣ các yêu cầu về khả
năng bảo trì, tính sử dụng lại, )
Một số yêu cầu về chất lƣợng cũng rất khó chỉ ra một cách rõ ràng (nhƣ
tính bảo trì). Những đặc tả phần mềm thƣờng không đầy đủ và hay mâu
thuẫn. Vì thế phải có sự thỏa hiệp về chất lƣợng: Chúng ta không thể đợi các
đặc tả hoàn thiện trƣớc khi chú ý đến quản lý chất lƣợng, chúng ta phải sắp
xếp các thủ tục để hoàn thiện chất lƣợng mặc dù đặc tả chƣa hoàn thiện.
Quản lý chất lƣợng không chỉ quan tâm đến việc làm hạn chế tối thiểu
những khiếm khuyết của sản phẩm và đảm bảo tuân theo đặc tả, mà còn phải
quan tâm đến những thuộc tính chất lƣợng khác của sản phẩm.
Trên quan điểm qui trình, kiểm thử phần mềm là một phần của xác minh
và thẩm định phần mềm. Nếu phần mềm là thành phần của hệ thống lớn hơn
thì kiểm thử phần mềm cũng đƣợc xem nhƣ là một phần của quản lý và đảm
bảo chất lƣợng. Và để đạt phần mềm chất lƣợng cao, thì kiểm thử có thể coi là
một thành phần chủ yếu của hoạt động đảm bảo chất lƣợng phần mềm.
1.1.2. Vai trò của kiểm thử phần mềm
Thực tế đã chứng minh hoạt động kiểm thử có vai trò vô cùng quan trọng
trong tiến trình phát triển phần mềm. Vai trò đó đƣợc thể hiện qua chi phí và
hiệu quả của hoạt động kiểm thử mang lại. Về mặt chi phí, hoạt động kiểm
thử chiếm khoảng 40% tổng công sức phát triển phần mềm và chiếm tới hơn
Luận văn cao học Dương Thị Phượng
- 9 -
30% tổng thời gian phát triển. Ngoài ra với các phần mềm có ảnh hƣởng tới
sinh mạng thì chi phí kiểm thử có thể gấp từ 3 đến 5 lần tổng các chi phí khác
cộng lại [4]. Vai trò của hoạt động kiểm thử phần mềm còn thể hiện ở hiệu
quả mà nó mang lại, khi việc kiểm thử phần mềm đạt kết quả tốt sẽ có hiệu
quả rất lớn trong việc giảm chi phí phát triển và làm tăng độ tin cậy của sản
phẩm phần mềm.
1.1.3. Mục đích của kiểm thử phần mềm
Là thiết kế đƣợc những trƣờng hợp kiểm thử để có thể phát hiện một
cách có hệ thống những loại lỗi khác nhau và thực hiện công việc đó với
lƣợng thời gian và tài nguyên tối ƣu nhất. Tuy nhiên kiểm thử phần mềm
không thể khẳng định rằng phần mềm không còn khiếm khuyết. Nhƣ vậy ta
có thể kết luận, mục tiêu đầu tiên và trƣớc mắt của hoạt động kiểm thử phần
mềm là tạo ra các ca kiểm thử để tìm ra lỗi của phần mềm. Mục tiêu cuối
cùng và cũng là mục tiêu mà ngƣời phát triển hƣớng tới là kiểm thử phần
mềm sẽ giúp cho ngƣời phát triển có một chƣơng trình tốt, chi phí thấp nhƣng
vẫn đảm bảo đƣợc chất lƣợng phần mềm trƣớc khi bàn giao sản phẩm. Hình
1.1 mô tả vị trí của kiểm thử phần mềm trong quy trình phát triển phần mềm.
Trong quy trình này, kiểm thử phần mềm đƣợc tiến hành sau khi cài đặt xong
các đơn vị (unit) hoặc tiến hành tích hợp hệ thống và kiểm thử chấp nhận.
Hình 1.1. Giai đoạn kiểm thử trong quy trình phát triển phần mềm
Phân tích
Thiết kế
Mã hóa
KIỂM
THỬ
Bàn giao
SP
Kế hoạch kiểm thử
Các trƣờng hợp kiểm thử
Dữ liệu kiểm thử
Các báo cáo
kiểm thử
Luận văn cao học Dương Thị Phượng
- 10 -
1.2. Quy trình kiểm thử phần mềm
Hình 1.2. Quy trình kiểm thử phần mềm
Qui trình kiểm thử phần mềm chứa các bƣớc cơ bản nhƣ mô tả trong
hình 1.2. Dƣới đây là mô tả chi tiết nội dung của các bƣớc trên.
- Lập kế hoạch kiểm thử. Bƣớc đầu tiên là lập kế hoạch cho tất cả các
hoạt động sẽ đƣợc thực hiện và các phƣơng pháp đƣợc sử dụng. Các
chuẩn IEEE 1012-1986 bao gồm các thông tin về tác giả chuẩn bị kế
hoạch, danh sách liệt kê của kế hoạch kiểm thử.
- Thiết kế các ca kiểm thử. Các ca kiểm thử là các đặc tả đầu vào cho
kiểm thử và đầu ra mong đợi của hệ thống cùng với các câu lệnh đƣợc
kiểm thử. Có một vài phƣơng pháp thiết kế ca kiểm thử và các qui tắc
từ các nhà thiết kế kiểm thử có kinh nghiệm. Tuy nhiên, có hai chiến
lƣợc kiểm thử cơ bản;
+ Phƣơng pháp kiểm thử hộp đen để kiểm thử dựa trên chức năng.
Phƣơng pháp này có khả năng phát hiện ra các lỗi/khiếm khuyết
do thiếu sót các chức năng của hệ thống.
Kết quả
kiểm thử
Thiết kế các
ca kiểm thử
Chuẩn bị dữ
liệu kiểm
thử
Chạy
chƣơng trình
với dữ liệu
kiểm thử
So sánh các
kết quả với
các trƣờng
hợp kiểm thử
Các ca
kiểm thử
Dữ liệu
kiểm thử
Báo cáo
kiểm thử
Lập kế
hoạch kiểm
thử
Kế hoạch
kiểm thử
Yêu cầu, mã
nguồn
Nhật ký
Luận văn cao học Dương Thị Phượng
- 11 -
+ Phƣơng pháp kiểm thử hộp trắng để kiểm thử cấu trúc bên trong
của chƣơng trình. Phƣơng pháp này cho phép phát hiện các lỗi
tiềm năng mà rất khó phát hiện bởi phƣơng pháp kiểm thử hộp
đen.
+ Giống nhƣ nguyên lý tảng băng trôi, phƣơng pháp kiểm thử hộp
đen chỉ phát hiện ra đƣợc các lỗi ứng với phần nổi của tảng băng
trong khi phƣơng pháp kiểm thử hộp trắng cho phép phát hiện các
lỗi ứng với phần chìm của nó.
- Xử lý đo lƣờng kiểm thử bằng cách thu thập dữ liệu. Ở đây, ngƣời kiểm
thử không thể trực tiếp cải tiến chƣơng trình mà họ chỉ có thể đánh giá
nó.
- Đánh giá sản phẩm phần mềm để xác nhận sản phẩm có thể sẵn sàng
phát hành đƣợc chƣa? Đƣa ra báo cáo kiểm thử để hoàn thành quá trình
kiểm thử.
Luận văn cao học Dương Thị Phượng
- 12 -
CHƯƠNG 2
PHƯƠNG PHÁP PHÂN HOẠCH
TRONG KIỂM THỬ HỘP ĐEN
2.1. Phƣơng pháp kiểm thử dựa trên phân hoạch tƣơng đƣơng
Theo lý thuyết tập hợp và logic của tác giả Hoàng Xuân Sính - NXB
Giáo dục – 1999, phƣơng pháp phân hoạch tƣơng đƣơng đƣợc định nghĩa nhƣ
sau:
Quan hệ trên hai tập A và B là một tập con của tích đề các A B,
nghĩa là a b trong đó a A và b B.
Quan hệ có thể đƣợc định nghĩa trên chính tập A, tức là khi B = A.
Quan hệ trên tập A gọi là phản xạ nếu a a với aA
Quan hệ trên tập A gọi là đối xứng nếu a b b a với a, bA
Quan hệ trên tập A gọi là bắc cầu nếu a b và b c a c với
a,b,c A
Một quan hệ có tính phản xạ, đối xứng và bắc cầu gọi là quan hệ
tƣơng đƣơng. Chẳng hạn quan hệ “=” trên tập N (số nguyên) là quan
hệ tƣơng đƣơng nhƣng quan hệ “>” trên tập N thì không phải.
Một quan hệ tƣơng đƣơng phân hoạch tập hợp thành các lớp tƣơng
đƣơng rời rạc. Chẳng hạn quan hệ =(a,b): a, b N, a+b là số chẵn
có hai phân hoạch {0, 2, 4, …} và {1, 3, 5, …}.
Nhƣ vậy dựa vào bản chất của toán học nói trên, trong kiểm thử phần
mềm ngƣời ta đã áp dụng để đƣa ra phƣơng pháp "Phân hoạch tƣơng đƣơng".
Phƣơng pháp phân hoạch tƣơng đƣơng trong kiểm thử phần mềm đƣợc thực
hiện nhƣ sau: Các lớp tƣơng đƣơng đƣợc nhận dạng bằng cách lấy mỗi điều
kiện đầu vào (thông thƣờng là một câu lệnh hoặc một cụm từ trong đặc tả) và
Luận văn cao học Dương Thị Phượng
- 13 -
phân hoạch nó thành hai hoặc nhiều nhóm. Các lớp tƣơng đƣơng biểu diễn
một tập các trạng thái hợp lệ hoặc không hợp lệ cho điều kiện đầu vào. Điều
kiện đầu vào là giá trị số xác định, hoặc miền giá trị, tập giá trị có liên quan,
hoặc điều kiện logic. Để làm điều này, chúng ta sử dụng bảng liệt kê các lớp
tƣơng đƣơng.
Bảng 2.1 - Mẫu bảng liệt kê các lớp tƣơng đƣơng
Điều kiện vào/ra
Các lớp tƣơng đƣơng
hợp lệ
Các lớp tƣơng đƣơng
không hợp lệ
Các lớp tƣơng đƣơng có thể đƣợc định nghĩa theo các nguyên tắc:
1. Nếu điều kiện đầu vào xác định một khoảng giá trị, thì phân hoạch
thành một lớp tƣơng đƣơng hợp lệ và một lớp tƣơng đƣơng không hợp
lệ. Chẳng hạn, nếu đầu vào x nằm trong khoảng [0,100], lớp hợp lệ là
(0 <= x <= 100), các lớp không hợp lệ là (x < 0) và (x > 100).
2. Nếu điều kiện đầu vào yêu cầu một giá trị xác định, phân hoạch thành
một lớp tƣơng đƣơng hợp lệ và hai lớp tƣơng đƣơng không hợp lệ.
Chẳng hạn, nếu đầu vào x=5, thì lớp hợp lệ là (x= 5), các lớp không
hợp lệ là (x <5) và (x >5).
3. Nếu điều kiện đầu vào xác định một phần tử của tập hợp, thì phân
hoạch thành một lớp tƣơng đƣơng hợp lệ và một lớp tƣơng đƣơng
không hợp lệ. Chẳng hạn, nếu đầu vào x thuộc tập các giá trị tháng
trong năm, Months = {“Jan”, …, “Dec”}, thì lớp tƣơng đƣơng hợp lệ là
(x Months) và lớp tƣơng đƣơng không hợp lệ là (x Months).
4. Nếu điều kiện đầu vào là Boolean, thì phân hoạch thành một lớp tƣơng
đƣơng hợp lệ và một lớp tƣơng đƣơng không hợp lệ tƣơng ứng với hai
trạng thái True và False.
Luận văn cao học Dương Thị Phượng
- 14 -
Ngoài ra, một nguyên tắc thứ năm đƣợc bổ sung là sử dụng khả năng
phán đoán, kinh nghiệm và trực giác của ngƣời kiểm thử.
Cơ sở của việc phân chia miền dữ liệu đầu vào thành các lớp tƣơng
đƣơng là vì dữ liệu trong một lớp tƣơng đƣơng tác động nhƣ nhau lên chƣơng
trình, tạo ra cùng một trạng thái đúng hay sai của chƣơng trình, tức là các
phần tử trong cùng một lớp tƣơng đƣơng sẽ có cùng tính chất và thuộc tính
[4]. Giả sử các tập con A
1
, A
2
, A
3
… của tập X tạo nên một phân hoạch của
X, nếu:
)(
1
XA
i
n
i
và
)(
ji
AA
= và (A
i
)
Hình 2.1 - Nguyên tắc phân hoạch tập hợp.
Công thức mô tả trong hình 2.1 cho chúng ta thấy rằng, để tránh việc đƣa
ra các lớp tƣơng đƣơng không hợp lệ tức là thực hiện phân hoạch tƣơng
đƣơng không chính xác, cần chú ý một số nguyên tắc sau: Các lớp phân hoạch
con là những lớp hoàn toàn độc lập tức là hai lớp tƣơng đƣơng bất kì không
đƣợc có phần tử chung giao nhau. Khi chúng ta thực hiện phân lớp tƣơng
đƣơng thì không để tồn tại một lớp con là tập rỗng. Hợp của các lớp con phải
chứa toàn bộ các phần tử của tập ban đầu để đảm bảo tính đầy đủ của dữ liệu
sau khi phân lớp tƣơng đƣơng. Việc thiết kế ca kiểm thử cho phân lớp tƣơng
đƣơng dựa trên sự đánh giá về các lớp tƣơng đƣơng với một điều kiện vào.
Xác định các trường hợp kiểm thử
Bƣớc thứ hai trong phƣơng pháp phân hoạch tƣơng đƣơng là thiết kế các
ca kiểm thử (sinh test cases) dựa trên sự ƣớc lƣợng của các lớp tƣơng đƣơng
cho miền đầu vào. Tiến trình này đƣợc thực hiện nhƣ sau:
1. Gán một giá trị duy nhất cho mỗi lớp tƣơng đƣơng.
Luận văn cao học Dương Thị Phượng
- 15 -
2. Đến khi tất cả các lớp tƣơng đƣơng hợp lệ đƣợc phủ bởi các trƣờng
hợp kiểm thử thì viết một trƣờng hợp kiểm thử mới phủ nhiều nhất
có thể các lớp tƣơng đƣơng hợp lệ chƣa đƣợc phủ.
3. Đến khi tất cả các lớp tƣơng đƣơng không hợp lệ đƣợc phủ bởi các
trƣờng hợp kiểm thử thì hãy viết các trƣờng hợp kiểm thử mới sao
cho mỗi trƣờng hợp kiểm thử mới chỉ phủ duy nhất một lớp tƣơng
đƣơng không hợp lệ chƣa đƣợc phủ.
Các trƣờng hợp không hợp lệ đƣợc phủ bởi các trƣờng hợp kiểm thử
riêng biệt do việc kiểm tra đầu vào có lỗi này sẽ bị che hoặc bỏ sót việc kiểm
tra đầu vào có lỗi khác.
Ví dụ 1: Sinh các ca kiểm thử cho một chƣơng trình thống kê danh sách
kết quả các thí sinh thi cao học gồm:
- Dữ liệu đầu vào là 3 đầu điểm:
+ D1 - điểm môn 1;
+ D2 - điểm môn 2;
+ D3 - điểm môn 3.
- Kết quả trả về chia thành 3 dạng: "Dữ liệu sai"; "Đỗ"; "Trƣợt".
Trong đó: D1, D2 [0, 10]; D3 [0, 100]
- Kết quả trả về mong muốn:
"Dữ liệu sai" nếu: D1, D2 [0, 10]; D3 [0, 100]
"Đỗ" nếu: D1, D2 [5, 10]; D3 [50, 100]
"Trƣợt" nếu: D1, D2 [0, 5); D3 [0, 50)
Áp dụng “Phân hoạch tƣơng đƣơng” theo lý thuyết tập hợp trong toán
học ta chia điểm của mỗi môn thành từng phân hoạch nhƣ hình 2.2:
Luận văn cao học Dương Thị Phượng
- 16 -
Hình 2.2 - Phân lớp tƣơng đƣơng cho bài toán điểm thi cao học
Bảng 2.2. Bảng liệt kê các lớp tƣơng đƣơng cho bài toán điểm thi cao học
Điều kiện vào/ra
Các lớp tƣơng đƣơng hợp lệ
Các lớp tƣơng đƣơng không
hợp lệ
Điểm môn 1 (D1)
0 ≤ D1< 5 ; 5≤ D1≤ 10
D1 < 0 ; D1 >10
Điểm môn 2 (D2)
0 ≤ D2< 5 ; 5≤ D2≤ 10
D1 < 0 ; D1 >10
Điểm môn 3 (D3)
0 ≤ D1< 50 ; 50≤ D1≤ 100
D1 < 0 ; D1 >100
Giả sử mỗi phân hoạch (lớp tƣơng đƣơng hợp lệ và không hợp lệ) ta lấy
01 giá trị bất kỳ theo hình 2.3.
Hình 2.3 - Chọn giá trị tại mỗi lớp tƣơng đƣơng
cho bài toán điểm thi cao học
4 phân hoạch
4 phân hoạch
4 phân hoạch
0
10
00
0
5
0
10
5
D1
D2
0
100
50
D3
0
10
5
0
10
5
D1
D2
-10
3
7
12
-11
4
8
15
0
100
50
D3
-7
20
85
140
Luận văn cao học Dương Thị Phượng
- 17 -
2.1.1 Phân lớp tƣơng đƣơng mạnh
Với phƣơng pháp này, sau khi phân hoạch miền giá trị của các biến đầu
vào thành các lớp tƣơng đƣơng thì việc sinh các trƣờng hợp kiểm thử thực
hiện theo nguyên tắc mỗi ca kiểm thử là một phần tử của tích đề các của các
phân hoạch con đó. Do đó số lƣợng ca kiểm thử sinh ra chính là số phần tử
của tích đề các này vậy số ca kiểm thử đƣợc sinh ra trong ví dụ là:
4 x 4 x 4 = 64 ca kiểm thử
Bảng 2.3. Danh sách ca kiểm thử đƣợc sinh theo phân lớp tƣơng đƣơng mạnh
TC_ID
Đầu vào
Đầu ra mong muốn
D1
D2
D3
TC_01
-10
-11
-7
Dữ liệu sai
TC_02
-10
-11
20
Dữ liệu sai
TC_03
-10
-11
85
Dữ liệu sai
TC_04
-10
-11
140
Dữ liệu sai
TC_05
-10
4
-7
Dữ liệu sai
TC_06
-10
4
20
Dữ liệu sai
TC_07
-10
4
85
Dữ liệu sai
TC_17
3
-11
-7
Dữ liệu sai
TC_18
3
-11
20
Dữ liệu sai
TC_19
3
-11
85
Dữ liệu sai
TC_20
3
-11
140
Dữ liệu sai
TC_21
3
4
-7
Dữ liệu sai
TC_22
3
4
20
Trƣợt
TC_23
3
4
85
Trƣợt
…
…
…
…
…
TC_43
7
8
85
Đỗ
…
…
…
…
…
TC_59
12
8
85
Dữ liệu sai
TC_60
12
8
140
Dữ liệu sai
TC_62
12
15
20
Dữ liệu sai
TC_63
12
15
85
Dữ liệu sai
TC_64
12
15
140
Dữ liệu sai
Luận văn cao học Dương Thị Phượng
- 18 -
Ở trƣờng hợp phân lớp tƣơng đƣơng mạnh sẽ gần nhƣ bắt lỗi đƣợc tất cả
các trƣờng hợp và đầu ra thực tế đúng nhƣ đầu ra mong muốn, tuy nhiên số
lƣợt các ca kiểm thử tƣơng đối nhiều.
2.1.2 Phân lớp tƣơng đƣơng yếu
Phân lớp tƣơng đƣơng yếu là một phƣơng pháp hay đƣợc sử dụng khi
lựa chọn phân lớp tƣơng đƣơng. Phƣơng pháp này vẫn dựa trên nguyên tắc
chung của phân lớp tƣơng đƣơng, tức là chúng ta cũng chia miền dữ liệu của
các biến đầu vào thành các lớp con tƣơng đƣơng. Việc sinh các trƣờng hợp
kiểm thử trong phân lớp tƣơng đƣơng yếu phải đảm bảo mỗi lớp con đƣợc
kiểm tra ít nhất một lần. Điều này có nghĩa là trong tập ca kiểm thử sinh ra thì
giá trị của phần tử đại diện cho mỗi lớp con phải đƣợc kiểm thử ít nhất một
lần. Nhƣ vậy, số trƣờng hợp kiểm thử trong phân lớp tƣơng đƣơng yếu bằng
giá trị lớn nhất của số phân hoạch biến đầu vào hay chính là lực lƣợng lớn
nhất của phân hoạch.
Theo nguyên tắc của phân lớp tƣơng đƣơng yếu, ở ví dụ 1 chúng ta xây
dựng đƣợc 04 ca kiểm thử đƣợc biểu diễn trong bảng 2.4 dƣới đây.
Bảng 2.4. Danh sách các ca kiểm thử sinh ra theo phân lớp tƣơng đƣơng yếu
TC_ID
Đầu vào (Input)
Đầu ra mong
muốn
D1
D2
D3
TC_01
-10
-11
-7
Dữ liệu sai
TC_02
3
4
20
Trƣợt
TC_03
7
8
85
Đỗ
TC_04
12
15
140
Dữ liệu sai
Ở trƣờng hợp phân lớp tƣơng đƣơng yếu bắt đƣợc các lỗi của chƣơng
trình và trả về đầu ra đúng nhƣ đầu ra mong muốn, số lƣợt các ca kiểm thử ít,
tuy nhiên chúng ta không thể khẳng định rằng đã bắt hầu hết các lỗi chƣa.
Chính vì vậy phƣơng pháp này gần nhƣ không dùng.
Luận văn cao học Dương Thị Phượng
- 19 -
2.1.3 Phân lớp tƣơng đƣơng truyền thống
Phân lớp tƣơng đƣơng truyền thống là phƣơng pháp đơn giản nhất trong
các kỹ thuật kiểm thử theo phân lớp tƣơng đƣơng. Với phƣơng pháp này thì
việc phân lớp tƣơng đƣơng cho miền giá trị của các biến đầu vào chỉ cần quan
tâm 02 lớp sau: Lớp tƣơng đƣơng hợp lệ (chứa dữ liệu của biến đầu vào nằm
trong miền hợp lệ) và lớp tƣơng đƣơng không hợp lệ (chứa dữ liệu của biến
đầu vào nằm trong miền không hợp lệ). Ý tƣởng của việc sinh ca kiểm thử
cho phƣơng pháp này thực hiện theo nguyên tắc: Khi chúng ta xây dựng ca
kiểm thử cho trƣờng hợp đúng thì chỉ cần lấy các giá trị biến đầu vào nằm
trong miền hợp lệ. Tức là ca kiểm thử sinh ra với điều kiện giá trị đầu vào của
tất cả các biến đều nằm trong miền hợp lệ. Khi tạo ca kiểm thử cho trƣờng
hợp sai thì chỉ cần lấy một trong các biến đầu vào có giá trị không nằm trong
miền hợp lệ. Tức là với các biến đầu vào không hợp lệ, mỗi ca kiểm thử sẽ
bao gồm một biến đầu vào có giá trị nằm trong miền không hợp lệ và các biến
còn lại có giá trị nằm trong miền hợp lệ.
Số lƣợng ca kiểm thử theo phân lớp tƣơng đƣơng truyền thống = số
lƣợng ca kiểm thử theo phân lớp tƣơng đƣơng mạnh - số lƣợng ca kiểm thử
có trên 2 đầu vào sai và bằng những ca kiểm thử có dƣới một đầu vào sai.
Với "Ví dụ 1" ta sẽ sinh ra đƣợc 28 ca kiểm thử đƣợc biểu diễn trong
bảng 2.5 dƣới đây.
Bảng 2.5. Danh sách các ca kiểm thử sinh ra theo
phân lớp tƣơng đƣơng truyền thống
TC_ID
Đầu vào (Input)
Đầu ra mong muốn
D1
D2
D3
TC_01
-10
4
20
Dữ liệu sai
TC_02
-10
4
85
Dữ liệu sai
TC_03
-10
8
20
Dữ liệu sai
Luận văn cao học Dương Thị Phượng
- 20 -
TC_ID
Đầu vào (Input)
Đầu ra mong muốn
D1
D2
D3
TC_04
-10
8
85
Dữ liệu sai
TC_05
3
-11
20
Dữ liệu sai
TC_06
3
-11
85
Dữ liệu sai
TC_07
3
4
-7
Dữ liệu sai
TC_08
3
4
140
Dữ liệu sai
TC_09
3
8
-7
Dữ liệu sai
TC_10
3
8
85
Trƣợt
TC_11
3
8
140
Dữ liệu sai
TC_12
3
15
20
Dữ liệu sai
TC_13
3
15
85
Dữ liệu sai
TC_14
7
-11
20
Dữ liệu sai
TC_15
7
-11
85
Dữ liệu sai
TC_16
7
4
-7
Dữ liệu sai
TC_17
7
4
85
Trƣợt
TC_18
7
4
140
Dữ liệu sai
TC_19
7
8
-7
Dữ liệu sai
TC_20
7
8
20
Trƣợt
TC_21
7
8
85
Đỗ
TC_22
7
8
140
Dữ liệu sai
TC_23
7
15
20
Dữ liệu sai
TC_24
7
15
85
Dữ liệu sai
TC_25
12
4
20
Dữ liệu sai
TC_26
12
4
85
Dữ liệu sai
TC_27
12
8
20
Dữ liệu sai
TC_28
12
8
85
Dữ liệu sai
Đối với phân lớp tƣơng đƣơng truyền thống khả năng phát hiện lỗi tƣơng
đƣơng với phân lớp tƣơng đƣơng mạnh, song số lƣợng các ca kiểm thử trong
phân lớp tƣơng đƣơng truyền thống ít hơn rất nhiều so với số lƣợng các ca
kiểm thử trong phân lớp tƣơng đƣơng mạnh. Ngƣời kiểm thử nên chọn
phƣơng pháp này.
Luận văn cao học Dương Thị Phượng
- 21 -
2.2 Ứng dụng
Với ví dụ 1 nhƣ đã nêu ở mục 2.1, tôi xây dựng một chƣơng trình thực tế
chạy thử qua tất cả các ca kiểm thử đã đƣợc sinh ra ở cả ba phƣơng pháp:
phƣơng pháp phân lớp tƣơng đƣơng mạnh, phƣơng pháp phân lớp tƣơng
đƣơng yếu, phƣơng pháp phân lớp tƣơng đƣơng truyền thống đã trình bày ở
trên nhằm kiểm tra việc bắt lỗi chƣơng trình.
Hình 2.4 - Giao diện màn hình nhập điểm thi cao học
Khảo sát "Chƣơng trình nhập điểm thi cao học" đƣợc viết trên ngôn ngữ
Visual Studio.
2.2.1 Kiểm thử chƣơng trình nhập điểm thi cao học
2.2.1.1. Phương pháp phân lớp tương đương mạnh
Luận văn cao học Dương Thị Phượng
- 22 -
Ta có kết quả sau khi chạy qua tất cả các ca kiểm thử đƣợc sinh ra theo
phƣơng pháp phân lớp tƣơng đƣơng mạnh: đầu ra thực tế đã không đúng với
đầu ra mong muốn là 4 trƣờng hợp NOT OK (Bảng 2.6). Nhƣ vậy kiểm thử
viên có thể khẳng định rằng chƣơng trình "Nhập điểm thi cao học" có lỗi.
Bảng 2.6. Kết quả kiểm thử
với trƣờng hợp phân lớp tƣơng đƣơng mạnh
TC_ID
Dữ liệu vào
Đầu ra thực tế
Đầu ra mong
muốn
Kết quả
D1
D2
D3
TC_01
-10
-11
-7
Dữ liệu sai
Dữ liệu sai
Ok
TC_02
-10
-11
20
Dữ liệu sai
Dữ liệu sai
Ok
TC_03
-10
-11
85
Dữ liệu sai
Dữ liệu sai
Ok
TC_04
-10
-11
140
Dữ liệu sai
Dữ liệu sai
Ok
TC_05
-10
4
-7
Dữ liệu sai
Dữ liệu sai
Ok
TC_06
-10
4
20
Dữ liệu sai
Dữ liệu sai
Ok
TC_07
-10
4
85
Dữ liệu sai
Dữ liệu sai
Ok
TC_08
-10
4
140
Dữ liệu sai
Dữ liệu sai
Ok
TC_09
-10
8
-7
Dữ liệu sai
Dữ liệu sai
Ok
TC_10
-10
8
20
Dữ liệu sai
Dữ liệu sai
Ok
TC_11
-10
8
85
Dữ liệu sai
Dữ liệu sai
Ok
TC_12
-10
8
140
Dữ liệu sai
Dữ liệu sai
Ok
TC_13
-10
15
-7
Dữ liệu sai
Dữ liệu sai
Ok
TC_14
-10
15
20
Dữ liệu sai
Dữ liệu sai
Ok
TC_15
-10
15
85
Dữ liệu sai
Dữ liệu sai
Ok
TC_16
-10
15
140
Dữ liệu sai
Dữ liệu sai
Ok
TC_17
3
-11
-7
Dữ liệu sai
Dữ liệu sai
Ok
TC_18
3
-11
20
Dữ liệu sai
Dữ liệu sai
Ok
TC_19
3
-11
85
Dữ liệu sai
Dữ liệu sai
Ok
TC_20
3
-11
140
Dữ liệu sai
Dữ liệu sai
Ok
TC_21
3
4
-7
Trƣợt
Dữ liệu sai
Not ok
TC_22
3
4
20
Trƣợt
Trƣợt
Ok
TC_23
3
4
85
Trƣợt
Trƣợt
Ok
TC_24
3
4
140
Dữ liệu sai
Dữ liệu sai
Ok
TC_25
3
8
-7
Trƣợt
Dữ liệu sai
Not ok
TC_26
3
8
20
Trƣợt
Trƣợt
Ok
TC_27
3
8
85
Trƣợt
Trƣợt
Ok
TC_28
3
8
140
Dữ liệu sai
Dữ liệu sai
Ok
Luận văn cao học Dương Thị Phượng
- 23 -
TC_ID
Dữ liệu vào
Đầu ra thực tế
Đầu ra mong
muốn
Kết quả
D1
D2
D3
TC_29
3
15
-7
Dữ liệu sai
Dữ liệu sai
Ok
TC_30
3
15
20
Dữ liệu sai
Dữ liệu sai
Ok
TC_31
3
15
85
Dữ liệu sai
Dữ liệu sai
Ok
TC_32
3
15
140
Dữ liệu sai
Dữ liệu sai
Ok
TC_33
7
-11
-7
Dữ liệu sai
Dữ liệu sai
Ok
TC_34
7
-11
20
Dữ liệu sai
Dữ liệu sai
Ok
TC_35
7
-11
85
Dữ liệu sai
Dữ liệu sai
Ok
TC_36
7
-11
140
Dữ liệu sai
Dữ liệu sai
Ok
TC_37
7
4
-7
Trƣợt
Dữ liệu sai
Not ok
TC_38
7
4
20
Trƣợt
Trƣợt
Ok
TC_39
7
4
85
Trƣợt
Trƣợt
Ok
TC_40
7
4
140
Dữ liệu sai
Dữ liệu sai
Ok
TC_41
7
8
-7
Trƣợt
Dữ liệu sai
Not ok
TC_42
7
8
20
Trƣợt
Trƣợt
Ok
TC_43
7
8
85
Đỗ
Đỗ
Ok
TC_44
7
8
140
Dữ liệu sai
Dữ liệu sai
Ok
TC_45
7
15
-7
Dữ liệu sai
Dữ liệu sai
Ok
TC_46
7
15
20
Dữ liệu sai
Dữ liệu sai
Ok
TC_47
7
15
85
Dữ liệu sai
Dữ liệu sai
Ok
TC_48
7
15
140
Dữ liệu sai
Dữ liệu sai
Ok
TC_49
12
-11
-7
Dữ liệu sai
Dữ liệu sai
Ok
TC_50
12
-11
20
Dữ liệu sai
Dữ liệu sai
Ok
TC_51
12
-11
85
Dữ liệu sai
Dữ liệu sai
Ok
TC_52
12
-11
140
Dữ liệu sai
Dữ liệu sai
Ok
TC_53
12
4
-7
Dữ liệu sai
Dữ liệu sai
Ok
TC_54
12
4
20
Dữ liệu sai
Dữ liệu sai
Ok
TC_55
12
4
85
Dữ liệu sai
Dữ liệu sai
Ok
TC_56
12
4
140
Dữ liệu sai
Dữ liệu sai
Ok
TC_57
12
8
-7
Dữ liệu sai
Dữ liệu sai
Ok
TC_58
12
8
20
Dữ liệu sai
Dữ liệu sai
Ok
TC_59
12
8
85
Dữ liệu sai
Dữ liệu sai
Ok
TC_60
12
8
140
Dữ liệu sai
Dữ liệu sai
Ok
TC_61
12
15
-7
Dữ liệu sai
Dữ liệu sai
Ok
TC_62
12
15
20
Dữ liệu sai
Dữ liệu sai
Ok
TC_63
12
15
85
Dữ liệu sai
Dữ liệu sai
Ok
TC_64
12
15
140
Dữ liệu sai
Dữ liệu sai
Ok