► Gỡ lỗi Brute Force
► Sửa lỗi
Gỡ lỗi bằng suy luận
► Gỡ lỗi bằng cách loại trừ
► Gỡ lỗi bằng đi lùi
► Phân tích lỗi
► Unit Test
► Mock object
► Stub
► Driver
Sửa lỗi
Gỡ lỗi Brute Force:
►Xem bộ nhớ
►Đọc từ đầu đến cuối chương trình
►Dùng công cụ debug
29 trang |
Chia sẻ: candy98 | Lượt xem: 556 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Software Testing and Quality Assurance - Lecture 7: Stub & Driver - Đào Nam Anh, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
1Software Testing and Quality Assurance
Stub & Driver
Dr. Dao Nam Anh
Faculty of Information Technology
University of Technology and Management
2Resources
► Pressman, Software Engineering, McGraw Hill (chapter 18
& 19)
► Sommerville, Software Engineering, Addison-Wesley
(chapter 22 & 23)
► Software Testing and QA Theory and Practics, Chapter 7,
WILEY Publish
► Foundations Of Software Testing, Istqb Certification,
Dorothy Graham, Erik Van Veenendaal, Isabel Evans, Rex
Black
► Jovanović, Irena, Software Testing Methods and
Techniques
► Lâm Quang Vũ,
3Nội dung
► Gỡ lỗi Brute Force
► Sửa lỗi
Gỡ lỗi bằng suy luận
► Gỡ lỗi bằng cách loại trừ
► Gỡ lỗi bằng đi lùi
► Phân tích lỗi
► Unit Test
►Mock object
► Stub
►Driver
4Sửa lỗi
Gỡ lỗi Brute Force:
►Xem bộ nhớ
►Đọc từ đầu đến cuối chương trình
►Dùng công cụ debug
5BNF
► Syntax is defined in BNF as a set of
definitions. Each definition may in-turn refer
to other definitions or to itself.
► The LHS of a definition is the name given to
the collection of objects on the RHS.
::= means “is defined as”.
| means “or”.
* means “zero or more occurrences”.
+ means “one or more occurrences”.
means “n repetitions of A”.
nA
6BNF Example
► Correct phone numbers:
3469900, 9904567, 3300000
► Incorrect phone numbers:
0551212, 123, 8, ABCDEFG
special_digit ::= 0 | 1 | 2 | 5
other_digit ::= 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
ordinary_digit ::= special_digit | other_digit
exchange_part ::= ordinary_digit
number_part ::=
phone_number ::= exchange_part number_part
2_ digitother
4_ digitordinary
7Sửa lỗi
Gỡ lỗi bằng suy luận:
►Suy nghĩ cẩn thận sẽ tìm thấy hầu hết các
lỗi mà không cần ngồi gần máy tính.
►Phân tích từ một tình huống cụ thể cho đến
vấn đề lớn.
8Syntax Testing Steps
► Identify the target language or format.
►Define the syntax of the language, formally,
in a notation such as BNF.
► Test and Debug the syntax:
Test the “normal” conditions by covering the BNF
syntax graph of the input language. (minimum
requirement)
Test the “garbage” conditions by testing the
system against invalid data. (high payoff)
9Sửa lỗi
Gỡ lỗi bằng suy luận:
1. Tạo dữ liệu kiểm thử
2. Tổ chức dữ liệu theo một thứ tự riêng cho
chức năng kiểm thử sinh lỗi
3. Đề xuất giả thiết nguyên nhân gây lỗi
4. Chứng minh giả thuyết đó
10
Sửa lỗi
Gỡ lỗi bằng suy luận:
11
Sửa lỗi
Gỡ lỗi bằng suy luận:
12
Sửa lỗi
Gỡ lỗi bằng suy luận:
13
Sửa lỗi
Gỡ lỗi bằng cách loại trừ:
Quá trình gỡ lỗi bằng cách loại bỏ và sàng
lọc, để đi đến một kết luận (vị trí của lỗi).
14
Sửa lỗi
Gỡ lỗi bằng cách loại trừ:
1. Liệt kê các nguyên nhân có thể gây lỗi
2. Loại trừ dần nguyên nhân
3. Xem lại danh sách nguyên nhân có thể
gây lỗi
4. Chứng minh nguyên nhân có thể gây lỗi
15
Sửa lỗi
Gỡ lỗi bằng cách loại trừ:
16
Sửa lỗi
Gỡ lỗi bằng đi lùi:
Bặt đầu từ vị trí thấy lỗi, đi lùi dần để tìm thấy
nơi lỗi phát sinh.
17
Sửa lỗi
Phân tích lỗi:
► Where: Lỗi phát sinh ở đâu?
► Who: Ai đã để lỗi: người thiết kế, hay
người viết code
► What: Lỗi là gì?
► How: Làm thế nào để phòng ngừa lỗi?
► Why: Tại sao không phát hiện được lỗi
sớm hơn?
► How: Làm thế nào để phát hiện lỗi sớm?
18
Unit Testing
Unit Test:
► Unit Testing là một kỹ thuật kiểm thử mọi đơn vị hoạt động của mã
nguồn với một quy trình tách biệt so với quy trình phát triển của phần
mềm, giúp phát hiện sai sót kịp thời.
► Unit Test là một phần mã nguồn dùng để kiểm tra một phần mã nguồn
khác. Các đoạn mã Unit Test hoạt động liên tục hoặc định kỳ để thăm
dò và phát hiện các tiềm ẩn, lỗi kỹ thuật trong suốt quá trình phát
triển.
► Unit Testing là một kỹ thuật quan trọng trong Test driven
development.
► Unit Testing là phương pháp bổ sung cho các phương pháp kiểm thử
khác, giúp phát hiện lỗi từ sớm, ngay từ ý tưởng thiết kế (reviews
code, walkthroughs).
► Unit Test được viết bởi người phát triển. Test “White Box”, “Black-Box”
trong quá trình phát triển phần mềm.
► Unit of Code: mỗi đơn vị mã nguồn có thể là chương trình riêng lẻ,
chức năng, thủ tục, class, phương thức,
► Unit Test có 3 trạng thái: Fail, Ignore, Pass.
19
Unit Testing
Unit Test:
Mỗi UT đều được tiết kế theo trình tự sau:
+ Thiết lập các điều kiện cần thiết: khởi tạo
các đối tượng.
+ Gọi các phương thức cần kiểm tra.
+ Kiểm tra sự hoạt động của phương thức
+ Dọn dẹp tài nguyên sau khi kết thúc kiểm
tra.
20
Unit Testing
Mock object:
Là một đối tượng ảo, mô phỏng các tính chất và
hành vi giống hệt như đối tượng thực được truyền
vào bên trong khối mã đang vận hành nhằm kiểm
tra tính đúng đắn của các hoạt động bên trong.
Đặc điểm:
+ Đơn giản hơn đối tượng thực nhưng vẫn giữ được
sự tương tác với các đối tượng khác.
+ Không lặp lại nội dung đối tượng thực.
+ Cho phép thiết lập các trạng thái riêng trợ giúp
kiểm tra.
21
Unit Testing
Mock object:
Lợi ích:
+ Đảm bảo công việc kiểm nghiệm không bị
gián đoạn bởi các yếu tố bên ngoài, giúp
các chuyên viên tập trung vào một chức
năng nghiệp vụ cụ thể và UnitTest vận hành
nhanh hơn.
+ Giúp tiếp cận hướng đối tượng tốt hơn. Nhờ
MO có thể phát hiện interface cần tách ở
một số lớp.
+ Dễ dàng cho việc kiểm nghiệm.
22
Unit Testing
Mock object:
Cách thực hiện:
+ Đưa ra interface mô tả đối tượng.
+ Viết nội dung cho đối tượng thực dựa trên
interface như thông thường.
+ Trích interface từ đối tượng thực và triển khai MO
dựa trên interface đó.
Stub là phần cài đặt một interface và trả về giá trị
giả cho phương thức trong interface.
Fakes là phần cài đặt một interface là bản làm giả
bản thật nằm trong bộ nhớ (cài đặt bán hoàn
chỉnh).
23
Unit Testing
Mock object:
24
Unit Testing
Ví dụ sử dụng stub
Kiểm thử mô đun calender() có gọi
đến môđun tính ngày trong tuần
calc_day()chưa được phát triển.
25
Unit Testing
Ví dụ sử dụng stub
Mô đun tính ngày trong tuần calc_day():
- input: ngày, tháng, năm
- output: trả xâu kí tự là thứ của ngày đã cho
String calc_day(Date d)
{
return "Sunday";
}
26
Unit Testing
Ví dụ sử dụng stub
Để tăng độ thích nghi, có thể thay thế dữ liệu cố định bằng cách
nhập kết quả trực tiếp từ bàn phím.
String calc_day(Date d)
{
String s;
cout << ”Enter day_of_week of ”<< d;
cin >> s;
return s;
}
27
Unit Testing
Ví dụ về test drive
Test drive để thử nghiệm calc_day()
void calc_day_test_drive()
{
Date d;
String s;
while (1) {
cout << ”Enter date: ”);
cin >> d;
s = calc_day(d);
cout << s << endl;
}
}
28
Unit Testing
Test-driven development:
►-TDD là một chiến lược phát triển sử dụng
kỹ thuật UT theo nguyên tắc tạo ra các
công đoạn kiểm nghiệm trước khi xây dựng
mã.
29
Q & A