ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ
NGUYỄN THỊ THU HÀ
NGHIÊN CỨU MỘT SỐ GIẢI PHÁP KIỂM THỬ
GIAO DIỆN TỰ ĐỘNG SỬ DỤNG RANOREX
LUẬN VĂN THẠC SĨ
Hà Nội - 11/2018
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ
NGUYỄN THỊ THU HÀ
NGHIÊN CỨU MỘT SỐ GIẢI PHÁP KIỂM THỬ
GIAO DIỆN TỰ ĐỘNG SỬ DỤNG RANOREX
Ngành: Công nghệ thông tin
Chuyên ngành: Kỹ thuật phần mềm
Mã Số: 8480103.01
LUẬN VĂN THẠC SĨ
NGƢỜI HƢỚNG DẪN KHOA HỌC: PGS. TS. PHẠM NGỌC HÙNG
Hà Nội - 11/2018
i
MỤ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
ii
LỜ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!
iii
LỜ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à
iv
BẢNG CÁC TỪ VIẾT TẮT
STT
Từ viết tắt
và thuật ngữ
1.
API
2.
GUI
3.
4.
IDE
QTP
Từ/Cụm từ đầy đủ
Application
programming Giao diện lập trình ứng
interface
dụng
Graphical user interface
Integrated
Giải thích
Development
Environment
Giao diện đồ họa ngƣời
d ng
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
Quick Test Pro
Công cụ kiểm thử
Hệ thống quản lý, kiểm
5.
SVN
Subversion
tra các phiên bản mã
nguồn
6.
TFS
7.
UI
8.
XML
Team Foundation Server
User Interface
Extensible
Language
Sản phẩm quản lý mã
nguồn
thiết kế giao diện ngƣời
dùng
Marup Là ngôn ngữ đánh dấu
mở rộng
v
DANH 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
vi
DANH 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
1
Chƣơ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
2
trƣớ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
3
kiể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
4
Chƣơ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.
2.1. Kiểm thử phần mềm
Kiểm thử phần mềm có nhiều cách định nghĩa khác nhau, tuy nhiên chúng
cùng bao trùm hai nội dung cơ bản là phát hiện lỗi và đánh giá chất lƣợng của
phần mềm Định nghĩa của Glenford J. Myers: “Kiểm thử phần mềm là quá
trình thực thi một chương trình với mục đích tìm ra lỗi” [4] đƣợc xem là đơn
giản và đƣợc sử dụng nhiều nhất.
Mục đích của kiểm thử là phát hiện lỗi vì thực tế phần mềm nào cũng có
lỗi. Theo Myers, kiểm thử mà không phát hiện đƣợc lỗi đƣợc coi là không thành
công [5]. Lỗi phần mềm cần tìm ra sớm vì nếu để sản phẩm đến tay ngƣời dùng
thì càng tốn nhiều thời gian và tiền bạc để sửa lỗi Do đó, kiểm thử phần mềm
đƣợc thực hiện ngay trong quá trình phát triển phần mềm trƣớc khi sản phẩm
đƣợc đến tay ngƣời dùng.
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ử.
5
2.2. Kiểm thử tự động phần mềm
Phƣơng pháp kiểm thử thủ công vừa tốn nhiều thời gian, công sức để thực
hiện, vừa không phải lúc nào cũng có hiệu quả trong việc tìm kiếm các lớp lỗi.
Vì vậy, kiểm thử tự động cung cấp một khả năng để thực hiện các loại kiểm thử
một cách hiệu quả.
Kiể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
6
chung. 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
7
đơ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.
8
- 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,
9
trì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
10
mà 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
11
GUI 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
iểm hử giao iện ngƣời
ng
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
12
trì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à
13
khá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 hử giao iện ngƣời
ƣơng
ng
ng c ch ghi v ch y
i
ịch ản
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
14
2 5 Mộ
c ng cụ iểm hử giao iện ngƣời
ng ự độ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.
1
/>
15
Selenium 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 k 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
2
/>
16
vớ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:
3
/>
17
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.