You are on page 1of 33

KIỂM THỬ VÀ ĐẢM BẢO

CHẤT LƯỢNG PHẦN MỀM

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

• Các loại thay đổi phần mềm:


• Điều chỉnh (corrective)
• Thích ứng (adaptive)
• Hoàn hảo (perfective)
• Bảo vệ (preventive)

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?

• Salesforce: 50K test cases vào năm 2013


• Huawei tốn vài tuần để chạy toàn bộ tests
• Kỹ sư Google thấy rằng thời gian kiểm
thử của họ tăng theo hàm bậc hai

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

• Kiểm thử có tính ưu tiên (Test prioritization)


• Thay đổi thứ tự kiểm thử để nhanh chóng phát hiện lỗi

• Giảm thiểu kiểm thử (Test reduction)


• Loại bỏ các tests thừa

6
Trong buổi học hôm nay

• Kiểm thử hồi quy: Lựa chọn test


• Kiểm thử hồi quy: Ưu tiên test
• Kiểm thử hồi quy: Giảm thiểu test

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)

t1=(true, false) t1=(true, false)


t2=(false, true) t2=(false, true)
res-- res--
t3=(false, false) t3=(false, false)
T1 T2

return res return res


12
Intra-procedural RTS

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

return res return res


13
Các bước lựa chọn test

• 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

• Tỉ lệ phát hiện bug được tính bằng


• Tỉ lệ lỗi trung bình được phát hiện (Average Percentage of Faults Detected - APFD)

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

• Kiểm thử có tính ưu tiên (Test prioritization)


• Thay đổi thứ tự kiểm thử để nhanh chóng phát hiện lỗi

• Giảm thiểu kiểm thử (Test reduction)


• Loại bỏ các tests thừa

32
Buổi sau

• Kiểm tra giữa kỳ


• Thời gian: 90 – 120 phút (chưa quyết định)
• Hình thức: làm trên giấy được chuẩn bị sẵn, không dùng tài liệu
• Nội dung:
• Khái niệm cơ bản
• JUnit
• Black-box testing
• White-box testing
• Regression testing

34

You might also like