Cuối cùng luận văn sẽ áp dụng trực tiếp kiểm thử tự động giao diện sử dụng công cụ Ranorex vào để kiểm thử phần mềm bảo mật password Keepass nhằm phát hiện một số lỗi tương tác giao diện
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI
Trang 2ĐẠI HỌC QUỐC GIA HÀ NỘI
Trang 3MỤC LỤC
LỜI CẢM ƠN ii
LỜI CAM ĐOAN iii
BẢNG CÁC TỪ VIẾT TẮT iv
DANH MỤC HÌNH VẼ v
DANH MỤC BẢNG BIỂU vi
Chương 1: Đặt vấn đề 1
1.1 Sự cần thiết của đề tài 1
1.2 Nội dung của luận văn 2
1.3 Cấu trúc của luận văn 3
Chương 2: Tổng quan về kiểm thử giao diện người dùng tự động 4
2.1 Kiểm thử phần mềm 4
2.2 Kiểm thử tự động phần mềm 5
2.3 Kiểm thử giao diện người dùng 10
2 4 Một số kỹ thuật kiểm thử giao diện người d ng 11
Chương 3: Kiểm thử giao diện người dùng sử dụng Ranorex 24
3.1 Giới thiệu về Ranorex 24
3 2 Tính năng nổi bật 25
Chương 4: Ứng dụng và thực nghiệm 35
4.1 Giới thiệu về phần mềm Keepass 35
4.2 Thực nghiệm 36
Chương 5 Kết luận 44
TÀI LIỆU THAM KHẢO 46
Trang 4LỜI CẢM ƠN
Lời đầu tiên, tôi xin bày tỏ sự cảm ơn chân thành đối với Thầy giáo PGS
TS Phạm Ngọc Hùng - Giáo viên hướng dẫn trực tiếp của tôi Thầy Hùng đã cho tôi những gợi ý và chỉ dẫn quý báu trong quá trình nghiên cứu và hoàn thiện luận văn thạc sĩ
Tôi cũng xin gửi lời cảm ơn tới các thầy cô trong khoa Công nghệ thông tin, trường Đại học Công nghệ, Đại học Quốc gia Hà Nội đã hướng dẫn, chỉ bảo
và tạo điều kiện cho chúng tôi học tập và nghiên cứu tại trường trong suốt thời gian qua
Tôi cũng xin được cảm ơn gia đình, những người thân, các đồng nghiệp và bạn bè tôi đã quan tâm, động viên, giới thiệu các tài liệu hữu ích trong thời gian học tập và nghiên cứu luận văn tốt nghiệp
Mặc dù đã cố gắng hoàn thành luận văn nhưng chắc chắn sẽ không tránh khỏi những sai sót, tôi kính mong nhận được sự thông cảm và chỉ bảo của các thầy cô và các bạn
Tôi xin chân thành cảm ơn!
Trang 5LỜI CAM ĐOAN
Tôi là Nguyễn Thị Thu Hà, học viên lớp Kỹ Thuật Phần Mềm K23 xin cam đoan báo cáo luận văn này được viết bởi tôi dưới sự hướng dẫn của thầy giáo, PGS TS Phạm Ngọc Hùng Tất cả các kết quả đạt được trong luận văn này là quá trình tìm hiểu, nghiên cứu của riêng tôi Trong toàn bộ nội dung của luận văn, những điều được trình bày là kết quả của cá nhân tôi hoặc là được tổng hợp
từ nhiều nguồn tài liệu khác Các tài liệu tham khảo đều có xuất xứ rõ ràng và được trích dẫn hợp pháp
Tôi xin hoàn toàn chịu trách nhiệm và chịu mọi hình thức kỷ luật theo quy định cho lời cam đoan của mình
Hà Nội, ngày … tháng …… năm 2018
Người cam đoan
Nguyễn Thị Thu Hà
Trang 6BẢNG CÁC TỪ VIẾT TẮT
STT Từ viết tắt
và thuật ngữ Từ/Cụm từ đầy đủ Giải thích
interface
Giao diện lập trình ứng dụng
dùng
Environment
Là phần mềm cung cấp môi trường tích hợp cho các lập trình viên
Hệ thống quản lý, kiểm tra các phiên bản mã nguồn
Trang 7DANH MỤC HÌNH VẼ
Hình 2.1 Mô hình chữ V 5
Hình 2.2 Qui trình kiểm thử phần mềm 8
Hình 2.3 Qui trình kiểm thử tự động phần mềm 9
Hình 2.4 Kiểm thử giao diện thủ công 12
Hình 3 1 Tính năng nhận dạng đối tượng mạnh mẽ 26
Hình 3.2 Hình ảnh chỉnh sửa các hành động 27
Hình 3.3 Hình mô tả các hành động đã được ghi 28
Hình 3.4 Chỉnh sửa mã trong Ranorex 29
Hình 3.5 Tích hợp Visual Studio 30
Hình 3.6 Kết quả phân tích lỗi 33
Hình 3.7 Kích hoạt chế độ bảo trì 34
Hình 4.1 Mở và chạy chương trình thử nghiệm 36
Hình 4.2 Cửa sổ mật khẩu hiển thị 37
Hình 4.3 Giao diện chính của chương trình 37
Hình 4.4 Giá trị ban đầu khi thực hiện thử nghiệm 38
Hình 4 5 Các hành động được ghi khi thực hiện thử nghiệm 39
Hình 4.6 Kết quả chạy thử nghiệm từ thử nghiệm 39
Hình 4 7 Đoạn mã chứa lỗi 40
Hình 4.8 Giao diện hiển thị sự sắp xếp các phần tử 41
Hình 4.9 Hiển thị các hành động khi thực thi chương trình 41
Hình 4.10 Kết quả khi thực thi 42
Hình 4 11 Đoạn mã chương trình gây ra lỗi 42
Trang 8DANH MỤC BẢNG BIỂU
Bảng 2.1 So sánh mức độ thân thiện khi sử dụng công cụ QTP, Selenium và Ranorex 18 Bảng 2 2 So sánh tính năng sử dụng của Selenium, QTP và Ranorex 19 Bảng 2.3 Một số tính năng chuyên sâu của Selenium, QTP và Ranorex 21
Trang 9Chương 1: Đặt vấn đề
1.1 Sự cần thiết của đề tài
Trong vài thập kỉ qua, ngành công nghiệp phần mềm đã có những bước phát triển lớn cả về quy mô và chất lượng, đóng vai trò quan trọng vào sự phát triển của hầu hết mọi mặt của các nước Nếu như trước đây, phần mềm máy tính chỉ được sử dụng để tính toán khoa học kỹ thuật và xử lý dữ liệu, thì ngày nay,
nó đã được ứng dụng vào mọi mặt của đời sống hàng ngày của con người Các ứng dụng của phần mềm trong cuộc sống rất đa dạng từ các ứng dụng nhỏ để điều khiển các thiệt bị gia dụng như điện thoại, máy giặt, ti vi, tủ lạnh đến các ứng dụng lớn hơn cho rất nhiều người dùng cùng sử dụng như hệ thống quản lý doanh nghiệp, các hệ thống hướng dẫn giao thông, hệ thống quản lý việc khám chữa bệnh, v.v Điều này đòi hỏi chất lượng phần mềm ngày càng phải được nâng cao để đáp ứng nhu cầu của người sử dụng
Tuy nhiên, quá trình tạo ra một sản phẩm phần mềm có thể sử dụng tốt không thể tránh khỏi những lỗi phần mềm Chúng ta dù cố gắng đến mức nào thì thực tế là ngay cả những lập trình viên xuất sắc nhất cũng không thể lúc nào cũng viết được những đoạn mã không có lỗi Tính trung bình, ngay cả một lập trình viên loại tốt thì cũng có từ một đến ba lỗi trên một trăm dòng lệnh Người
ta ước lượng rằng việc kiểm tra để tìm ra các lỗi này chiếm phân nửa khối lượng công việc phải làm để có một phần mềm hoạt động được [3]
Do vậy, kiểm thử phần mềm là khâu rất quan trọng của sản phẩm trước khi đưa vào sử dụng, góp phần quyết định sự thành công của dự án phần mềm Tuy nhiên, kiểm thử là một công việc tiêu tốn rất nhiều thời gian, tiền bạc, công sức Chi phí kiểm thử phần mềm thường chiếm tới bốn mươi phần trăm tổng chi phí cho một dự án phát triển phần mềm Đối với các phần mềm lớn, chi phí này còn tăng lên gấp bội mỗi khi có sự thay đổi, nâng cấp các chức năng của phần mềm, điều này là không thể tránh khỏi đối với mọi phần mềm
Một sản phẩm tuy được thiết kế tốt nhưng cũng không thể tránh khỏi các sai sót Kiểm thử hiệu quả sẽ phát hiện ra được các sai sót này, tránh các lỗi
Trang 10trước khi phát hành sản phẩm Kiểm thử đứng dưới vai trò của người sử dụng, sẽ giúp cho sản phẩm có sự thích ứng phù hợp hơn với thị hiếu và nhu cầu ngày càng cao của người dùng Trên thị trường hiện nay có rất nhiều công cụ kiểm thử tự động được sử dụng như Ranorex, QTP, Selenium, v.v Đề tài này tìm hiểu
về các công cụ hỗ trợ kiểm thử tương tác giao diện cho các ứng dụng và đi sâu nghiên cứu công cụ Ranorex vì nó có rất nhiều ưu điểm như hỗ trợ đa nền tảng,
hỗ trợ nhiều ứng dụng trên Web, Desktop, Mobile Ranorex có khả năng xác định chính xác các đối tượng có trong UI hiện nay Hơn nữa, công cụ này hỗ trợ
cơ chế “ghi và chạy lại” kịch bản tương tác UI rất mạnh mẽ Công cụ này cũng cho phép kiểm thử viên tùy chỉnh kịch bản tương tác UI bằng cách thêm trực tiếp các đoạn mã nhằm tăng tính linh hoạt trong kiểm thử tự động Giao diện đồ họa người dùng (Graphical user interface – GUI) là những gì người dùng nhìn thấy Nếu bạn truy cập vào một trang Web, những gì bạn thấy trên trang chủ được gọi là giao diện đồ họa người dùng của trang Web Người dùng sẽ không nhìn thấy mã nguồn, giao diện người dùng chỉ tập trung vào cấu trúc thiết kế, hình ảnh hiển thị ra ngoài có đúng như lập trình mong đợi hay không [11] Nếu chúng ta phải làm thử nghiệm GUI, việc đầu tiên cần xác định xem những hình ảnh của trang Web sẽ hiện lên giống nhau trên các trình duyệt khác nhau Ngoài
ra, kiểm thử GUI còn xác nhận các liên kết hoặc các nút hoạt động tốt hay không, nếu người dùng thay đổi kích thước màn hình thì hình ảnh và nội dung không được co lại hoặc cắt đi hay chồng chéo lên nhau [11] Để đạt được mục tiêu này, luận văn cũng sẽ nghiên cứu về kiểm thử giao diện tự động và các kiến thức liên quan Cuối cùng luận văn sẽ áp dụng trực tiếp kiểm thử tự động giao diện sử dụng công cụ Ranorex vào để kiểm thử phần mềm bảo mật password Keepass nhằm phát hiện một số lỗi tương tác giao diện cho ứng dụng này
1.2 Nội dung của luận văn
Với mục đích như trên, luận văn có những nội dung như sau: Luận văn tổng hợp lý thuyết về kiểm thử phần mềm, kiểm thử tự động, kiểm thử giao diện
tự động - một giải pháp góp phần nâng cao năng suất, chất lượng hoạt động
Trang 11kiểm thử phần mềm Luận văn giới thiệu về một số công cụ hỗ trợ kiểm thử giao diện tự động trong đó sẽ đi tìm hiểu sâu về công cụ Ranorex Luận văn sẽ mô tả từng bước quá trình áp dụng kiểm thử giao diện tự động với công cụ Ranorex từ
đó giúp phần mềm giảm bớt chi phí kiểm thử cũng như tiết kiệm được thời gian
và nhân lực kiểm thử của các kiểm thử viên Việc phát hiện các lỗi tương tác giao diện sẽ góp phần nâng cao chất lượng sản phẩm nói chung và tăng khả năng chấp nhận và sự hài lòng của người dùng đối với sản phẩm
1.3 Cấu trúc của luận văn
Phần còn lại của luận văn được cấu trúc như sau Chương 2 giới thiệu tổng quan về kiểm thử, kiểm thử giao diện người dùng và các khái niệm cơ bản được
sử dụng trong nghiên cứu của luận văn Chương này chủ yếu giới thiệu về kiểm thử, kiểm thử tự động và kiểm thử giao diện tự động, một số phương pháp hỗ trợ kiểm thử giao diện người dùng Tiếp đến, kiểm thử giao diện người dùng sử dụng Ranorex sẽ được mô tả trong Chương 3 Trong chương này sẽ giới thiệu chi tiết về công cụ kiểm thử giao diện tự động Ranorex Cơ chế hoạt động sinh kịch bản, chạy kịch bản và xuất ra kết quả của công cụ, giới thiệu cả những tính năng ứng dụng nổi bật của công cụ Từ đó, luận văn sẽ tổng kết những tính năng nổi bật khi sử dụng công cụ Ranoex trong những dự án lớn Chương 4 là việc ứng dụng và thực nghiệm Công cụ kiểm thử giao diện tự động sẽ được đưa vào ứng dụng thực tế trong chương trình phần mềm bảo mật password Keepass nhằm minh chứng cho khả năng vận dụng các kiến thức tìm hiểu được của học viên Cuối cùng, tổng kết những kết quả đạt được của luận văn và hướng nghiên cứu tiếp theo sẽ được trình bày trong Chương 5
Trang 12Chương 2: Tổng quan về kiểm thử giao diện người dùng tự động
Hiện nay, phần mềm được sử dụng rất rộng rãi trong rất nhiều lĩnh vực như khoa học, kinh tế và xã hội Vì vậy, việc đảm bảo rằng phần mềm đáp ứng được các mong muốn của người sử dụng là rất quan trọng Kiểm thử phần mềm lúc này trở thành một trong những hoạt động cơ bản và cần thiết nhằm đảm bảo chất lượng phần mềm
Hiện nay, các công cụ hỗ trợ lập trình đã giúp cải thiện năng xuất làm việc của các lập trình viên lên rất nhiều chính điều này đã dẫn đến tăng áp lực lên các kiểm thử viên, những người gần như là sẽ phải hoàn thiện khâu cuối cùng và rất quan trọng trước khi đưa sản phẩm vào ứng dụng Điều này đòi hỏi kiểm thử viên phải kiểm thử nhiều hơn trong thời gian ít hơn Vì vậy, đòi hỏi kiểm thử viên phải tìm ra cách để vừa đảm bảo chất lượng phần mềm vừa đảm bảo tiến độ kiểm thử để không ảnh hưởng tới thời gian bàn giao sản phẩm Kiểm thử tự động được xem là giải pháp để giải quyết vấn đề trên vừa nâng cao hiệu suất vừa giảm thời gian kiểm thử
Trang 13Kiểm thử tự động là quá trình thực hiện một cách tự động các bước trong
một kịch bản kiểm thử Kiểm thử tự động sử dụng phần mềm kiểm thử (khác
biệt với kiểm thử bằng tay) để kiểm soát việc thực hiện các bài kiểm tra và so sánh kết quả thực tế với kết quả dự đoán Mục đích của kiểm thử tự động là tăng
độ tin cậy, tăng tính hiệu quả, giảm thời gian, công sức, kinh phí, giảm sự nhàm chán cho kiểm thử viên trong quá trình kiểm thử
Hình 2.1 Mô hình chữ V [4]
Hình 2.1 mô tả mô hình chữ V (V - model) đã khá quen thuộc đối với những người làm công việc kiểm thử nói riêng và phát triển phần mềm nói
Trang 14chung Mô hình này thể hiện một cách rõ nhất các hoạt động của kiểm thử từ giai đoạn kiểm thử mức đơn vị, kiểm thử tích hợp, kiểm thử hệ thống cho đến kiểm thử chấp nhận Tương ứng với mỗi công đoạn trong việc phát triển phần mềm là một hoạt động kiểm thử Phía bên tay trái là các hoạt động phát triển, phía bên tay phải là các hoạt động kiểm thử Với mỗi một mức kiểm thử chúng
ta đều có thể áp dụng kiểm thử tự động Trong giai đoạn phân tích yêu cầu các yêu cầu được thu thập, phân tích và nghiên cứu Ở giai đoạn này điều quan trong
là hệ thống có chức năng gì và thỏa mãn những ràng buộc gì (yêu cầu phi chức năng) Trong giai đoạn phân tích yêu cầu hệ thống, các yêu cầu của hệ thống phần mềm được xác định Khác với mô hình thác nước, trong giai đoạn này, chúng ta phải sinh ra các ca kiểm thử Nếu sản phẩm sau này thỏa mãn các ca kiểm thử này thì nó sẽ đáp ứng các yêu cầu đặt ra Tương tự, ở giai đoạn thiết kế kiến trúc, dựa trên thiết kế mức cao kiến trúc phần mềm được tạo ra, các mô- đun, mối quan hệ, sơ đồ kiến trúc, bảng cơ sở dữ liệu, chi tiết về công nghệ đều được hoàn tất trong giai đoạn này Giai đoạn thiết kế mô-đun các thành phần phần mềm đều được thiết kế riêng Các lớp, giao diện, kiểu dữ liệu v.v đều được hoàn tất trong giai đoạn này Giai đoạn mã hóa, ở giai đoạn này các đoạn
mã được kiểm tra xem xét Dựa trên mô hình chữ V, chúng ta có thể chia kiểm thử tự động thành bốn cấp độ/mức (testing levels) như sau:
- Kiểm thử mức đơn vị (Unit testing)
- Kiểm thử tích hợp (Integrtion test)
- Kiểm thử hệ thống (System test)
- Kiểm thử chấp nhận (Acceptance test)
Kiểm thử tự động mức đơn vị (Unit test): Là kiểm thử mức đầu tiên được
thực hiện khi phát triển các sản phẩm phần mềm Công việc kiểm thử mức đơn
vị rất nhanh và có tính tin cậy cao vì chỉ thực hiện ở mức đơn vị Khi đó kiểm thử viên thường lập trình luôn, khi tạo ra một hàm hoặc một thủ tục, ngay sau đó lập trình viên thường tạo luôn các ca kiểm thử để thực hiện kiểm thử ngay lập tức mà không cần phải chờ đến khi hoàn thiện sản phẩm Kiểm thử tự động mức
Trang 15đơn vị chiếm khối lượng các bộ kiểm thử nhiều nhất và các công cụ kiểm thử cũng rất đa dạng Các công cụ kiểm thử tự động áp dụng cho mức kiểm thử này như Junit, Selenium v.v
Kiểm thử mức tích hợp (Integration test): Kiểm thử tích hợp thực hiện
những phần mà kiểm thử mức đơn vị chưa bao phủ và chưa được kiểm thử Nhằm phát hiện ra lỗi giao tiếp xảy ra giữa các thành phần (nếu có) Các thành phần đó có thể là các mô-đun, các ứng dụng riêng lẻ hay các ứng dụng khách hàng/máy chủ (Client/Server) trên một mạng Mục tiêu của kiểm thử tích hợp là phát hiện ra lỗi giao tiếp xảy ra giữa các đơn vị (Unit) và tích hợp các đơn vị (Unit) đơn lẻ thành các hệ thống để chuẩn bị kiểm tra mức hệ thống Kiểm thử tích hợp mất nhiều thời gian, chậm và khó để tự động, cần phải lập trình nhiều hơn kiểm thử mức đơn vị Kiểm thử mức tích hợp chưa có nhiều công cụ hỗ trợ kiểm thử
Kiểm thử mức hệ thống (System test): là một mức của tiến trình kiểm thử
phần mềm Mục tiêu của kiểm tra mức hệ thống là đánh giá phần mềm có tuân thủ theo các yêu cầu đã đưa ra không Kiểm thử hệ thống khác với kiểm thử tích hợp là chú trọng các hành vi và lỗi trên toàn hệ thống, còn kiểm thử tích hợp chỉ chú trọng việc giao tiếp giữa các đơn thể hoặc đối tượng khi chúng làm việc cùng nhau Thông thường chúng ta phải thực hiện kiểm thử đơn vị và kiểm thử tích hợp để đảm bảo mọi đơn vị (Unit) và sự tương tác giữa chúng hoạt động chính xác trước khi kiểm thử hệ thống
Kiểm thử chấp nhận (Acceptance test): là một cấp độ trong tiến trình kiểm
thử phần mềm nhằm kiểm thử hệ thống và khả năng chấp nhận được của hệ thống Mục tiêu của kiểm thử này là để đánh giá sự tuân thủ của hệ thống với các yêu cầu nghiệp vụ và thẩm định xem đã có thể bàn giao được chưa Thông thương khâu này sẽ được khách hàng thực hiện hoặc ủy quyền cho một nhóm thứ ba thực hiện
Trang 16- Qui trình kiểm thử:
Hình 2.2 Qui trình kiểm thử phần mềm [4]
Hình 2.2 mô tả qui trình kiểm thử phần mềm theo các bước Bước một: Phân tích yêu cầu, việc đầu tiên là cần tiếp nhận và phân tích các yêu cầu được đặt ra, khi hiểu được yêu cầu của sản phẩm thì mới có thể có một kế hoạch cụ thể cho các bước tiếp theo Bước hai: Lập kế hoạch kiểm thử, bước này cần lập một kế hoạch kiểm thử rõ ràng, xác định và phân chia một cách hợp lý thời gian, nhân sự, các công cụ cần để sử dụng cho từng chức năng Bước ba: Thiết kế kịch bản kiểm thử viết các trường hợp kiểm thử, viết kịch bản kiểm thử (testcase) cho các trường hợp sẽ kiểm thử (test) bao gồm ba trường hợp: Kiểm thử thành công, kiểm thử không thành công và không xác định kết quả Bước bốn: Thiết lập môi trường kiểm thử, bước này bạn cần phải chuẩn bị môi trường, nền tảng cho công việc kiểm thử phần mềm của mình bao gồm: hệ điều hành,
Trang 17trình duyệt, thiết bị Bước năm: Thực hiện kiểm thử, tiến hành thực thi các kịch bản kiểm thử để thực hiện việc kiểm thử Quá trình này cũng có thể cập nhập thêm một số trường hợp còn thiếu hoặc trường hợp phát sinh thêm Bước sáu: Đóng chu trình kiểm thử, kết thúc công việc kiểm thử chúng ta cần báo cáo hoặc ghi lại các kịch bản đồng thời thống kê lại số liệu cụ thể
- Qui trình kiểm thử tự động:
Hình 2.3 Qui trình kiểm thử tự động phần mềm [3]
Hình 2.3 mô tả qui trình kiểm thử tự động bao gồm bốn bước Bước một: Phân tích khả năng áp dụng kiểm thử tự động, chúng ta không thể tự động hoá mọi việc trong kiểm thử phần mềm được Có những phần mềm mới hay công nghệ viết ra phần mềm mà những công cụ kiểm thử tự động hiện tại chưa hỗ trợ hoặc chỉ hỗ trợ một phần Ví dụ rõ ràng nhất là khi chúng ta kiểm thử một trang Web trên một trình duyệt mới, và lúc đó công cụ kiểm thử tự động chưa có phiên bản mới hỗ trợ trên trình duyệt đó Bước hai: Lựa chọn công cụ kiểm thử
tự động thích hợp, sau khi xác định được sản phẩm hiện tại có thể làm kiểm thử
tự động hay không, bước kế tiếp chúng ta cần xác định nên sử dụng công cụ kiểm thử tự động nào Công cụ nào hỗ trợ kiểm thử tự động cho công nghệ mà sản phẩm sử dụng? Ưu nhược điểm của từng công cụ? Ngôn ngữ kịch bản nào
Trang 18mà công cụ kiểm thử sử dụng? Nhân sự hiện tại có quen thuộc với công cụ đó hay không? Bước ba: Xây dựng môi trường làm việc, môi trường làm việc bao gồm các khái niệm, chu trình, thủ tục và môi trường mà kịch bản kiểm thử tự động được thiết kế và viết ra Bên cạnh đó, nó cũng nên bao gồm luôn cấu trúc thư mục, lưu trữ các kịch bản kiểm thử cũng như các mối quan hệ logic giữa các thành phần Bước bốn: Viết kịch bản kiểm thử, thực thi và phân tích kết quả, dựa trên các kịch bản kiểm thử đã được tạo ra bằng kiểm thử thủ công, dựa vào ngôn ngữ kịch bản mà công cụ kiểm thử tự động hỗ trợ, chúng ta viết các đoạn
mã tương tác với sản phẩm phần mềm trên các môi trường và thực thi nó Sau khi thực thi các đoạn mã, chúng ta cần phân tích các kết quả đạt được và ghi lại các vấn đề của sản phẩm, nếu có
2.3 Kiểm thử giao diện người dùng
Giao diện người dùng (User Interface - UI) là một phương thức giao tiếp giữa con người với các thiết bi, máy móc và chương trình máy tính Trong lĩnh vực phát triển phần mềm, UI được thiết kế nhằm mục đích giúp con người điều khiển, sử dụng, tương tác với các chương trình phần mềm để đạt được mục đích
sử dụng của người dùng Trong lịch sử phát triển, UI được chia thành nhiều dạng Trong đó, hai dạng UI được sử dụng phổ biến cho tới ngày nay là giao diện dòng lệnh (Command-line interface) và giao diện đồ họa người dùng (Graphical user interface - GUI) [1]
Giao diện dòng lệnh là giao diện được thiết kế để người sử dụng có thể tương tác bằng bàn phím thông qua các câu lệnh Giao diện này thường được phát triển đi kèm với một chương trình xử l các câu lệnh và chuyển đổi chúng sang các thao tác hệ thống tương ứng Ưu điểm của việc sử dụng giao diện dòng lệnh là tốc độ xử lý nhanh, linh hoạt và khả năng truy cập sâu hơn vào hệ thống Ngày nay, giao diện dòng lệnh người dùng đang dần trở nên kém phổ biến, GUI được ưa chuộng hơn bởi tính dễ sử dụng, đặc biệt đối với những người dùng thông thường không có kinh nghiệm
Trang 19GUI là một dạng của UI cho phép người dùng tương tác với các thiết bị điện tử thông qua hình ảnh và chữ viết thay cho việc sử dụng các dòng lệnh đơn thuần GUI được giới thiệu để khắc phục các nhược điểm của giao diện dòng lệnh Một trong số các nhược điểm của giao diện dòng lệnh là tiêu tốn nhiều chi phí về thời gian và công sức để học và nhớ các câu lệnh điều khiển Các hành động người dùng thực hiện lên GUI thường là các thao tác trực tiếp với các đối tượng đồ họa Ngoài máy tính, GUI được sử dụng trên hầu hết các thiết bị cầm tay như máy nghe nhạc, máy chơi điện tử cầm tay, điện thoại thông minh, các công cụ văn phòng, v.v
Hay ta có thể hiểu đơn giản rằng: Kiểm thử giao diện người dùng là một kỹ thuật kiểm thử được sử dụng để xác định sự hiện diện của các khiếm khuyết trên một sản phẩm hoặc phần mềm được kiểm tra bằng cách sử dụng giao diện người dùng đồ họa Kiểm thử GUI là một kỹ thuật kiểm thử trong đó giao diện người dùng của ứng dụng được kiểm tra xem ứng dụng có hoạt động như mong đợi đối với hành vi giao diện người dùng hay không Kiểm tra GUI bao gồm hành vi ứng dụng đối với chuyển động bàn phím, chuột và cách các đối tượng GUI khác nhau như thanh công cụ, nút, thanh thực đơn, hộp thoại, chỉnh sửa trường, danh sách, hành vi cho người dùng nhập [1]
2 4 Mộ phương ph p iểm hử giao iện người ng
iểm hử giao iện người ng hủ công: Dựa trên tri thức, hiểu biết về
miền của kiểm thử viên Kiểm thử viên tập trung kiểm thử các chức năng quan trọng của hệ thống hay các kịch bản có thể gây ra lỗi Tuy nhiên, rất nhiều kịch bản quan trọng có thể bị bỏ sót khi kiểm thử thủ công Trong thực tế, thường có một nhóm các chuyên gia tập trung giải quyết vấn đề bằng cách đánh giá qua kinh nghiệm, tìm giải pháp qua thử nghiệm và rút bớt khuyết điểm Một kỹ thuật khác được sử dụng là đi qua có nhận thức (Cognitive walkthrough) Kiểm thử viên lần lượt sử dụng các chức năng của chương trình, các hành động và phản hồi được ghi lại để đối chiếu với mục tiêu k vọng Cuối cùng, các điểm cần cải tiến, sửa chữa được ghi lại Ngoài ra, việc kiểm thử tính dễ sử dụng của chương
Trang 20trình cũng được kiểm thử viên tiến hành thủ công Kiểm thử UI thủ công có thể phát hiện được một số lỗi mà kiểm thử tự động không thể phát hiện được Tuy nhiên, phương pháp này yêu cầu nhiều chi phí về thời gian và nhân lực Đồng thời, độ phủ đạt được là không cao Đối với các hệ thống có UI phức tạp, kiểm thử thủ công là giải pháp không khả thi
Hình 2.4 Kiểm thử giao diện thủ công
Hình 2.4 mô tả cách thực thiện kiểm thử giao diện thủ công Khi kiểm thử giao giện thủ công chúng ta phải thêm từng bước thực hiện đều bằng tay Đầu vào của chương trình từng thao tác đều phải ghi lại mỗi khi thực hiện, việc này
sẽ là quá tải với kiểm thử viên khi vào dự án lớn và rất dể xảy ra sự nhầm lẫn khi kiểm thử
iểm hử giao iện người ng ựa n m h nh: Mô hình là một mô tả
đồ họa về hành vi của hệ thống Nó giúp chúng ta hiểu và dự đoán hành vi của
hệ thống Quá trình kiểm thử UI tự động dựa trên mô hình bao gồm ba giai đoạn chính như sau:
Mô hình hóa hệ thống từ các bản đặc tả và thiết kế của hệ thống: Hệ thống được mô hình hóa sử dụng công cụ mô hình hóa cùng với các bản đặc tả, phân tích thiết kế từ khách hàng Việc này giúp hiểu rõ hơn hệ thống cần kiểm thử và UI của hệ thống đó
Sinh kịch bản tương tác UI từ mô hình của hệ thống: Tùy thuộc vào tiêu chí và thuật toán sinh kịch bản tương tác UI mà số lượng kịch bản sinh ra là
Trang 21khác nhau Nhìn chung, kỹ thuật sinh kịch bản tương tác UI từ mô hình cho số lượng kịch bản và độ phủ lớn hơn nhiều so với các kỹ thuật kiểm thử UI khác Đây là một ưu điểm đáng chú của kỹ thuật này so với các kỹ thuật còn lại
Chạy các kịch bản tương tác UI trên chương trình cần kiểm thử để thu được kết quả Các dự đoán kết quả kiểm thử, giá tri đầu ra mong muốn được đưa vào trước đó để so sánh với giá tri kết quả thực tế sau khi chạy nhằm xác định kịch bản tương tác UI nào thành công Pha này có thể chạy tự động sử dụng các công cụ hỗ trợ nhằm giảm thiểu chi phí
Trong những năm gần đây đã có nhiều nghiên cứu về việc sử dụng các mô hình phù hợp cho kiểm thử UI tự động Trong đó, mô hình đồ thị là mô hình được sử dụng phổ biến để mô hình hóa UI của chương trình cần được kiểm thử
Mô hình này mô tả toàn bộ các chuỗi thao tác người dùng có thể thực hiện với các đối tượng có trên UI Một số dạng đồ thi được sử dụng để xây dựng mô hình như đồ thi dòng sự kiện, đồ thị tương tác sự kiện, v.v [1]
iểm thử giao iện người ng ng cách ghi v ch y i ịch ản tương tác: Kiểm tra GUI có thể được thực hiện bằng các công cụ tự động hóa
Việc này được thực hiện thành hai quá trình Trong quá trình ghi lại, các bước kiểm tra được bắt bởi công cụ tự động hóa Trong quá trình phát lại, các bước kiểm tra được ghi lại được thực hiện trên ứng dụng đang chạy thử
Kỹ thuật này được sử dụng rất phổ biến trong các công cụ kiểm thử UI hiện nay Các công cụ cài đặt kỹ thuật ghi và chạy lại kịch bản tương tác UI thường
dễ sử dụng đối với người mới bắt đầu, chưa có kinh nghiệm nhờ giao diện sử dụng trực quan Việc kiểm thử hồi quy cũng trở nên dễ dàng và nhanh chóng hơn Tuy nhiên, các công cụ này có một số hạn chế như ghi lại một số hành động không cần thiết, các đối tượng không được sắp xếp Đặc biệt, một sự thay đổi nhỏ trong thiết kế UI có thể dẫn tới việc thất bại trong hàng loạt kịch bản tương tác UI liên quan
Trang 222 5 Một c ng cụ iểm thử giao iện người ng tự động
Trong những năm qua, kiểm thử tự động nói chung và kiểm thử tự động tương tác giao diện người dùng thu hút sự quan tâm nghiên cứu rất lớn cả từ các nhà khoa học đến các công ty phát triển phần mềm Kết quả là đã có nhiều phương pháp và công cụ được đề xuất và xây dựng nhằm hỗ trợ mục tiêu này [7], [8] Tuy nhiên, về phương diện sử dụng, các kết quả nghiên cứu mới chỉ dừng lại ở mức độ thử nghiệm với một số ứng dụng đơn giản Các công cụ này cần thời gian để cải tiến trước khi đưa vào sử dụng Trong khuôn khổ luận văn này, em tiến hành tìm hiểu một số công cụ đã được sử dụng phổ biến tại các công ty phát triển phần mềm
Selenium
Selenium1 là một công cụ kiểm tra phần mềm được sử dụng để kiểm tra hồi quy (Regression Testing) Selenium được dùng để kiểm thử các ứng dụng trên nền Web Năm 2004, Selenium được phát triển bởi ThoughtWorks với tên ban đầu là JavaScriptTestRunner Đến năm 2007, tác giả Jason Huggins rời ThoughtWorks và gia nhập Selenium Team (thuộc Google), từ đó tiếp tục phát triển Selenium như hiện nay Đây là một công cụ kiểm tra mã nguồn mở cung cấp chức năng phát lại và thu âm để kiểm tra hồi quy
Bên cạnh mã nguồn mở, Selenium hỗ trợ một loạt các ngôn ngữ bao gồm Java, Python, PHP, C#, Ruby, thậm chí cả Java Script thuần túy Selenium là công cụ mã nguồn mở mạnh mẽ nhất có sẵn và nó dựa trên Java script trong một giới hạn lớn Nó phù hợp hơn cho phương pháp phát triển nhanh của việc phát triển và kiểm thử Tính năng ghi lại của Selenium được thực hiện như là một phần thêm vào trình duyệt Firefox, và cho phép ghi lại, chỉnh sửa và gỡ rối các kịch bản kiểm thử
Selenium bao gồm bốn phần: Selenium IDE, Selenium RC, Selenium Grid, Selenium WebDriver
Trang 23Selenium IDE là một công cụ cho phép chúng ta ghi lại một kịch bản và tái
sử dụng kịch bản đó Nó hoạt động như một thêm vào (Add-on) của trình duyệt Mozilla Firefox với giao diện trực quan, dễ sử dụng ngay với cả kiểm thử viên chưa biết về lập trình Với Selenium IDE, chúng ta chỉ có thể ghi lại kịch bản (Record) trên trình duyệt Mozilla Firefox nhưng có thể tái sử dụng kịch bản này trên nhiều trình duyệt khác như Internet Explorer, Google Chrome, v.v
Selenium RC cho phép các nhà phát triển tự động hóa quá trình kiểm thử bằng cách sử dụng bất ky ngôn ngữ lập trình nào, phát huy tối đa thế mạnh của Selenium trong kiểm thử đơn vị Để dễ dàng hơn cho việc kiểm thử, Selenium
RC cung cấp các API và thư viện cho mỗi ngôn ngữ được hỗ trợ: HTML, Java, Perl, PHP, Ruby, Python, C#
Selenium WebDriver là phiên bản kế nhiệm của Selenium RC Cũng giống như Selenium RC, Selenium WebDriver hỗ trợ viết kịch bản kiểm thử bằng các ngôn ngữ khác nhau như Java, NET, PHP, Python, Perl, Ruby và kiểm thử viên
có thể sử dụng các điều kiện if, else hay các vòng lặp để tăng tính chính xác cho kịch bản kiểm thử Selenium WebDriver có kiến trúc khá đơn giản, điều khiển trình duyệt trực tiếp từ hệ điều hành
Selenium Grid là một hệ thống hỗ trợ kiểm thử viên thực thi kịch bản kiểm thử trên nhiều máy, nhiều trình duyệt một cách song song mà không cần chỉnh sửa kịch bản kiểm thử Ban đầu, Selenium Grid chỉ hỗ trợ cho Selenium RC nhưng sau này đã xuất hiện trên cả Selenium WebDriver Selenium Grid cho phép kiểm thử viên thực thi ca kiểm thử trên nhiều máy khác nhau với nhiều trình duyệt khác nhau Đặc biệt hơn, Selenium Grid còn cung cấp khả năng kiểm thử với chế độ phân tán
HP Quick Test Pro (QTP) hoặc HPE Unified Functional Testing (UFT)
Quick Test Professional2 (QTP) là một công cụ kiểm thử tự động được thiết
kế bởi Mercury Interactive và sau đó được mua lại bởi HP QTP giúp người kiểm thử (tester) tiến hành các kiểm tra một cách tự động để xác định lỗi khác
Trang 24với kết quả mong muốn của ứng dụng, phần mềm hay chức năng v.v mà ta đang kiểm tra [10] QTP được sử dụng rộng rãi để kiểm tra chức năng (Functional Testing) và tiến hành các hoạt động kiểm thử hồi quy (Regression Testing), giải quyết các ứng dụng phần mềm Để đơn giản hóa việc tạo và bảo trì thử nghiệm,
nó sử dụng khái niệm kiểm tra từ khóa
Đây là một công cụ dễ sử dụng và vô cùng thân thiện, hoạt động tốt với các ứng dụng dựa trên Web và Windows Nó là một công cụ kiểm thử chức năng có tính năng lưu trữ ảnh chụp màn hình của mỗi trang trong suốt quá trình thực hiện Vì vậy, người dùng có thể tham khảo các ảnh chụp màn hình của lần thực thi trước nếu muốn tham khảo
Hỗ trợ ghi và phát lại QTP dựa trên ngôn ngữ Visual Basic Script (VB Script) nên không yêu cầu một lập trình viên có tay nghề cao và tương đối dễ dàng khi so sánh với các ngôn ngữ lập trình hướng đối tượng khác Hỗ trợ hầu hết các loại ứng dụng (không chỉ Web app còn có ứng dụng trên Desktop, Mobile app v.v) Rất hữu ích trong kiểm thử chức năng và kiểm thử hồi quy Cho phép theo sát nghiệp vụ dễ dàng khi tích hợp với công cụ quản lý kiểm thử cho phép lập kế hoạch và theo dõi dễ dàng Hỗ trợ cho các môi trường phát triển phần mềm như SAP, Oracle, NET, Java, v.v QTP hỗ trợ ứng dụng khác nhau như Oracle, Java, SAP, NET, Web Forms, People soft, v.v
Ranorex
Ranorex3 cung cấp một loạt các công cụ tự động hóa máy tính để bàn, Web
và di động được sử dụng để nâng cao chất lượng phần mềm của công ty Nó có thể thực thi kiểm thử chức năng và phi chức năng trên môi trường Win và Web,
hỗ trợ tất cả các trình duyệt hiện hành Kiểm thử Mobile trên các hệ điều hành Android, IOS Ranorex không có ngôn ngữ lập trình riêng của chính nó, thay vào đó, nó dùng ngôn ngữ lập trình như C# và VB.Net Công cụ hỗ trợ một số dạng kiểm thử dưới đây:
Trang 25 Kiểm thử hướng dữ liệu (Data Driven Test): Kiểm thử ứng dụng với các
dữ liệu đa dạng từ nguồn bên ngoài bằng cách kết nối SQL các bảng dữ liệu hoặc đưa vào từ các tệp CSV hay tệp Excel
Kiểm thử hồi quy: Tự động kiểm thử lại chương trình nhiều lần, đảm bảo chương trình không gặp lỗi bởi những đoạn mã mới
Kiểm thử đa nền tảng, đa thiết bị (Cross Platform & Device Testing): Tự động kiểm thử chương trình trên các thiết bị khác nhau như máy tính, điện thoại, máy tính bảng và các nền tảng khác nhau như Windows, IOS và Anddroid
Kiểm thử hướng từ khóa (Keyword Driven Test): Xây dựng các ca kiểm thử mọi người đều có khả năng đọc được bằng cách thêm một lớp trừu tượng và chia các phần kiểm thử thành các bước có thể hiểu được ví dụ như đăng nhập, tạo mới, chỉnh sửa, xóa, v.v
Kiểm thử đa trình duyệt: Tự động và đơn giản hóa quá trình kiểm thử ứng dụng Web cho nhiều trình duyệt khác nhau Một số trình duyệt web hỗ trợ như: Chrome, Firefox, Internet Explorer, v.v
Kiểm thử linh hoạt (Agile Testing): Kiểm thử có độ ưu tiên cao, tích hợp kiểm thử tự động vào môi trường phát triển linh hoạt và liên tục nhằm phát hiện lỗi sớm và đẩy nhanh quá trình phát hành phần mềm
Kiểm thử giao diện đồ họa người dùng tự động (Automated GUI Testing): Kiểm thử GUI của chương trình bao gồm các phần tử UI và tương tác của người dùng lên các phần tử đó
Bảng 2.1 liệt kê những điểm nổi bật của Ranorex so với Selenium và QTP
Về vấn đề cài đặt thì cài đặt Selenium phức tạp hơn việc cài đặt công cụ QTP và Ranorex Đối với những người chưa có kiến thức về lập trình thì sẽ cảm thấy khó khăn khi cài đặt và thiết lập môi trường của Selenium Còn với Ranorex và QTP thì chúng ta chỉ cần tải về và làm theo các bước cài đặt thông thường là có thể sử dụng được
Trang 26Bảng 2.1 So sánh mức độ thân thiện khi sử dụng công cụ QTP, Selenium và
Ranorex
Cài đặt và cấu hình
Dễ dàng cài đặt cho người
Tăng cường hỗ trợ và đào tạo
Nhưng về mặt giấy phép sử dụng thì Selenium là công cụ mã nguồn mở nên sử dụng hoàn toàn miễn phí, với QTP muốn sử dụng phải mua giấy phép với chi phí khoảng 8000 USD còn với Ranorex thì chi phí khoảng 3500 USD/năm
sử dụng Đây chính là hạn chế của Ranorex vì thế nên Ranorex thường chỉ được
sử dụng ở các dự án lớn với nhiều kinh phí
Trang 27Bảng 2 2 So ánh tính năng ử dụng của Selenium, QTP và Ranorex
Selenium QTP Ranorex Công nghệ hỗ trợ
Bảng hành động cho việc chỉnh sửa các bước
Khả năng mở rộng
Công cụ tự động hóa thử nghiệm