Hình 3 .8 Thêm Archetype Catalog của Modelio
Hình 3.14 Giao diện Config/ Module Catalog
Hình 3.14: Giao diện config module catalog, ta có thể thêm mới hoặc xóa bỏ module trong danh sách module
3.3.3 Các thuật toán áp dụng
Phần này trình bày các thuật toán áp dụng để sinh được các ca kiểm thử theo định nghĩa ban đầu. Bao gồm thuật toán để bóc tách dữ liệu từ biểu đồ tuần tự đã vẽ trên Modelio thành đồ thị tuần tự, thuật toán duyệt biểu đồ tuần tự xác định các test path, và thuật toán sử dụng để kết hợp giữa các test path với biểu đồ trạng thái của đối tượng
3.3.3.1 Thuật toán chuyển từ biểu đồ tuần tự sang đồ thị tuần tự
Trên biểu đồ tuần tự, chúng ta có thể mô tả các luồng điều khiển khác nhau sử dụng các đoạn gộp (combined fragment) để hiển thị các luồng điều khiển phức tạp như vòng
lặp, các nhánh hay các lựa chọn thay thế. Mỗi combined fragment bao gồm một hoặc nhiều toán hạng tương tác (Interaction Operand). Trong mỗi Combined Fragment hoặc Interaction Operand có thể chứa một hoặc nhiều các thông điệp trong đó
Sau khi đã có được biểu đồ tuần tự UML vẽ trên Modelio. Các thông tin từ Modelio có được bao gồm:
· Danh sách các MessageEnd (là tất cả các message trên biểu đồ tuần tự). Mỗi một thông điệp được ghi lại bởi tên và line number tương ứng của nó trên biểu đồ.
· Danh sách các Combined Fragment, danh sách Interaction Operand. Mỗi Combined Fragment có thông tin line number của nó. Mỗi Interaction Operand có thông tin về Line number và End line Number tương ứng của chúng.
Như vậy sau khi có thông tin từ biểu đồ tuần tự, ta cần bóc tách và duyệt tuần tự các thành phần trên biểu đồ để xác định đồ thị tuần tự tương ứng theo đúng các luồng/ nhánh được biểu diễn trên biểu đồ tuần tự ban đầu. Danh sách MessageEnd trên biểu đồ chính ra danh sách các đỉnh tương ứng trên đồ thị tuần tự, việc tiếp theo là xác định các cạnh của đồ thị. Để thực hiện được việc này, ta dùng các stack để lưu thông tin như sau:
· List Interaction fragment: Lưu danh sách Interaction Fragment (gồm Message End, Combined Fragment, Interaction Operand) đã được sắp xếp theo line number trên biểu đồ tuần tự.
· Working stack: Lưu lại các Interaction Fragment đang làm việc.
· Message before CF Stack (Combined Fragment) stack: lưu lại các Message End nằm ngay trước các Combined Fragment (Cần lưu lại các Message End này do các Message End này cần phải liên kết với các Message End đứng đầu mỗi Interaction Operand) (loại bỏ Message End khi các Message End này đã liên kết với hết các Message End đứng đầu các Interaction Operand thuộc Combined Fragment mà Message End này đứng trước)
· End message IO Stack (Interaction Operand) stack: lưu lại các Message End đứng cuối cùng trong mỗi Interaction Operand (Cần lưu lại các Message End
này do các Message End này cần phải liên kết với các Message End đứng ngay sau các Combined Fragment)
· Current CF (Combined Fragment) Stack: lưu lại các Combined Fragment đang chứa các Interaction Fragment đang làm việc trong working stack (Cần lưu lại các Combined Fragment này do có thể có nhiều Combined Fragment lồng trong một Combined Fragment nên cần lưu lại từng Combined Fragment đang làm việc và chỉ loại bỏ một Combined Fragment khỏi stack nếu đã duyệt hết Interaction Fragment thuộc Combined Fragment đó)
Quá trình duyệt được thực thực hiện bằng việc lấy từng phần tử trong List Interaction Fragment đưa vào Working Stack. Xem xét phần tử đang chứa trong Working Stack và phần tử kế tiếp đưa vào Working Stack, với từng cặp tương ứng sẽ được xử lý theo bảng sau:
Phần tử trong
Working Stack
Phần tử tiếp theo trong danh sách Interaction Fragment
Message End Combine Fragment Interaction Operand
Message End
- Remove phần tử trước khỏi Working Stack thay bằng phần tử đang xét
- Tạo 1 cạnh nối giữa 2 message
- Đẩy Combine fragment này
vào Working Stack
- CF gặp message có nghĩa message này chính là message ngay trước combine fragment
à Message này được lưu vào before CF stack để link tiếp với các message trong từng nhánh bên trong combined fragment
- Đẩy Combined Fragment vào Current CF Stack
- Remove các phần tử trong working Stack đến khi gặp Combined Fragment thì
dừng lại
- Đẩy Interaction Operand vào Working Stack
- Message End được đẩy vào End message IO Stack
Combined Fragment
Không có trường hợp Message gặp với CF (Mess nằm ngay dưới CF, như vậy nó không gặp trực tiếp CF được mà phải thông qua IO, CF bao IO nên nếu gặp thì Mess chỉ gặp được IO, không xét trường hợp CF không có IO nào)
- Không xét trường hợp này do không có trường hợp combined fragment không có phần tử / toán hạng nào
- Đẩy Interaction Operand vào Working Stack, và không remove phần tử nào trong Working Stack
Interaction Operand
- Đẩy Message vào Working Stack, và không remove phần tử nào khỏi Working Stack.
- Message gặp IO có nghĩa Message này là Message đầu tiên trong IO, nó được link với message ngay trước Combined Fragment chứa nó ( Message trong before CF stack)à Tạo được 1 cạnh mới
- Không có trường hợp này, do Interaction Operand được chứa bới Combined Fragment và không xét trường hợp IO không chứa một message nào
- Không có trường hợp này, do mỗi Interaction Operand phải chứa ít nhất 1 message
Bảng 3.3: Bảng mô tả quá trình duyệt các phần từ trong danh sách Interaction Fragment
Quá trình kết thúc khi toàn bộ các phần tử trong danh sách List Interaction Fragment đều được duyệt, danh sách này rỗng. Kết quả ta có được thông tin của đồ thị tuần tự tương ứng với đồ thị tuần tự đã vẽ trên Modelio bao gồm tập các đỉnh và tập các cạnh của đồ thị.
3.3.3.2 Thuật toán duyệt đồ thị tuần tự xác định test path
Hình 3.15: Thuật toán duyệt đồ thị
Hình 3.15 mô tả thuật toán sử dụng để duyệt đồ thị tuần tự đã có để xác định các test path, dựa vào thuật toán tìm kiếm theo chiều sâu ta bắt đầu xuất phát từ một đỉnh và đi cho đến khi không thể đi tiếp, sau đó quay lại đỉnh đầu, trong quá trình quay lại: Nếu gặp đường khác thì không tiếp cho đến khi không đi tiếp được nữa. Nếu không tìm được đường đi nào khác thì ngừng việc tìm kiếm.
Trong quá trình duyệt các đỉnh đi đến đỉnh hiện tại đều được lưu lại. Khi duyệt đến đỉnh kết thúc ta có được đường đi từ đỉnh xuất phát đên đỉnh kết thúc chính là các test path cần tìm.
3.3.3.3 Kết hợp biểu đồ trạng thái vào các test path
Tạo các đường test state path tương ứng với mỗi test path đã sinh từ đồ thị tuần tự, xác định các sự chuyển trạng thái của đối tượng trong từng path đã xác định phía trên. Các bước thực hiện như sau:
Hình 3.16: Thuật toán kết hợp state vào các test path
Hình 3.16 mô tả thuật toán kết hợp giữa biểu đồ trạng thái và các test path đã có để xác định được các test state path tương ứng với các test path đã xác định được. Việc kết hợp này giúp ta có xác định được sự chuyển trạng thái của đối tượng kiểm thử
trong mỗi test path. Với đồ thị trạng thái ta xác định được tất cả các bước chuyển trạng thái. Tương ứng duyệt từng test path, kiểm tra mỗi message trên đường này có dẫn đến với một bước chuyển trạng thái nào trên đồ thị trạng thái không. Nếu có trạng thái trước và trạng thái sau khi đối tượng thực hiện message này sẽ được ghi lại. Duyệt lần lượt hết test path ta sẽ có tương ứng một test state path tương ứng. Chi tiết thuật toán được trình bày trên hình 3.16
3.3.4 Kết quả cài đặt thử nghiệm
Sau khi đã xây dựng được module sinh ca kiểm thử theo các thuật toán phía trên, ta add module này vào Modelio và chạy thử chương theo các bước:
Bước 1: Cấu hình thêm module sinh ca kiểm thử vào Modelio: Module đã xây dựng được đóng gói dưới dạng file .jmdac sẽ được chọn để thêm vào danh mục các module của hệ thống
Bước 2: Vẽ biểu đồ tuần tự và biểu đồ trạng thái trên Modelio.
Bước 3: Chạy tool, module sinh ca kiểm thử được đưa vào thành một chức năng trong menu chuột phải. Chuột phải vào biểu đồ tuần tự à Chọn “Gen TC from sequence diagram”
Bước 4: Nhập tên biểu đồ trạng thái muốn map cùng biểu đồ tuần tự:
Hình 3.17: Kết quả chạy thử nghiệm
Hình 3.17 hiển thị kết quả chạy thử nghiệm của module, bằng sự kết hợp giữa biểu đồ tuần tự và biểu đồ trạng thái ta có các test case kiểm tra được sự chuyển trạng thái của các đối tượng trong từng path.
CHƯƠNG 4: KẾT LUẬN 4.1. Các kết quả đạt được và hạn chế
Luận văn đã tìm hiểu các kỹ thuật và mức độ kiểm thử cơ bản, trình bày các loại kỹ thuật kiểm thử cần chú trọng. Luận văn cũng đồng thời tìm hiểu và nêu các lý thuyết cơ bản về UML, tìm hiểu được kĩ thuật sinh ca kiểm thử từ việc kết hợp biểu đồ tuần tự và biểu đồ trạng thái UML, xây dựng được công cụ hỗ trợ việc sinh các ca kiểm thử tự động. Tại giai đoạn thiết kế phần mềm sau khi đã mô hình hóa được hoạt động của các đối tượng trong hệ thống phần mềm bằng các biểu đồ tuần tự và biểu đồ trạng thái ta có thể sử dụng công cụ để sinh được các ca kiểm thử ở mức đơn giản.
Hạn chế của luận văn: Các kĩ thuật kiểm thử được trình bày chỉ ở mức tìm hiểu, chưa trình bày được chi tiết. Các nội dung được trình bày trong phần tìm hiểu UML cũng mới ở mức cơ bản. Kỹ thuật sinh ca kiểm thử đã tìm hiểu chưa hỗ trợ sinh được dữ liệu cho ca kiểm thử.
4.2. Các công việc trong tương lai
Trong tương lai chúng tôi sẽ mở rộng nghiên cứu để sinh ca kiểm thử một với đầy đủ dữ liệu đưa vào cho từng ca kiểm thử. Kỹ thuật áp dụng trong luận văn mới chỉ sinh được các ca kiểm thử đạt được độ bao phủ thông điệp và bao phủ trạng thái, do vậy trong tương lai hướng nghiên cứu áp dụng thêm các kỹ thuật khác làm tăng được độ bao phủ trong các ca kiểm thử được sinh ra, với mục tiêu sinh được các ca kiểm thử tốt nhất.
TÀI LIỆU THAM KHẢO
Tiếng Việt
[1] Phạm Ngọc Hùng, Trương Anh Hoàng, Đặng Văn Hưng ,“Giáo trình kiểm thử phần mềm”, NXB Đại học Quốc Gia, 2014
Tiếng Anh
[2] R.V Binder. “Testing Object-Oriented Systems Models, Patterns, and Tools”. Object Technology Series. Addision Wesley, Reading, Massachusetts, October 1999.
[3] S. Muchnick, “Advanced Compiler Design and Implementation”, 1997. [4] Debasish Kundu, Debasis Samanta, "A Novel Approach to Generate Test Cases from UML Activity Diagrams", 2009.
[5] F. Basanieri, A. Bertomated, E. Marchetti, A. Rinoline, G. Lombardi, and G. Nucerga. “An Automated Test Strategy Based on UML Diagrams”, 2001.
[6] Lionel Briand, Yvan Labiche “A UML-Based Approach to System Testing”, 2002.
[7] Monalisa Sarma, Rajib Mall, “Automatic Test Case Generation from UML Models”, 2007.
[8] G. Booch, J. Rumbaugh, and I Jacobson. “The Unified Modeling Language User Guide”, 1999.
[9] Kshirasagar Naik, Priyadarshi Tripathy, “Software testing and quanlity assurance”, 2008.
[10] OMG, “UML 2.0 OCL Specification,” 2004.