Software Testing and Quality Assurance - Lecture 7: Stub & Driver - Đào Nam Anh

► 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

pdf29 trang | Chia sẻ: candy98 | Lượt xem: 447 | Lượt tải: 0download
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