2.1 Đặc tả tương tác giao diện của từng trang Web bằng ôtômát hữu hạn trạng thái Theo quy trình kiểm thử dựa trên mô hình [1] thì việc đầu tiên chúng ta phải làm trong số các hoạt động
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TS NGUYỄN VIỆT HÀ
Hà Nội – 2015
Trang 2MỤC LỤC
MỤC LỤC i
LỜI CẢM ƠN iii
LỜI CAM ĐOAN iv
DANH MỤC THUẬT NGỮ VIẾT TẮT v
DANH MỤC HÌNH VẼ vi
DANH MỤC BẢNG vii
Chương 1: Giới thiệu 8
Chương 2: Phương pháp đặc tả tương tác giao diện cho các ứng dụng Web 10
2.1 Đặc tả tương tác giao diện của từng trang Web bằng ôtômát hữu hạn trạng thái 10
2.2 Xây dựng mô hình đặc tả tương tác giao diện cho toàn bộ ứng dụng Web 16
2.3 Biểu diễn mô hình đặc tả dưới dạng các tệp tin MS Excel 19
Chương 3: Sinh và thực thi các ca kiểm thử tự động 26
3.1 Sinh các ca kiểm thử từ mô hình đặc tả hình thức 26
3.1.1 Đường dẫn kiểm thử 26
3.1.2 Thuật toán sinh tự động các đường dẫn kiểm thử 27
3.2 Thực hiện các ca kiểm thử 32
3.4 Đánh giá phương pháp 33
Chương 4: Công cụ và thực nghiệm 35
4.1 Giới thiệu các công cụ bổ trợ 35
4.1.1 Giới thiệu Selenium và một số API WebDriver được sử dụng 35
4.1.2 Giới thiệu Jsoup 37
4.2 Giới thiệu công cụ kiểm thử tự động tương tác giao diện cho các ứng dụng Web 38 4.2.1 Kiến trúc của công cụ 39
4.2.2 Đầu vào của công cụ 40
4.2.3 Đầu ra của công cụ 42
4.3 Thực nghiệm 44
4.4 Kết quả cải tiến công cụ 51
4.5 Ý nghĩa của công cụ thực nghiệm 53
Trang 3Chương 5: KẾT LUẬN 55 TÀI LIỆU THAM KHẢO 57
Trang 4LỜI CẢM ƠN Trước tiên tôi xin gửi lời cảm ơn chân thành và sâu sắc đến thầy giáo PGS.TS Nguyễn Việt Hà và thầy giáo TS Phạm Ngọc Hùng - người đã trực tiếp hướng dẫn, khuyến khích, chỉ bảo và đóng góp những ý kiến quý báu trong suốt quá trình tôi học tập, nghiên cứu cũng như từ khi tôi bắt đầu nghiên cứu đề tài đến khi hoàn thành luận văn này
Tôi xin chân thành cảm ơn các thầy cô giáo khoa Công nghệ thông tin, trường Đại học Công nghệ, Đại học Quốc Gia Hà Nội đã tận tình đào tạo, cung cấp cho tôi những kiến thức vô cùng quý giá, đã tạo điều kiện tốt nhất cho tôi trong suốt quá trình học tập, nghiên cứu tại trường
Đồng thời tôi xin chân thành cảm ơn những người thân trong gia đình cùng toàn thể bạn bè, đồng nghiệp đã luôn giúp đỡ, động viên tôi trong những lúc gặp phải khó khăn trong việc học tập và nghiên cứu
Cuối cùng, tôi xin chân thành cảm ơn Lê Khánh Trình người đã giúp đỡ, tạo điều kiện cho tôi nghiên cứu công cụ kiểm thử tự động ATWT và các đồng nghiệp của tôi tại Cục Công nghệ thông tin - Tổng cục IV - Bộ Công an đã giúp
đỡ, tạo điều kiện thuận lợi cho tôi học tập và nghiên cứu chương trình thạc sĩ tại Đại học Công nghệ, ĐH QGHN
Trang 5LỜI CAM ĐOAN Tôi xin cam đoan rằng luận văn thạc sĩ công nghệ thông tin “Nghiên cứu về kiểm thử dựa trên mô hình và ứng dụng” là công trình nghiên cứu của riêng tôi dưới sự hướng dẫn của thầy giáo PGS.TS Nguyễn Việt Hà và thầy giáo TS Phạm Ngọc Hùng, không sao chép lại của người khác Trong toàn bộ nội dung của luận văn, những điều đã được trình bày hoặc là của chính cá nhân tôi hoặc là được tổng hợp từ nhiều nguồn tài liệu Tất cả các nguồn tài liệu tham khảo đều
Trang 6DANH MỤC THUẬT NGỮ VIẾT TẮT
Interface
Giao diện lập trình ứng dụng
2 FSA Finite State Automaton Ôtômát hữu hạn trạng thái
3 MBT Model- base testing Kiểm thử dựa trên mô hình
Trang 7DANH MỤC HÌNH VẼ
Hình 2.1 Trạng thái bắt đầu của trang tìm kiếm cán bộ
Hình 2.2 Trạng thái đã nhập họ tên tìm kiếm
Hình 2.3 Ôtômát hữu hạn trạng thái M 1
Hình 2.4 Kết quả tìm kiếm cán bộ và nút sửa thông tin cán bộ
Hình 2.5 Giao diện trang Web cập nhật thông tin cán bộ (update)
Hình 2.6 Ôtômát hữu hạn trạng M 2
Hình 2.7 Mô hình Msau khi thực hiện thuật toán ghép nối giữa M1 và M2
Hình 4.1 Kiến trúc của công cụ Auto Testing Web Application
Hình 4.2 Lưu trữ các tệp tin đầu vào
Hình 4.3 Cài đặt ôtômát hữu hạn trạng thái
Hình 4.4 Giao diện nhập dữ liệu đầu vào của công cụ
Hình 4.5 Kết quả kiểm thử
Hình 4.6 Ứng dụng Web quản lý thông tin cán bộ
Hình 4.7 Giao diện trang đăng nhập
Hình 4.8 Giao diện các chức năng của người quản trị hệ thống
Hình 4.9 Trang quản lý người dùng
Hình 4.10 Giao diện trang tìm kiếm cán bộ
Hình 4.11 Trang thêm mới thông tin cán bộ
Hình 4.12 Trang cập nhật thông tin cán bộ
Hình 4.13 Thư mục các tệp tin đặc tả ứng dụng Quản lý thông tin cán bộHình 4.14 Giao diện của công cụ
Hinh 4.15 Các đường dẫn kiểm thử được sinh tự động
Hình 4.16 Kết quả thực hiện đường dẫn kiểm thử hiển thị trong tệp tin đầu raHình 4.17 Giao diện chức năng tạo menu động
Hình 4.18 Giao diện pop-up
Trang 8DANH MỤC BẢNG
Bảng 2.1 Các trạng thái Web của trang tìm kiếm cán bộ
Bảng 2.2 Các sự kiện của trang tìm kiếm cán bộ
Bảng 2.3 Bảng các phần tử Web của trang tìm kiếm cán bộ
Bảng 2.4 Bảng các trạng thái của trang tìm kiếm cán bộ
Bảng 2.5 Bảng các sự kiện của trang tìm kiếm cán bộ
Bảng 2.6 Bảng các transition của trang tìm kiếm cán bộ
Bảng 2.7 tệp tin Excel đặc tả trang Web tìm kiếm cán bộ
Bảng 3.1 Các transition của trang tìm kiếm thông tin cán bộ
Bảng 3.2 Các testparth được sinh ra từ mô hình trang tìm kiếm thông tin cán bộ
Trang 9Chương 1: Giới thiệu
Trong ngành công nghiệp phát triển phần mềm ngày nay, hầu hết các phần mềm ứng dụng đều được phát triển trên nền Web Do đó, việc kiểm thử đảm bảo chất lượng các ứng dụng Web là một vấn đề rất quan trọng Tuy nhiên, các ứng dụng Web ngày càng trở nên phức tạp, việc kiểm thử thủ công bao gồm cả tạo các ca kiểm thử và thực thi chúng trên các trang Web, là công việc rất tốn kém
về thời gian và công sức Hơn nữa, mỗi khi có sự cập nhật lại phiên bản của phần mềm, để tránh rủi ro phát sinh lỗi trong khi thay đổi mã nguồn thì các kiểm thử viên phải kiểm thử lại toàn bộ phần mềm, kể cả các tính năng đã được kiểm thử tốt Vì vậy, để hoàn thành công việc kiểm thử đúng tín độ, các công ty phần mềm cần phải áp dụng các phương pháp và công cụ nhằm tự động hóa các hoạt động kiểm thử Kiểm thử tự động là một giải pháp hữu hiệu nhằm nâng cao tính chính xác và hiệu quả, cũng như giảm kinh phí và rút ngắn thời gian trong quá trình kiểm thử các sản phẩm phần mềm nói chung và các ứng dụng Web nói riêng [1] Kiểm thử dựa trên mô hình đang được xem như là một phương pháp kiểm thử có khả năng tự động hóa cao
Kiểm thử dựa trên mô hình là một phương pháp kiểm thử, trong đó các ca kiểm thử được sinh ra từ mô hình đặc tả hành vi của hệ thống đang được kiểm thử [1] Vì vậy, kiểm thử dựa trên mô hình được ứng dụng để giải quyết một số vấn đề khó khăn trong hoạt động kiểm thử các sản phẩm phần mềm Một trong những ứng dụng của nó là kiểm thử tương tác giao diện người dùng cho các ứng dụng Web Để ứng dụng phương pháp kiểm thử này, trước tiên chúng ta cần xây dựng mô hình đặc tả hành vi tương tác giao diện của ứng dụng Web Mô hình này thường được biểu diễn bằng máy hữu hạn trạng thái hoặc ôtômát hữu hạn trạng thái Tiếp đến, các ca kiểm thử được tự động sinh ra từ mô hình Cuối cùng, các ca kiểm thử này được thực thi trên ứng dụng nhằm phát hiện các lỗi lập trình liên quan đến tương tác giao diện người dùng
Trong thực tế, có rất nhiều hướng nghiên cứu về kiểm thử dựa trên mô hình cho ứng dụng Web như kiểm thử khả năng chịu tải, tính bảo mật, hiệu năng, kiểm thử chức năng, v.v [2,3,5,6] Tuy nhiên, việc kiểm thử chức năng (theo luồng tương tác giao diện người dùng) vẫn chưa có giải pháp thỏa đáng Một số nghiên cứu trước đã đề xuất các phương pháp và công cụ thực hiện việc kiểm thử chức năng ứng dụng Web [4,5,9] Mặc dù vậy, các nghiên cứu này mới chỉ thực hiện kiểm thử tự động cho từng trang Web, hoặc cho các Website tĩnh [5] mà chưa có nhiều nghiên cứu hỗ trợ cho kiểm thử luồng tương tác người dùng Trong số đó, phương pháp và công cụ kiểm thử tự động cho các ứng dụng Web được đề xuất bởi [5] đã giải quyết được một phần vấn đề nêu trên Tuy
Trang 10nhiên, phương pháp này chỉ thực hiện kiểm thử được cho một số phần tử Web
cơ bản và chúng phải có thuộc tính id định danh Trong khi, các hệ thống ứng
dụng Web thực tế cần một công cụ kiểm thử tự động, có khả năng kiểm thử được cho nhiều loại phần tử Web và các phần tử Web đó được thiết kế một cách linh động
Nghiên cứu này được đưa ra nhằm giải quyết vấn đề trên Đề tài đưa ra phương pháp đặc tả hình thức giao diện cho các ứng dụng Web Từ đó, chúng tôi xây dựng thuật toán sinh tự động các ca kiểm thử từ bản đặc tả trên Cuối cùng, đề tài dùng phương pháp đã được đề xuất trong [5] làm cơ sở để xây dựng một công cụ kiểm thử tự động tương tác giao diện các ứng dụng Web Công cụ này kiểm thử được cho các ứng dụng Web có nhiều loại phần tử Web như:
DropDownList, CheckBoxList, RadioList, DataGrid, v.v.; kể cả với các phần tử
Web không có thuộc tính định danh (id) và các giao diện pop-up
Phần còn lại của luận văn được cấu trúc như sau Chương 2 trình bày về phương pháp đặc tả giao diện cho các ứng dụng Web như là một ôtômát hữu hạn trạng thái và được biểu diễn dưới dạng các tệp tin MS Excel Ở chương 3, luận văn này trình bày phương pháp sinh tự động các ca kiểm thử từ ôtômát hữu hạn trạng thái và thực thi chúng trên trên ứng dụng Web Tiếp đến, chương 4 trình bày công cụ và kết quả thực nghiệm Cuối cùng, kết luận của luận văn và định hướng nghiên cứu tiếp theo được trình bày trong chương 5
Trang 11Chương 2: Phương pháp đặc tả tương tác giao diện cho các ứng dụng Web
Để áp dụng phương pháp kiểm thử dựa trên mô hình, chúng ta cần xây dựng mô hình đặc tả chính xác hành vi của hệ thống cần kiểm thử Mô hình là một sự biểu đồ hóa, mô tả chi tiết hệ thống, đồng thời mô tả chi tiết các khía cạnh, các đặc tính của hệ thống Mô hình cần phải đủ chi tiết để giúp ta hiểu và đoán nhận được hành vi của hệ thống Có nhiều phương pháp đặc tả mô hình như: máy hữu hạn trạng thái, ôtômát trạng thái, máy trạng thái UML, chuỗi Markov, văn phạm, bảng quyết định, v.v [1] Phụ thuộc vào phương pháp và công cụ kiểm thử, chúng ta sẽ lựa chọn phương pháp đặc tả hệ thống tương ứng Trong chương 2, chúng tôi chỉ trình bày một phương pháp đặc tả tương tác giao diện ứng dụng Web được sử dụng cho nghiên cứu này
2.1 Đặc tả tương tác giao diện của từng trang Web bằng ôtômát hữu hạn trạng thái
Theo quy trình kiểm thử dựa trên mô hình [1] thì việc đầu tiên chúng ta phải làm trong số các hoạt động kiểm thử tự động ứng dụng Web đó là xây dựng
mô hình đặc tả hành vi của ứng dụng Web Có nhiều hành vi có thể được sử dụng để đặc tả nhưng trong luận văn này, chỉ đề cập đến hành vi tương tác của người dùng đối với hệ thống ứng dụng Web, thông qua sự thay đổi trạng thái (hay sự thay đổi giao diện) của ứng dụng Web [5] Chúng tôi dùng ôtômát trạng thái làm phương pháp đặc tả hình thức giao diện ứng dụng Web Khi đó, mỗi giao diện người dùng của một trang Web, tại một thời điểm được mô hình hóa như là một trạng thái Mỗi yêu cầu của người dùng được mô hình hóa như là một hành động tạo ra hàm chuyển trạng thái Vậy, để mô hình hóa các hành vi tương tác giao diện người dùng ứng dụng Web như là một ôtômát trạng thái, chúng tôi cần thực hiện các bước sau: (1) Chia nhỏ hệ thống thành các mô-đun; (2) với mỗi mô-đun chúng ta cần xác định các giao diện người dùng; (3) với mỗi giao diện người dùng được đặc tả bằng một ôtômát trạng thái; (4) nối các ôtômát trạng thái đó lại thành một bản đặc tả hoàn chỉnh cho cả hệ thống Phương pháp coi mỗi giao diện người dùng là một trang Web và được biểu diễn bằng một ôtômát trạng thái như định nghĩa 2.1 [5]
Định nghĩa 2.1: Hành vi tương tác giao diện của một trang Web được đặc tả
bằng ôtômát trạng thái (Finite State Automaton - FSA) M = < S, s 0 , ∑, δ, F >,
trong đó:
Trang 12- S là tập hữu hạn khác rỗng các trạng thái của trang Web,
- s 0 S là trạng thái đầu ti
- ∑ ứng với tập sự kiện có dạng
- δ là hàm chuy
- là tập các trạng thái kết thúc, t
hiện cuối cùng sau m
Chú ý 2.1: Dạng <[điều kiện]sự kiện
<điều kiện> được thỏa m
là ôtômát hữu hạn trạng thái
Sau đây là một số khái niệm căn bản giúp chúng ta đặc tả một trang Web như là một ôtômát hữu hạn
Phần tử Web (Web Element)
nên một trang Web Mỗi phần tử Web
trang Web chúng ta cần mô tả
báo bắt đầu một phần tử Web; các thuộc tính
thường được sử dụng để xác định vị trí của phần tử Web t
dung của phần tử Web th
Web và thẻ đóng nằm ở vị trí cuối c
Trạng thái trang Web
một thời điểm, mỗi trạng thái Web l
tử trong một trang Web
Ví dụ 2.1: Ví dụ về trạng thái trang Web
trong hình 2.1 là một trạng thái của trang We
ều kiện]sự kiện> có nghĩa là <sự kiện> ch
ợc thỏa mãn Ôtômát hữu hạn trạng thái rỗng, ký hiệu l
thái và có tập các trạng thái S = ∅ [5]
ột số khái niệm căn bản giúp chúng ta đặc tả một trang Web
ữu hạn trạng thái
ần tử Web (Web Element) Phần tử Web là các thành phần c
ỗi phần tử Web có nhiều thành phần nhưng
ần mô tả một số các thành phần cơ bản như: th
ắt đầu một phần tử Web; các thuộc tính, trong đó thuộc tính id, class, name
ợc sử dụng để xác định vị trí của phần tử Web trên trang Web; n
ủa phần tử Web thường được sử dụng để xác định trạng thái của phần tử
ẻ đóng nằm ở vị trí cuối cùng của phần tử Web
Trạng thái trang Web là giao diện của trang Web tại
ột thời điểm, mỗi trạng thái Web là một tập hợp các trạng thái của từng phần
ụ về trạng thái trang Web tìm kiếm thông tin cán bộ
ạng thái của trang Web (trạng thái index) Sau khi ngư
ìm kiếm vào các ô tìm kiếm (phần tử Web
ệ thống sẽ chuyển từ trạng thái bắt đầu sang
là trạng thái người dùng đã nhập họ tên c
ập hữu hạn khác rỗng các trạng thái của trang Web,
ủa trang Web,
các giao diện xuất
chỉ xảy ra khi ạng thái rỗng, ký hiệu là M = ∏
ột số khái niệm căn bản giúp chúng ta đặc tả một trang Web
ần cơ bản cấu tạo ưng để đặc tả một thẻ mở để khai
id, class, name
rên trang Web; nội
ợc sử dụng để xác định trạng thái của phần tử
ện của trang Web tại
ột tập hợp các trạng thái của từng phần
ếm thông tin cán bộ Giao diện
Sau khi người
ếm (phần tử Web textbox hoặc
trạng thái tiếp
ên cần tìm kiếm
Trang 13Hình 2.1 Trạng thái bắt đầu của trang tìm kiếm cán bộ
Hình 2.2 Trạng thái đã nhập họ tên tìm kiếm
Sự kiện Sự kiện bao gồm các hành động (action) tác động lên các phần tử Web tại một thời điểm, làm thay đổi trạng thái của trang Web đó Có nhiều sự kiện tương tác người dùng trên giao diện Web, trong đó có 4 sự kiện chính được
chúng tôi sử dụng để đặc tả hành vi Web như sau: sự kiện addtext dùng để nhập một đoạn ký tự vào ô textbox, sự kiện deltext dùng để xóa đoạn ký tự ở ô
textbox, sự kiện click là sự kiện nhấp chuột vào một nút (button) hoặc một
đường dẫn, sự kiện select dùng để chọn một hoặc nhiều, được sử dụng cho các phần tử combobox, checkbox, listbox, dropdown list, radio list Như trong ví dụ
Trang 142.1 chúng ta thấy có một sự kiện người dùng nhập thông tin tìm kiếm (addtext) lên ô tìm kiếm theo họ tên cán bộ (ô textbox)
Ví dụ 2.2: Ví dụ minh họa về đặc tả hình thức tương tác giao diện của trang Web tìm kiếm cán bộ và trang cập nhật thông tin cán bộ bằng ôtômát hữu hạn trạng thái
Hình 2.1 trên là giao diện đầu tiên được tải lên của trang Web tìm kiếm thông tin cán bộ Giao diện này gồm 2 phần chính: phần thứ nhất là các chỉ tiêu tìm kiếm, phần thứ hai là kết quả tìm kiếm
Để xây dựng được mô hình cho trang Web này, chúng ta cần xác định chính xác các trạng thái và sự kiện của nó Các trạng thái của trang tìm kiếm cán
bộ (bảng 2.1) được xác định dựa trên các trạng thái của các phần tử Web sau:
tiêu đề trang Web (Lable), ô nhập họ tên (TextBox) và ô nhập số hiệu (TextBox),
ô chọn đơn vị (DropDownList), Nút tìm kiếm (Button) và Bảng kết quả tìm kiếm (DataGrid)
Bảng 2.1 Các trạng thái Web của trang tìm kiếm cán bộ Stt Tên trạng thái Ý nghĩa
1 Index Trạng thái ban đầu của trang Web
2 TEN Khi người dùng nhập họ tên cán bộ cần tìm
3 SOHIEU Khi người dùng nhập số hiệu
4 DONVI Khi người dùng chọn đơn vị
5 TEN+SO Khi người dùng nhập cả tên và số hiệu
6 TEN+DONVI Khi người dùng nhập tên và chọn đơn vị
7 SO+DONVI Khi người dùng nhập số hiệu và chọn đơn vị
8 TEN+SO+DON Khi người dùng chọn cả 3 chỉ tiêu tìm kiếm
9 KETQUA_TK Trạng thái trang Web khi trả về kết quả tìm kiếm, cũng
là trạng thái kết thúc của trang Web Các sự kiện người dùng tương tác lên trang Web tìm kiếm cán bộ như bảng 2.2
Bảng 2.2 Các sự kiện của trang tìm kiếm cán bộ Stt Tên sự kiện Ý nghĩa
1 add_hoten Nhập họ tên tìm kiếm
2 del_hoten Xóa họ tên tìm kiếm
3 add_sohieu Nhập số hiệu
4 del_sohieu Xóa số hiệu
5 sel_donvi Chọn đơn vị
Trang 156 del_donvi Không chọn đơn vị
7 Timkiem Chọn tìm kiếm
Trang tìm kiếm cán bộ được đặc tả bằng ôtômát hữu hạn trạng thái M 1 = < S 1 ,
s 01 , ∑ 1 , δ 1 , F 1 > (hình 2.3), dựa trên tập trạng thái và tập sự kiện đã được nêu
trên
Hình 2.3 Ôtômát hữu hạn trạng thái M 1
Trong đó:
S 1 = {index, TEN, SOHIEU, DONVI, TEN+SO, TEN+DONVI,
SO+DONVI, TEN+SO+DONVI, KETQUA_TK} là tập các trạng thái của trang
tìm kiếm cán bộ
s 01 =index là trạng thái bắt đầu của trang Web
∑ 1 = {add_hoten, del_hoten, add_sohieu, del_sohieu, sel_donvi, del_donvi,
Timkiem} là tập các sự kiện
Hàm chuyển trạng thái δ 1 gồm các đường chuyển trạng thái như trong hình
2.3
F1 = {KETQUA_TK} là tập các trạng thái kết thúc
Sau khi người dùng tìm kiếm cán bộ thành công Giao diện của trang Web
tìm kiếm (search) sẽ chuyển sang trạng thái kết quả tìm kiếm (KETQUA_TK)
Trang 16Hình 2.4 Kết quả tìm kiếm cán bộ và nút sửa thông tin cán bộ
Từ trạng thái này, người dùng lựa chọn nút sửa trên bản ghi kết quả cần sửa (như hình 2.4), thì trang Web tìm kiếm sẽ chuyển sang giao diện của trang
Cập nhật thông tin cán bộ (trang update) như hình 2.5
Hình 2.5 Giao diện trang Web cập nhật thông tin cán bộ (update)
Trang update được đặc tả bằng ôtômát hữu hạn trạng thái M 2 = < S 2 , s 02 ,
∑ 2 , δ 2 , F 2 > như trong hình 2.6 Tại giao diện của trang Web
(CAPNHAT_TTCB), khi người dùng thực hiện thay đổi một số thông tin liên
Trang 17quan đến cán bộ cần cập nhật (thực hiện sự kiện do_Something), hệ thống sẽ chuyển sang trạng thái TT_CAPNHAT Tại trạng thái TT_CAPNHAT người dùng thực hiện sự kiện (capnhat) bằng cách chọn nút Cập nhật, hệ thống sẽ chuyển tới trạng thái cập nhật thành công (CN_THANHCONG)
Hình 2.6 Ôtômát hữu hạn trạng M 2
Trong M2 có:
CN_THANHCONG} là tập các trạng thái của trang cập nhật thông tin cán bộ
Trạng thái KETQUA_TK là trạng thái của trang Web như hình 2.4, trạng thái
CAPNHAT_TTCB là giao diện của trang cập nhật thông tin cán bộ như hình 2.5,
trạng thái TT_CAPNHAT là trạng thái khi người dùng chỉnh sửa một số thông tin của cán bộ, trạng thái CN_THANHCONG là trạng thái trang Web sau khi người dùng chọn nút Cập nhật
s 02 = KETQUA_TK là trạng thái bắt đầu của trang Web
∑ 2 = {sel_sua, do_Something, capnhat } là tập các sự kiện Sự kiện sel_sua
là sự kiện người dùng chọn nút sửa trên danh sách cán bộ, sự kiện do_something
là sự kiện người dùng thực hiện sửa thông tin cán bộ, sự kiện capnhat là sự kiện người dùng chọn nút cập nhật để lưu thông tin chỉnh sửa
Hàm chuyển trạng thái δ 2 gồm các đường chuyển trạng thái như trong hình
Trang 18như vậy Trong giới hạn của luận văn n
thức bằng cách xây dựng
đó ghép nối lần lượt từng
ôtômát hữu hạn trạng thái
Trang Web mốc M
trang Web mốc, nếu trang Web đ
nối vào, hay nó là trang Web kh
> là trang Web sau khi ghép n
Mô hình của toàn b
mô hình của tất cả các trang Web
định nghĩa [5] như sau:
Định nghĩa 2.2: Giả sử
δ 2 , F 2 > lần lượt là các ôtômát
nối của M 1 và M 2 là ôtômát
trang Web mốc) Nếu M
Ví dụ 2.3: Để minh họa cụ thể cho p
nối hai ôtômát hữu hạn trạng thái của trang
Thuật toán thực hiện các b
ới hạn của luận văn này, một ứng dụng Web đưằng cách xây dựng ôtômát hữu hạn trạng thái cho từng trang Web nhỏ, sau
ợt từng ôtômát hữu hạn trạng thái nhỏ lại với nhau
ữu hạn trạng thái lớn cho cả ứng dụng Web
Một trang Web M i = < S i , s 0i , ∑ i , δ i , F i
ếu trang Web được dùng làm mốc để các trang Web khác ghép
hay nó là trang Web khởi đầu của ứng dụng Web M = < S, s
ghép nối, với s 0 = s 0i
àn bộ ứng dụng Web được xây dựng bằng cách ghép nối
ủa tất cả các trang Web lại với nhau bằng phép toán ghép nối đ
à ký hiệu ôtômát hữu hạn trạng thái rỗng, tức nó có tập các
ể minh họa cụ thể cho phép toán ghép nối, chúng ta ti
ữu hạn trạng thái của trang tìm kiếm cán bộ (search
ập nhật thông tin cán bộ (update), như ở ví dụ 2.2 lại thành ôtômát
= < S, s 0 , ∑, δ, F >, trong đó:
1 > với S 1 = {index, TEN, SOHIEU, DONVI, TEN+SO,
TEN+DONVI, SO+DONVI, TEN+SO+DONVI, KETQUA_TK}; s
} là mô hình của trang search
2 , F 2 > với S 2 = {KETQUA_TK, CAPNHAT_TTCB,
là mô hình của trang update
ật toán thực hiện các bước sau:
được đặc tả hình ừng trang Web nhỏ, sau
ữu hạn trạng thái nhỏ lại với nhau thành một
> được gọi là
ốc để các trang Web khác ghép
M = < S, s 0 , ∑, δ, F
ợc xây dựng bằng cách ghép nối ằng phép toán ghép nối được
Trang 19- Thuật toán tiến h
Kết quả cho thấy
l_don
vi
Tim kiem
trang Web mốc Đầu tiên,
toán sau đó sẽ tiến hành ghép n
ghép nối kết thúc sau khi duyệt qua tất cả các
Nhận xét: Phép ghép nối nh
tính giao hoán [5]
ật toán tiến hành kiểm tra xem s01 F2 và s02 F
ết quả cho thấy s02 = KETQUA_TK F 1 suy ra s0 = sạng thái kết thúc F = F1 F2 ={ KETQUA_TK,
DONVI, TEN+SO, TEN+DONVI, SO+DONVI, TEN+SO+DONVI,
add_sde l_sohieu
Timkiem
m
Timkiem
Timkiem
CN_THANHCONG TT_CAPNHAT
ượt là các ôtômát hữu hạn của n trang Web v
ên, M 1 ghép nối với M i (2 <= i <= n) thành
ành ghép nối M 1i với M j (2 <= j <= n và i ≠ j)
ối kết thúc sau khi duyệt qua tất cả các ôtômát hữu hạn trạng thái
ối như định nghĩa trên có tính kết hợp nh
F1 hay không?
= s01 = index
KETQUA_TK, index, TEN, SOHIEU, DONVI, TEN+SO, TEN+DONVI, SO+DONVI, TEN+SO+DONVI,
TEN+SO+DONVI
_donvide l_d on vi
add_
hoten
del_
hoten
_sohieuu
Trang 202.3 Biểu diễn mô hình đặc tả dưới dạng các tệp tin MS Excel
Phần này, chúng tôi sẽ trình bày cụ thể về cách biểu diễn các ôtômát hữu hạn trạng thái dưới dạng bảng chuyển trạng thái và được lưu bằng các tệp tin Excel Mỗi tệp tin Excel tương ứng với một ôtômát hữu hạn trạng thái đặc tả cho một trang Web Trong một tệp tin Excel có 4 phần: Phần 1 là bảng
Element_html, mô tả các phần tử Web của trang Web Phần 2 là bảng State, mô
tả các trạng thái, mỗi trạng thái là tập hợp tất cả các trạng thái của các phần tử
Web trong bảng Element_html Phần 3 là bảng Event, mô tả các sự kiện, mỗi sự
kiện là một hành vi tương tác của người dùng lên một phần tử Web Phần 4 là
bảng Transition, mô tả các hàm chuyển trạng thái giữa các trạng thái trong bảng
State
Mỗi bảng đều gồm nhiều dòng, dòng đầu tiên chứa số các phần tử của bảng (giá trị này được ghi ở ô đầu tiên), dòng tiếp theo là tên các cột và các dòng sau đó là các phần tử của bảng
Sau đây, chúng tôi sẽ mô tả chi tiết từng bảng trong tệp tin Excel của trang
tìm kiếm cán bộ (search Excel)
Bảng Element_html (bảng các phần tử Web): Bảng này được thiết kế để đặc
tả các phần tử Web của trang Web cần kiểm thử
Bảng 2.3 Bảng các phần tử Web của trang tìm kiếm cán bộ
Bảng 2.3 là bảng mô tả các phần tử Web của trang tìm kiếm cán bộ Cấu
trúc của bảng này gồm có 4 cột chính: cột id, html, type và value
Mỗi cột của bảng mang ý nghĩa sau:
- Cột id: là cột định danh phần tử Web, được đánh số thứ tự tăng dần
Trang 21- Cột html: là cột lưu các thuộc tính của phần tử Web Các thuộc tính này
được lấy từ các thẻ HTML của trang Web Nếu phần tử Web được đặc
tả có thuộc tính định danh là id, classname, name thì cột này ghi giá trị
định danh của phần tử Web đó Ngược lại, chúng ta sẽ đặc tả một số thông tin của phần tử Web để có thể xác định được vị trí của nó Các thông tin xác định phần tử Web được phân cách bởi ký tự “|” Tùy vào từng loại phần tử Web mà chúng ta sẽ đặc tả các giá trị tương ứng để xác định được vị trí của nó trên trang Web
- Cột type: là cột lưu kiểu của phần tử Web, công cụ có thể tiến hành kiểm thử thành công với đa số các kiểu phần tử Web như: textarea,
textbox, checkbox, combobox, radiobox (radio), listbox, button (btn), texthtml, datagrid (grid), v.v Giá trị của cột này được công cụ sử dụng
để lấy nội dung của phần tử Web tương ứng
- Cột value: là cột lưu nội dung đầu ra mong muốn của phần tử Web hoặc
nội dung cần đưa vào đối với phần tử Web kiểu nhập thông tin vào,
chẳng hạn như phần tử Web dạng textbox
Bảng State (bảng trạng thái): là bảng mô tả các trạng thái của trang Web
Bảng 2.4 Bảng các trạng thái của trang tìm kiếm cán bộ
Trang 22 Số cột còn lại là số các phần tử Web (bằng số phần tử Web của bảng
Element_html) Ở mỗi cột này, ô đầu mỗi cột là các id định danh được
đánh như bảng Element_html, các ô tiếp theo của mỗi cột này là trạng thái
của phần tử Web tương ứng với từng trạng thái của trang Web Chúng tôi đặc tả 3 trạng thái của một phần tử Web như sau:
o Ký hiệu "o": Phần tử Web có một giá trị bất kỳ khác rỗng Ví dụ:
giá trị của tiêu đề (lblTitle) trang tìm kiếm thông tin cán bộ là
"Danh sách cán bộ chiến sỹ công an Hà Nội"
o Ký hiệu "null": Phần tử Web có một giá trị rỗng Ví dụ: giá trị của
một ô textbox là rỗng
o Ký hiệu " ": Phần tử Web không nhận giá trị nào cả Ví dụ: một nút
(button) thì không cần lấy giá trị
Như trong bảng 2.4, trạng thái index là trạng thái đầu tiên của trang Web
tìm kiếm cán bộ (cột đầu tiên có giá trị 0) Trạng thái này được xác định thông
qua các trạng thái của tất cả các phần tử Web Với, phần tử Web có id 0 nhận một giá trị khác rỗng, giá trị này được lưu ở bảng Element_html (chính là tiêu đề
Danh sách cán bộ chiến sỹ công an Hà Nội), 2 phần tử Web tiếp theo có giá trị
rỗng, các phần tử còn lại không cần nhận một giá trị nào
Bảng Event (Sự kiện): Bảng liệt kê tất cả các sự kiện diễn ra trên trang Web Mỗi sự kiện là một tương tác người dùng lên một phần tử Web
Bảng 2.5 Bảng các sự kiện của trang tìm kiếm cán bộ
7
Bảng 2.5 liệt kê các hành động của người dùng lên trang tìm kiếm cán bộ, trong đó:
o Cột name: là tên của sự kiện
Trang 23o Cột html: là cột lưu các thuộc tính của phần tử Web cần tương
tác (cách thức đặc tả giống như cột html của bảng
Element_html)
o Cột action: Hành vi của sự kiện, bao gồm: click (nhấn), addtext
(thêm một chuỗi ký tự), deltext (xóa một chuỗi ký tự), select
(chọn)
Như bảng 2.5, đặc tả 7 sự kiện người dùng tương tác lên trang Web tìm
kiếm cán bộ Sự kiện add_hoten xảy ra khi người dùng nhập họ tên cần tìm, hành vi của sự kiện là (addtext) thêm chuỗi tên cán bộ tìm kiếm vào phần tử Web có html là txtHoTen Chuỗi ký tự tên cán bộ nhập vào được lấy từ bảng
Element_html, nó là giá trị ở cột value thuộc dòng có html là txtHoTen (Son)
Các sự kiện del_hoten, add_sohieu, del_sohieu, sel_donvi, del_donvi được thực hiện tương tự Sự kiện còn lại là sự kiện người dùng chọn button tìm kiếm (timkiem), ứng với việc người dùng chọn click lên phần tử Web btnTimKiem Bảng Transition (Sự chuyển trạng thái): Bảng này chứa toàn bộ các transition
của trang Web
Bảng 2.6 Bảng các transition của trang tìm kiếm cán bộ
ten+so+
ketqua_tk
Số cột trong bảng transition tương ứng với số các trạng thái ở bảng State
Ở đầu mỗi hàng của cột đầu tiên là tên các trạng thái bắt đầu và mỗi cột từ cột
thứ hai trở đi là tên các trạng thái kết thúc của mỗi transition, các ô ở giữa có công thức [guard]event ([điều kiện] tên sự kiện) Có 3 kiểu giá trị của một ô trong bảng Transition:
o Chỉ có tên sự kiện (event): tồn tại một transition
Trang 24o Gồm cả điều kiện và sự kiện ([guard]event): khi điều kiện là
đúng thì transition được thực hiện
o Ô trống: Không có transition giữa hai trạng thái
Bảng 2.6 đặc tả các hàm chuyển trạng thái của trang tìm cán bộ Bảng này,
là một dạng đặc tả khác của ôtômát hữu hạn trạng thái (hình 2.4) Bảng
transition 2.6 gồm có 28 hàm chuyển trạng thái tương ứng với 28 đường chuyển
trạng thái của ôtômát Trạng thái bắt đầu và trạng thái kết thúc của ôtômát hữu
hạn trạng thái được đặc tả tương ứng trong bảng State
Mối liên kết giữa các bảng: Tệp tin Excel đặc tả trang Web tìm kiếm cán bộ gồm 4 bảng trên, 4 bảng này được nối lại như bảng 2.7
Bảng 2.7 tệp tin Excel đặc tả trang Web tìm kiếm cán bộ
Trang 253 add_sohieu txtSoHieu addtext
trạng thái trang Web được mô tả bằng tập hợp các trạng thái của tất cả các phần
tử Web Bảng Event liên kết với bảng Element_html thông qua cột html (các sự kiện được thực hiện trên các phần tử Web) Bảng Transition liên kết với bảng
Event thông qua các sự kiện, liên kết với bảng State thông qua các trạng thái
Các mối liên kết này được sử dụng để xây dựng ôtômát hữu hạn trạng thái và thực thi các sự kiện đối với trang Web tương ứng
Ứng dụng Web được xây dựng gồm nhiều trang Web Các trang Web này được thực hiện theo thứ tự tương tác người dùng Các tệp tin Excel được đánh
số lần lượt theo thứ tự đó Chúng tôi dựa trên thứ tự các tệp tin Excel, các trạng thái bắt đầu, trạng thái kết thúc của từng tệp tin, áp dụng thuật toán ghép nối được đề xuất ở phần trước để nối các ôtômát hữu hạn trạng thái lại thành một bản đặc tả cho toàn bộ ứng dụng Web
Việc xây dựng các tệp tin đầu vào yêu cầu người thiết kế phải có kỹ năng
về phân tích, thiết kế hệ thống và phải hiểu rõ chi tiết hoạt động của hệ thống thì mới xây dựng được các tệp tin tốt (có khả năng tìm được tối đa lỗi của ứng dụng Web) Trong thực tế, các giao diện trang Web thường có quá nhiều các phần tử Web cần đặc tả và số lượng các trạng thái Web là rất lớn, không thể biểu diễn hết trong một trang Excel Vì vậy, công việc này rất mất thời gian và tiềm ẩn
Trang 26nhiều nguy cơ sai sót trong quá trình thực hiện Người thiết kế cần sử dụng các tiện ích hỗ trợ biểu diễn ôtômát hữu hạn trạng thái và tạo tự động các bảng
Transition để giải quyết những khó khăn trên Một tiện ích hỗ trợ đã được giới
thiệu tại [5] Ngoài ra còn một số yêu cầu về thiết kế trang Web nhằm phục vụ cho việc đặc tả ứng dụng Web bằng phương pháp đã nêu trên như sau
Một số yêu cầu về thiết kế trang Web Phương pháp của chúng tôi yêu cầu các
phần tử Web (html trong tất cả tệp tin Excel) có tên là duy nhất Các phần tử
web không có id định danh thì cần phải có các thuộc tính khác để xác định được
nó như: Name, ClassName hoặc định danh phần tử Web chứa nó Đối với giao diện pop-up cần phải có thông tin (text) hiển thị trên hộp thoại Đối với việc đặc
tả các phần tử Web động Người thiết kế tệp tin cần phải đặc tả phần tử Web đó
(cột html trong tệp tin Excel) qua các thuộc tính của phần tử Web chứa nó và
giữa các thuộc tính này được phân cách bởi dấu “|” Ví dụ:
“id:DataGrid1|tag:tr|Bướu tân sinh|value:Chọn” là một đặc tả phần tử Web động Đây là một đặc tả về một bản ghi có giá trị là Bướu tân sinh trong một
datagrid gồm danh sách các bệnh Bản ghi này được sinh ra tự động bởi người
dùng và không có thuộc tính id Vì thế, chúng ta phải xác định phần tử Web
Bướu tân sinh thông qua phần tử Web chứa nó là datagrid có id là DataGrid1,
thẻ chứa nó là thẻ tr và một nút được sử dụng thực hiện sự kiện với bản ghi này
là chọn Mỗi loại phần tử Web động sẽ được quy định một cách đặc tả khác
nhau
Trang 27Chương 3: Sinh và thực thi các ca kiểm thử tự động
Chương 2 đã trình bày phương pháp đặc tả hình thức tương tác giao diện ứng dụng Web như là một ôtômát hữu hạn trạng thái và được biểu diễn dưới dạng các tệp tin Excel Chương này, chúng tôi sẽ trình bày hai thuật toán sinh tự động các ca kiểm thử từ phương pháp đặc tả mô hình trên Thuật toán thứ nhất
là thuật toán mở rộng của thuật toán duyệt đồ thị theo chiều sâu Thuật toán thứ hai là thuật toán bổ sung cho thuật toán thứ nhất Thuật toán thứ hai sẽ thêm các trạng thái ngay sau trạng thái cuối của một số đường dẫn được sinh ra từ thuật toán thứ nhất, để đảm bảo trạng thái cuối cùng của mỗi đường dẫn kiểm thử là trạng thái kết thúc của đồ thị Tiếp theo là trình bày về việc thực thi các đường dẫn kiểm thử đó trên ứng dụng Web để tìm ra lỗi lập trình liên quan đến tương tác giao diện người dùng Cuối chương là đánh giá về phương pháp đặc tả và sinh các ca kiểm thử
3.1 Sinh các ca kiểm thử từ mô hình đặc tả hình thức
3.1.1 Đường dẫn kiểm thử
Trong nghiên cứu này, các đường dẫn kiểm thử được sinh ra từ thuật toán
có cấu trúc như sau: <trạng thái bắt đầu> * <sự kiện i > = <trạng thái i > * =
<trạng thái kết thúc> [5] Đường dẫn bắt đầu từ trạng thái bắt đầu của hệ thống,
nếu sự kiện <sự kiện i> xảy ra thì hệ thống sẽ chuyển sang trạng thái tiếp theo
<trạng thái i> Tiếp tục cho đến hết, trạng thái cuối cùng của đường dẫn chính là trạng thái kết thúc của hệ thống
Mỗi đường dẫn kiểm thử là một chuỗi các hành động mà người dùng tương tác với ứng dụng Web Thuật toán sinh đường dẫn kiểm thử phải thỏa mãn các yêu cầu [5] sau:
- Đảm bảo tất cả các đỉnh và các cạnh của đồ thị đều phải được duyệt qua
- Kết quả trả về là các đường dẫn không trùng nhau Mỗi đường dẫn kiểm thử có trạng thái bắt đầu chính là trạng thái bắt đầu của ôtômát hữu hạn trạng thái đặc tả trang Web mốc, và có trạng thái kết thúc là một trong những các trạng thái kết thúc của ôtômát hữu hạn trạng thái Giữa hai trạng thái là một sự kiện
Trang 283.1.2 Thuật toán sinh tự động các đường dẫn kiểm thử
Khi chúng ta đã xây dựng được mô hình đặc tả chính xác hành vi của hệ thống, một trong những công việc khó khăn còn lại là làm thế nào để sinh được các ca kiểm thử từ mô hình này [1] Để làm việc này, với mỗi mô hình được đặc
tả bằng FSA, chúng ta có thể coi nó như là một đồ thị chuyển trạng thái và áp dụng một trong các phương pháp: duyệt ngẫu nhiên, duyệt theo chiều sâu hoặc duyệt theo chiều rộng trên đồ thị đó, thông qua các trạng thái và các chuyển trạng thái giữa chúng Một đường đi từ trạng thái khởi tạo đến một trạng thái kết thúc tương ứng với một ca kiểm thử chúng ta muốn tạo ra [1]
Để đảm bảo tất cả các đường đi có thể trong FSA phải được kiểm thử, chúng ta có thể áp dụng các thuật toán duyệt FSA theo chiều rộng hoặc theo chiều sâu [1] Trong nghiên cứu này, chúng tôi áp dụng thuật toán duyệt đồ thị theo chiều sâu nhằm liệt kê tất cả các đường đi có thể trong FSA Chi tiết các bước của thuật toán tìm kiếm theo chiều sâu (Depth First Search) được trình bày trong thuật toán 1 [5]
Thuật toán 1 (Depth First Search): thuật toán sinh các đường dẫn từ đồ thị chuyển trạng thái
Input: đồ thị chuyển trạng thái
Output: dãy các trạng thái có thể/ chuỗi đường dẫn
Depth_First_Search: int I, path PATH
1 // PATH là biến lưu các test path
2 // arr là biến lưu test path tạm thời
3 Bool backTrack = true;
4 for tất cả các cạnh do
5 if cạnh chưa được duyệt then
6 backTrack = false;
7 Thông báo cạnh đã được duyệt;
8 Thêm đỉnh vào arr;
9 Depth_First_Search: j, PATH;
10 Bỏ đỉnh khỏi arr
11 end if
12 end for
Trang 2913 if backTrack == true then
14 Thêm arr vào PATH;
backTrack được gắn giá trị false (dòng 6) và trạng thái bắt đầu của transition
được thêm vào chuỗi arr - biến lưu các đường dẫn kiểm thử tạm thời (dòng 8)
rồi thông báo cạnh đã được duyệt (dòng 7) Thuật toán được gọi đệ quy với đầu
vào là trạng thái cuối của transition vừa duyệt (dòng 9) cho đến khi không thêm được transition nào vào đường dẫn kiểm thử arr Khi đó biến backTrack có giá trị true (dòng 13), arr được thêm vào PATH (dòng 14) Cuối cùng, các trạng thái trong arr được loại bỏ để bắt đầu tạo một đường dẫn kiểm thử mới (dòng 10)
Thuật toán 1 là sự mở rộng của thuật toán duyệt đồ thị theo chiều sâu Vì thế, tất cả các cạnh của đồ thị sẽ được duyệt qua sau khi áp dụng thuật toán tìm kiếm theo chiều sâu Tuy nhiên, trong một số trường hợp sẽ có đường dẫn kiểm thử mà trạng thái bắt đầu là trạng thái bắt đầu của đồ thị còn trạng thái kết thúc của nó không phải là trạng thái kết thúc của đồ thị Do đó, phương pháp dựa vào việc sử dụng thuật toán 2 [5] để hoàn thiện các đường dẫn kiểm thử theo tiêu chí: trạng thái cuối cùng của mỗi đường dẫn kiểm thử là một trạng thái kết thúc của đồ thị
Thuật toán 2 (ADD_Path): Thuật toán thêm các trạng thái
Input: tập các đường dẫn kiểm thử PATH
Output: tập các đường dẫn kiểm thử hoàn chỉnh
ADD_Path: path PATH
1 loop
2 for các test path của PATH do
3 if trạng thái cuối cùng của test path i không là trạng thái kết thúc then
4 while trạng thái cuối cùng của test path i không là trạng thái kết thúc do
5 for tất cả các cạnh của đồ thị do