Professional Documents
Culture Documents
07 Regession Testing
07 Regession Testing
INT3117
Bài giảng 07: Regession Testing
1
Phần mềm liên tục tiến hoá
2
Phần mềm liên tục tiến hoá
• Bất kỳ phần mềm thành công nào chắc chắn sẽ được duy trì
• Linux core có tới 1.1M thay đổi trong vòng 7 năm gần đây
• Chromium có 1.2M thay đổi trong 3 năm gần đây
3
Làm sao để kiểm thử một cách hữu hiệu và hiệu quả
các khi đang phát triển phần mềm?
4
Làm sao để kiểm thử một cách hữu hiệu và hiệu quả
các khi đang phát triển phần mềm?
5
Kiểm thử hồi quy
• Sử dụng lại các tests một cách hiệu quả và hiệu quả khi kiểm tra các thay
đổi:
• Kiểm thử có chọn lọc (Test selection)
• Chỉ thực thi các tests ảnh hưởng bởi sự thay đổi
6
Trong buổi học hôm nay
7
Kiểm thử có chọn lọc (Regession test selection - RTS)
• RTS nhằm mục đích tăng tốc độ kiểm thử hồi quy bằng cách chỉ chạy lại
các kiểm thử bị ảnh hưởng bởi thay đổi mã nguồn
• Kỹ thuật RTS là an toàn nếu chọn tất cả các tests có hành vi có thể bị ảnh
hưởng bởi thay đổi mã nguồn
• Không chạy bất kỳ test nào trong số đó có thể bỏ sót các hệ quả của việc thay đổi mã nguồn
8
Intra-procedural CFG
9
Intra-procedural CFG
10
Chương trình thay đổi
11
Intra-procedural RTS
if(cond1) if(cond1)
res++ res+=2
if(cond1) if(cond1)
if(cond1) if(cond1)
res++ res+=2
if(cond1) if(cond1)
Kỹ thuật tốt có thể giúp tiết
t1=(true, false) t1=(true, false)
t2=(false, true)
kiệm 67% chi phí kiểm thử t2=(false, true)
res-- phiên bản mới res--
t3=(false, false) t3=(false, false)
T1 T2
• Truy vết khả năng phủ chương trình cho tường test của V1
• Xác định sự khác nhau trên CFG của 2 chương trình V1 và V2
• Đánh dấu các cạnh nguy hiểm (dangerous edges) trên CFG
• Cạnh nguy hiểm là cạnh dẫn đến sự thực thi khác nhau giữa V1 và V2
• Tất cả tests phủ cạnh nguy hiểm trên V1 được lựa chọn để test V2
14
Xác định cạnh nguy hiểm
15
Inter-procedural CFG: example
16
Inter-procedural CFG: example
17
Inter-procedural CFG: example
18
Inter-procedural CFG: example
19
Inter-procedural RTS
20
Inter-procedural CFG
21
Inter-procedural CFG
22
Kiểm thử có tính ưu tiên (Test prioritization)
• Sắp xếp lại thứ tự ưu tiên của việc thực thi nhằm tối đa một số mục tiêu
• Thường tối đa khả năng tìm ra tỉ lệ phát hiện bug (bug detection rate)
• i.e., Phát hiện ra bug nhanh ra sao
23
Phương pháp xác định ưu tiên
• Phương pháp “tổng” (total): lựa chọn test case phủ nhiều đơn vị (phương
thức, dòng lệnh, nhánh, đường, …) nhất là test được thực thi kế tiếp
• Phương pháp “bù” (additional): lựa chọn test case phủ nhiều đơn vị mà
chưa được phủ nhất là test được thực thi kế tiếp
24
Ví dụ: Phương pháp tổng
25
Ví dụ: Phương pháp tổng
26
Ví dụ: Phương pháp tổng
27
Ví dụ: Phương pháp bù
28
Ví dụ: Phương pháp bù
29
Ví dụ: Phương pháp bù
30
Kiểm thử hồi quy
• Sử dụng lại các tests một cách hiệu quả và hiệu quả khi kiểm tra các thay
đổi:
• Kiểm thử có chọn lọc (Test selection)
• Chỉ thực thi các tests ảnh hưởng bởi sự thay đổi
32
Buổi sau
34