Bài giảng Kiểm thử phần mềm - Bài 5: Các kỹ thuật kiểm thử cung cấp cho người học các kiến thức về kỹ thuật kiểm thử hộp trắng bao gồm: Basis path testing, control flow/coverage testing, data flow testing. Mời các bạn cùng tham khảo.
Trang 1ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
GV: ThS Nguyễn Thị Thanh Trúc Khoa: Công nghệ Phần mềm
Email: trucntt@uit.edu.vn
KIỂM THỬ PHẦN MỀM
(Software Testing)
Trang 2Bài 5: Các kỹ thuật kiểm thử
• Test tĩnh (Static Verification)
• Test động (Dynamic Testing)
• 5.1 Các kỹ thuật kiểm thử hộp đen
• 5.2 Các kỹ thuật kiểm thử hộp trắng
Trang 3Các kỹ thuật kiểm thử
• Test tĩnh (Static Verification)
– Thực hiện kiểm chứng mà không cần thực thi chương trình
– Kiểm tra tính đúng đắn của các tài liệu có liên quan được tạo ra trong quá trình xây dựng ứng dụng
– Đạt được sự nhất quán và hiểu rõ hơn về hệ thống
– Giảm thời gian lập trình, thời gian và chi phí test,…
• Test động (Dynamic Testing)
Trang 4Dynamic Testing - Kiểm thử động
Structure-based
Error Guessing
Boundary Value Analysis
Equivalence Partitioning Specification-based
Trang 5Các kỹ thuật kiểm thử hộp trắng
• Basis Path Testing
• Control-flow/Coverage Testing
• Data-flow Testing
Trang 6Chiến lược kiểm thử hộp trắng
• Thiết kế test case dựa vào cấu trúc nội tại bên trong của đối tượng cần kiểm thử
• Đảm bảo tất cả các câu lệnh, các biểu thức điều kiện bên trong chương trình đều được thực hiện ít nhất một lần
Trang 7Khái niệm
• Các tên gọi khác: kiểm thử cấu trúc (structural testing),
kiểm thử hộp kính (glass box), kiểm thử rõ ràng (clear box testing)
• Đối tượng chính của kiểm thử hộp trắng là tập trung vào cấu trúc bên trong chương trình và tìm ra tất cả những lỗi bên trong chương trình
• Việc kiểm tra tập trung chủ yếu vào:
– Cấu trúc chương trình: Những câu lệnh và các nhánh, các loại đường dẫn chương trình
Trang 8Ưu, nhược điểm
Trang 9Nhược điểm
• 1 Không đủ khả năng kiểm thử hết các đường thi hành
vi số lượng quá nhiều
• 2 Kiểm thử bằng hộp trắng không thể đảm bảo rằng
chương trình đã tuân theo đặc tả
• 3 Không phát hiện ra chương trình sai do thiếu đường dẫn
• 4 Không phát hiện được lỗi do sai dữ liệu
• 5 Kiểm thử viên cần có các kỹ năng về lập trình để
hiểu và đánh giá được phần mềm Không may là hiện
Trang 10Các kỹ thuật kiểm thử hộp trắng
• Basis Path Testing
• Control-flow/Coverage Testing
• Data-flow Testing
Trang 11Basis Path Testing
• Được McCabe đưa ra vào năm 1976
• Là phương pháp thiết kế test case đảm bảo rằng tất cả các independent path trong một code module đều được thực thi ít nhất một lần
• Independent path: là bất kỳ path nào trong code mà
bổ sung vào ít nhất một tập các lệnh xử lý hay một biểu thức điều kiện (Pressman 2001)
Trang 12Các bước thực hiện
• Xây dựng đồ thị luồng điều khiển
• Tính toán độ phức tạp Cyclomatic
• Chọn ra tập path cơ sở cần test
• Phát sinh test case thực hiện kiểm tra từng path trong tập path cơ sở
Trang 13Xây dựng đồ thị luồng điều khiển
• Edge: đại diện cho một luồng điều khiển
• Node: đại diện cho một hoặc nhiều câu lệnh xử lý
• Predicate node: đại diện cho một biểu thức điều kiện
Trang 14• Một số cấu trúc luồng điều khiển cơ bản
Xây dựng đồ thị luồng điều khiển
Trang 15• Đồ thị luồng điều khiển từ một đoạn
chương trình
Xây dựng đồ thị luồng điều khiển
Trang 17Tính toán độ phức tạp Cyclomatic
Trang 18• Cách 2: Dựa vào số lượng Predicate
Node
– V(G) = Number of Predicate Nodes + 1
Tính toán độ phức tạp Cyclomatic
McCabe: V(G) = 6-5+2(1) = 3
Trang 19Tính toán độ phức tạp Cyclomatic
Trang 20Chọn ra tập path cơ sở cần test
Trang 21Phát sinh test case
Trang 22Độ phức tạp chu trình
• Độ phức tạp chu trình
– Là số đo sự phức tạp logic của chương trình
– Là số các đường đi độc lập cơ bản trong tập các con đường độc lập của một chương trình
– Là số đường độc lập nhỏ nhất phủ hết các cạnh của đồ thị luồng
– Số đo này là giới hạn trên của số ca kiểm thử cần phải tiến hành để đảm bảo rằng, tất cả các câu lệnh trong chương trình đều được thực hiện ít nhất một lần
Trang 23• V(G) = P + 1, P là số nút quyêt định
• Độ phức tạp của chu trình (Cyclomatic) C chính
là số đường thi hành tuyến tính độc lập của
TPPM cần kiểm thử
Trang 24Độ phức tạp của chu trình
Độ phức tạp của chu trình=7-6+2=3
Trang 25Chuyển sang đồ thị dòng tính độ
phức tạp
Độ phức tạp: C=9-8+2
Trang 26Ví dụ
Độ phức tạp của chu trình C=8-7+2=3
Trang 28Các cấp bao phủ kiểm thử
• Phủ kiểm thử (coverage): tỉ lệ các thành
phần thực sự được kiểm thử so với tổng thể các thành phần
• Các thành phần bao gồm: lệnh thực thi, điểm quyết định, điều kiện con hay sự kết hợp của chúng
• Độ phủ càng lớn thí độ tin cậy càng cao
Trang 29Các cấp bao phủ kiểm thử
• Phủ cấp 0: kiểm thử những gì có thể kiểm thử được, phần
còn lại để người dùng phát hiện và báo lại sau Đây là
kiểm thử không có trách nhiệm
• Phủ cấp 1: Bao phủ câu lệnh (statement coverage):
Các câu lệnh được thực hiện ít nhất 1 lần
• Phủ cấp 2: Bao phủ nhánh (branch coverage): tại các
điểm quyết định thì các nhánh đều được thực hiện ở cả hai phía T,F
• Phủ cấp 3: Bao phủ điều kiện(condition coverage): Các
điều kiện con của các điểm quyết định được thực hiện ít nhất 1 lần
Trang 30Control-flow/Coverage Testing
• Là kỹ thuật thiết kế test case đảm bảo “cover”
được tất cả các câu lệnh, biểu thức điều kiện trong code module cần test
• Có bốn tiêu chí đánh giá độ bao phủ
– Method Coverage ( phương thức )
– Statement Coverage ( câu lệnh )
– Decision/Branch Coverage ( biểu thức điều kiện ) – Condition Coverage ( biểu thức điều kiện đơn )
Trang 31Method Coverage
chương trình được gọi thực hiện bởi các test case
• Test case cần phải đạt được 100% method coverage
Trang 32Ví dụ - Method Coverage
• Xét đoạn chương trình
• Test case 1: foo (0,0,0,0,0)
Trang 33Vd: Đồ thị dòng
Trang 35Decision/Branch Coverage
• Tỷ lệ phần trăm các biểu thức điều kiện trong chương trình được ước lượng giá trị trả về (true, false) khi thực thi các test case
• Một biểu thức điều kiện (cho dù là single hay complex) phải được kiểm tra trong cả hai trường hợp giá trị của biểu thức là true hay false
• Đối với các hệ thống lớn, thường chỉ đạt từ 75%
Trang 36Decision/Branch Coverage
Đạt 75% coverage
Test case 3: foo (1,2,1,2,1) 100% coverage
Trang 37Condition Coverage
• Tỷ lệ phần trăm các biểu thức điều kiện đơn trong biểu thức điều kiện phức của chương trình được ước lượng giá trị trả về (true, false) khi thực thi các test case
• Ví dụ: 50% coverage
Trang 38• Thiết kế thêm Test case 4, 5 để đạt 100% coverage
Condition Coverage
Trang 39Data-flow Testing
khảo sát sự thay đổi trạng thái trong chu
kỳ sống của các biến trong chương trình
• Ví dụ: Một số pattern lỗi thường gặp
– Sử dụng biến mà chưa khai báo
– Sử dụng biến đã hủy trước đó
Trang 40Hệ thống ký hiệu trạng thái dữ liệu
Hệ thống ký hiệu
d defined, created, initialized
k killed, terminated, undefined
Trang 42Ví dụ
Trang 43Các chiến lược thiết kế test case
• All-du paths (ADUP)
• All-Uses (AU)
• All-p-uses (APU)
• All-c-uses (ACU)
• All-p-uses / Some-c-uses (APU+C)
• All-c-uses / Some-p-uses (ACU+P)
Trang 44Ví dụ
Trang 45Xét biến “Bill”
Trang 46Bảng mô tả biến “Bill”
Trang 47Xét biến “Usage”
Trang 48Bảng mô tả biến “Usage”
Trang 49Data-flow testing paths for each variable
Trang 50Mối quan hệ giữa các chiến lược data-flow test
Trang 51Các công cụ hỗ trợ kiểm thử
• Các công cụ hỗ trợ quản lý quá trình kiểm thử
• Các công cụ hỗ trợ thực hiện các kỹ thuật kiểm thử
– Công cụ kiểm thử hiệu năng (Performance)
– Công cụ kiểm thử chức năng (Functional)
– Công cụ kiểm thử bảo mật (Security)
Trang 52Các công cụ hỗ trợ quản lý
quy trình kiểm thử phần mềm (1)
• Các đối tượng cần quản lý của 1 công cụ kiểm thử PM
– Project
– User
– User Role
– Requirement
– Release: Phiên bản của project
– Test Plan: Kế hoạch test
– Test types: Các loại test
– Test cases: Các trường hợp test
– Teststep: Các bước thực hiện cho mỗi test case
– Result: Kết quả thực thi test
– Bug: Lỗi
– Reports: Các thông báo về tình trạng của tiến trình: Tình trạng lỗi, tiến triển của công việc: …
Trang 53• Các chức năng cần phải có
– Quản lý project
– Quản lý User
– Phân quyền User
– Quản lý requirement theo phiên bản
– Quản lý release
– Quản lý các thành phần của release: build, component,
– Quản lý testplan
– Quản lý testcase
– Cập nhật kết quả cho test case
Các công cụ hỗ trợ quản lý
quy trình kiểm thử phần mềm (2)
Trang 54Các công cụ hỗ trợ quản lý
quy trình kiểm thử phần mềm (3)
9563
Trang 55Công cụ kiểm thử hiệu năng
• Là một dạng kiểm tra tự động nhằm tìm ra những điểm “thắt cổ chai” của phần mềm, giúp cho người phát triển có những thay đổi thích hợp để tăng khả năng thực thi, tốc độ xử lý của phần mềm
• Giúp người kiểm tra xác định được những thông số ngưỡng của phần mềm, đề ra tiêu chuẩn cho những lần kiểm tra sau
• Thường được áp dụng đối với các PM được triển khai trên môi trường nhiều người dùng ( ví dụ: ứng dụng web )
• Kết quả mong đợi của việc kiểm thử hiệu năng phải được định nghĩa một cách rõ ràng
• Ví dụ:
– Số kết nối (session) đồng thời mà server có thể phục vụ
Trang 56Công cụ kiểm thử hiệu năng
Hammerhead has been used with Linux,
Trang 57Các công cụ hỗ trợ kiểm thử đơn vị
• Có rất nhiều công cụ kiểm thử đơn vị được viết bằng nhiều ngôn ngữ khác nhau
Trang 58Các công cụ hỗ trợ kiểm thử đơn vị
Trang 59Các công cụ hỗ trợ kiểm thử đơn vị
3 NUnit Addin for
5 csUnit
csUnit has been tested using the Microsoft NET framework 1.0 Service Pack 2 runtime on an Intel-compatible platform.
31483
6 NCover All 32-bit MS Windows (95/98/NT/2000/XP) 14264
7 VSNUnit All 32-bit MS Windows (95/98/NT/2000/XP) 8763
Trang 60Một sô công cụ hỗ trợ kiểm thử chức năng
1 Software Testing Automation Framework
6 Software Automation Framework Support All 32-bit MS Windows
Trang 61Các công cụ kiểm thử thương mại
Tool Vendor Name of testing suite or companion tools
TestPartner
QuickTest Professional
Trang 62Các công cụ kiểm thử thương mại
Technical users Nontechnical users
Technical and nontechnical users
Trang 63Tài liệu tham khảo
• Software Testing, A Craftsman’s Approach, Paul C.Jorgensen
• Practical Software Testing, EleneBurnstein
• Slides: Software Testing ISEB Foundation Certificate Course
• Slides: Software Testing, Dr Balla Katalin
• Slide: Equivalence Class Testing, Prof Schlingloff & Dr M Roggenbach
• Slide: Decision Table Based Testing, Neelam Gupta, The University
of Arizona Tucson, Arizona, USA
• Object Oriented Testing, Ali Kamandi, Sharif University of
Trang 64return 0;
}
Trang 67BT2
• Vẽ đồ thị dòng
Trang 6811 a=5, b=1,c=3,d=2, x=7,y=7 Nhap a, b, c, d, x, y
Trang 69BT2.b
• Xét đoạn code yêu cầu thiết kế ca kiểm thử bao phủ mức 4
Trang 70• Vẽ đồ thị dòng
Trang 71BT2
• Xác định các trường hợp kiểm thử
1 a=5,0,b=1,c=4,d=-2, x=7,y=7 Nhap a, b, c, d, x, y
Trang 72Bài tập 3
Thiết kế các ca kiểm thử thỏa mãn tiêu chuẩn phủ cấp 4
double average(int[] values, int min, int max) {
int sum=0, count=0, item=0;
double average= 0;
while(values[item] !=-999 && item <100) {
if (values[item]>= min && values[ item] <= max) {
sum += values [item];
count ++;
} item++;
}
if (count>0) average= (double) sum/count;
else average =-999;
Trang 73BT3
• Thiết kế ca kiểm thử thỏa mãn phủ cấp 4
Trang 74BT3
• Vẽ lưu đồ
Trang 76BT3
• Xác định ca kiểm thử
min=0, max=100
avg= gía trị trung bình của
100 phần tử đầu tiên thỏa m.n điều kiện max, min
Trang 77Bài tập 4
• Thiết kế các ca kiểm thử thỏa mãn tiêu chuẩn phủ cấp 4