Nghiên cứu và ứng dụng Tool kiểm thử tự động trong kiểm thử phần mềm Nghiên cứu và ứng dụng Tool kiểm thử tự động trong kiểm thử phần mềm Nghiên cứu và ứng dụng Tool kiểm thử tự động trong kiểm thử phần mềm luận văn tốt nghiệp,luận văn thạc sĩ, luận văn cao học, luận văn đại học, luận án tiến sĩ, đồ án tốt nghiệp luận văn tốt nghiệp,luận văn thạc sĩ, luận văn cao học, luận văn đại học, luận án tiến sĩ, đồ án tốt nghiệp
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
Trang 2TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
-
TRẦN MAI LIÊN
NGHIÊN CỨU VÀ ỨNG DỤNG TOOL KIỂM THỬ TỰ ĐỘNG TRONG KIỂM
THỬ PHẦN MỀM
Chuyên ngành : Điện tử - Viễn thông
LUẬN VĂN THẠC SĨ KỸ THUẬT ĐIỆN TỬ VIỄN THÔNG
NGƯỜI HƯỚNG DẪN KHOA HỌC :
PGS.TS Phạm Minh Việt
Trang 3MỤC LỤC
MỤC LỤC 1
DANH MỤC HÌNH 5
DANH MỤC THUẬT NGỮ VÀ VIẾT TẮT 7
I MỞ ĐẦU 8
1.1 Bối cảnh nghiên cứu 8
1.2 Nội dung nghiên cứu 9
1.3 Cấu trúc luận văn 9
II GIỚI THIỆU CHUNG VỀ PHẦN MỀM VÀ KIỂM THỬ PHẦN MỀM 11
2.1 Giới thiệu chung vê phần mềm 11
2.1.1 Phần mềm là gì? 11
2.1.2 Tại sao phần mềm lại có lỗi 11
2.2 Giới thiệu chung về kiểm thử phần mềm 12
2.2.1 Kiểm thử phần mềm là gì? 12
2.2.2 Vai trò của kiểm thử 13
2.2.3 Tại sao phải kiểm thử tự động và sử dụng tool kiểm thử? 14
III NGHIÊN CỨU TOOL KIỂM THỬ TỰ ĐỘNG 16
3.1 Giới thiệu chung về tool kiểm thử tự động 16
3.1.1 Khái niệm tool kiểm thử phần mềm 16
3.1.2 Những lợi ích khi sử dụng tool kiểm thử tự động 16
3.1.3 Khi nào nên sử dụng tool test? 18
3.1.4 Những hạn chế khi sử dụng tool tự động 20
3.2 Quy trình kiểm thử sử dụng tool tự động 22
3.2.1 Phân tích và thiết kế mô hình phát triển kiểm thử tự động 23
3.2.2 Tạo test script (kịch bản kiểm thử) 24
3.2.3 Chỉnh sửa test script 25
3.2.4 Chạy test script để kiểm thử tự động 25
3.2.5 Đánh giá kết quả 26
3.3 Phân loại 26
3.3.1 Tool đo tải và hiệu năng 26
Trang 43.3.2 Tool kiểm thử các ứng dụng Java 27
3.3.3 Tool kiểm tra đường dẫn liên kết 27
3.3.4 Tool kiểm thử tính hợp lệ 27
3.3.5 Tool kiểm thử chức năng Web/test hồi quy 27
3.3.6 Tool test bảo mật cho ứngd dụng Web 28
3.3.7 Tool test các ứng dụng cho Mobile 28
3.4 Giới thiệu chi tiết về một số tool đang sử dụng phổ biến ở Việt Nam 28
3.4.1 QuickTestPro (QuickTest Professional) 29
3.4.1.1 Giới thiệu 29
3.4.1.2 Đặc điểm 31
3.4.1.3 Các thành phần quan trọng trong QuickTestPro 31
3.4.2 Selenium 33
3.4.2.1 Giới thiệu 33
3.4.2.2 Cấu trúc Selenium 33
a, Selenium IDE 34
b, Selenium RC 35
c, Selenium Core 37
d, Selenium Grid 38
e, Selenium WebDriver 38
3.4.3 Jmeter 39
3.4.3.1 Giới thiệu 39
3.4.3.2 Một số sample thông dụng của Jmeter 40
a, HTTP sampler 40
b, JDBC request 41
c, BeanShell sampler 46
d, WebService (SOAP) request 48
3.4.3.3 Các phần tử của 1 Testplan 50
a, ThreadGroup 51
b, Controller 51
c, Listener 54
d, Timer 55
e, Configuration Element 56
Trang 5f, Pre-Processor Element 57
g, Post-Processor Element 57
h, Thứ tự thực hiện các phần tử của 1 Testplan: 58
3.4.4 Load Runner 58
3.4.4.1 Giới thiệu 58
3.4.4.2 Các thành phần cơ bản của Load Runner 59
a, Virtual User Generator 59
b, Controller 60
c, Load Generator 61
d, Analyze 62
e, Launcher 63
IV ỨNG DỤNG TOOL JMETER VÀO KIỂM THỬ HIỆU NĂNG HỆ THỐNG 64
4.1 Các bước thực hiện một bài test hiệu năng với tool Jmeter 64
4.1.1 Planning the test 64
4.1.2 Creating Vuser Scripts 65
4.1.3 Creating the Scenario 65
4.1.4 Running the Scenario 65
4.1.5 Monitoring the Scenario 65
4.1.6 Analyzing test results 65
4.2 Quy trình thực hiện để tạo một Testplan 65
4.2.1 Các bước tạo testplan 65
4.2.2 Các điều khiển hỗ trợ khi tạo 1 Testplan 68
a, Response Assertion 68
b, Regular Expression Extractor 69
c, Truyền tham số qua biến 71
d, CSV Data Set Config 71
e, User Defined Variables 72
4.3 Ứng dụng tool Jmeter vào đo hiệu năng hệ thống chăm sóc khách hàng 74
4.3.1 Phát biểu bài toán 74
4.3.2 Thực hiện bài toán 74
4.3.2.1 Planning the test 74
4.3.2.2 Creating Vuser Script 76
Trang 64.3.2.3 Creating the Scenario 82
4.3.2.4 Running the Scenario + Monitoring the Scenario 83
4.3.2.5 Analyzing the Scenario 84
V ỨNG DỤNG TOOL sELENIUM webdriver VÀO KIỂM THỬ HỆ THỐNG 87
5.1 Phạm vi áp dụng tool Selenium Webdriver 87
5.2 Các công cụ hỗ trợ khi viết script với Selenium Webdriver 87
5.2.1 Công cụ soạn thảo Eclipse 87
5.2.2 TestNG 88
5.3 Ứng dụng Selenium Webdriver vào kiểm thử hồi quy cho hệ thống ECMS 90
5.3.1 Phát biểu bài toán 91
5.3.2 Thực hiện bài toán 91
5.3.2.1 Phân tích 91
5.3.2.2 Tạo test script + chỉnh sửa test script 93
5.3.2.3 Chạy test script 116
5.3.2.4 Đánh giá kết quả 117
VI KẾT LUẬN VÀ HƯỚNG NGHIÊN CỨU TIẾP THEO 119
TÀI LIỆU THAM KHẢO 120
Trang 7DANH MỤC HÌNH
Hình 1:Script test viết bằng Selenium IDE 34
Hình 2: Cửa sổ Selenium Core Framework 37
Hình 3:File chứa kết quả result.html 37
Hình 4:Màn hình của sample HTTP Proxy Server 41
Hình 5:Màn hình của JDBC Connection Configuration 41
Hình 6:Ví dụ cấu hình một JDBC Connection Configuration 42
Hình 7:Màn hình JDBC Request 43
Hình 8:JDBC request với Query Type = “Prepared Update Statement” 45
Hình 9:JDBC request với Query Type = “Update Statement” 46
Hình 10:Màn hình của BeanShell Sample 47
Hình 11:Màn hình của sample WebService (SOAP) 49
Hình 12: Màn hình cấu hình của Constant Timer 56
Hình 13:Màn hình làm việc của Virtual User Generator 60
Hình 14: Màn hình làm việc của Controller 61
Hình 15:Màn hình làm việc của Load Generator 62
Hình 16:Màn hình của Analyze 63
Hình 17:Màn hình làm việc khởi tạo của Jmeter 66
Hình 18:Màn hình thêm 1 Simple Controller 67
Hình 19:Màn hình cấu hình 1 Response Assertion 69
Hình 20:Màn hình cấu hình của Regular Expression Extractor 70
Hình 21:Một ví dụ của Regular Expression Extractor 71
Hình 22:Màn hình cấu hình của CSV Data Set Config 72
Hình 23:Màn hình cấu hình User Defined Variables 73
Hình 24:Đặt các biến được định nghĩa vào các request 73
Hình 25:Màn hình sau khi login thành công 75
Hình 26:Vào màn hình tra cứu thông tin trả trước 75
Hình 27:Màn hình trả về kết quả tra cứu 76
Hình 28:Màn hình khởi tạo các control và đặt các bước cho srcipt 77
Hình 29:Màn hình thiết lập Proxy cho trình duyệt 78
Trang 8Hình 30:Script của bước CCPRE_TCTTTB_1 79
Hình 31:Script sau khi record 79
Hình 32:Màn hình Add Regular Expression Extractor vào request để lấy giá trị lt 80
Hình 33:Màn hình Add Regular Expression Extractor vào request để lấy giá trị lt 80
Hình 34:Màn hình đặt biến lt vào các request sử dụng 80
Hình 35:Màn hình đặt biến ticket vào các request sử dụng 80
Hình 36:Khai báo file CSV 81
Hình 37:File CSV chứa dữ liệu test 81
Hình 38:Add thêm 2 Listener để xem kết quả khi run test 82
Hình 39:Cấu hình số lượng user cho máy client 1 83
Hình 40:Màn hình start script trên tất cả các máy 84
Hình 41:Màn hình làm việc của Eclipse 88
Hình 42:Ví dụ một đoạn code sử dụng Annotation của TestNG 89
Hình 43:Ví dụ file XML của TestNG 90
Hình 44:Báo cáo của TestNG 90
Hình 45:Trang chủ hệ thống ACME 91
Hình 46:Add thư viện vào Eclipse 94
Hình 47 Cửa sổ run configurations 116
Hình 48 File kết quả kiểm thử 117
Trang 9DANH MỤC THUẬT NGỮ VÀ VIẾT TẮT
Testcase Trường hợp kiểm thử
Unit test Kiểm thử đơn vị
Intergration test Kiểm thử tích hơp
System test Kiểm thử hệ thống
Performance test Kiểm thử hiệu năng
Load test Kiểm thử tải
Stress test Kiểm thử áp lực
Regression test Kiểm thử hồi quy
Test script Kịch bản (tập lệnh) được viết bằng tool kiểm thử
URL Uniform Resource Locator
HTML HyperText Markup Language
XML eXtensible Markup Language
Selenium IDE Selenium Integrated Development Environment
Selenium RC Selenium Remote control
API Application Programming Interface
FTP File Transfer Protocol
SOAP Simple Object Access Protocol
JDBC Java Database Connectivity
HTTP Hypertext Transfer Protocol
IEEE Institute of Electrical and Electronics Engineers
Trang 10I MỞ ĐẦU
1.1 Bối cảnh nghiên cứu
Ngày nay khái niệm phần mềm đã trở nên rất phổ biến Không ai có thể phủ nhận vai trò to lớn của phần mềm trong xã hội hiện đại Ứng dụng của phần mềm có mặt trong hầu hết các lĩnh vực của cuộc sống như: Truyền thông, khoa học công nghệ, ngân hàng, sản xuất chế tạo, quản trị doanh nghiệp, dịch vụ… và trở thành đối tượng phục vụ quan trọng cho mọi nhu cầu của con người
Công nghiệp phần mềm trên thế giới hiện là một ngành công nghiệp phát triển và đóng góp quan trọng vào sự phát triển và tiến bộ của công nghệ hiện đại Ở Việt Nam, công nghiệp phần mềm mới chỉ phát triển tập trung trong 10 năm gần đây Là một lĩnh vực khá mới đi sau sự phát triển của thế giới, tận dụng và thừa hưởng được những thành tựu trước đó, công nghệ thông tin nói chung và công nghệ phần mềm nói riêng ở nước ta đang có những phát triển nhanh chóng, được xem là một trong những ngành mũi nhọn đóng góp ngày càng nhiều vào nền kinh tế quốc dân
Công nghệ phần mềm phát triển kéo theo các thành phần bên trong nó cũng không ngừng được hoàn thiện và nâng cao, kiểm thử phần mềm nằm trong số đó
Là khâu cuối cùng trong vòng đời phát triển phần mềm nhưng đóng một vai trò vô cùng quan trọng, là khâu đảm bảo chất lượng cho phần mềm đến tay người sử dụng cuối thỏa mãn được mọi yêu cầu cơ bản cũng như khắt khe nhất Kiểm thử phần mềm cần phải được xem xét ở góc độ tương xứng với tầm quan trọng của nó trong quy trình phát triển phần mềm
Như chúng ta biết, để tạo ra một sản phẩm phần mềm có chất lượng thì hoạt động kiểm thử phần mềm đóng vai trò quan trọng, trong khi đó hoạt động này lại tiêu tốn và chiếm tỷ trọng khá lớn công sức và thời gian trong một dự án Do vậy, nhu cầu tự động hóa quy trình kiểm thử phần mềm cũng được đặt ra Qua thực tế cho thấy việc áp dụng kiểm thử tự động hợp lý sẽ mang lại thành công cho hoạt
Trang 11động kiểm thử phần mềm Kiểm thử tự động giúp giảm bớt công sức thực hiện, tăng
độ tin cậy, giảm sự nhàm chán và rèn luyện kỹ năng lập trình cho kỹ sư kiểm thử
1.2 Nội dung nghiên cứu
Kiểm thử là một khâu vô cùng quan trọng trong chu trình phát triển phần mềm, để nâng cao chất lượng, giảm tải sức lực tham gia của con người đồng thời tăng tính hiệu quả, chuyên nghiệp của nó thì việc ứng dụng các công cụ kiểm thử tự động đang ngày càng được chú trọng
Luận văn sẽ giới thiệu những nét chung nhất về kiểm thử phần mềm và sự cần thiết sử dụng tool kiểm thử tự động trong hoạt động kiểm thử phần mềm Tiếp
đó luận văn tập chung nghiên cứu tool kiểm thử tự động, tính hữu ích và ứng dụng vào kiểm thử phần mềm của một số tool phổ biến trên thế giới
Phần cuối cùng là thực tế hóa những nghiên cứu ở trên thông qua việc áp dụng trong thực tế 2 tool của tác giả vào các hệ thống tại tổ chức: áp dụng tool jmeter vào kiểm thử và giám sát hiệu năng hệ thống chăm sóc khách hàng, áp dụng tool Selenium WebDriver vào kiểm thử chức năng hệ thống ECMS
1.3 Cấu trúc luận văn
Luận văn gồm được phân chia làm 5 phần như sau:
Phần 1: Mở đầu
Giới thiệu về bối cảnh nghiên cứu, nội dung nghiên cứu và cấu trúc luận văn Phần 2: Giới thiệu chung kiểm thử phần mềm
Cung cấp một cái nhìn chung nhất về phần mềm, về kiểm thử phần mềm, khi
nào nên sử dụng tool kiểm thử
Phần 3: Nghiên cứu các tool kiểm thử tự động
Đây là phần trọng tâm của luận văn, tập chung nghiên cứu khái niệm, vai trò, tác dụng của tool tự động trong kiểm thử phần mềm Những hạn chế cần xem xét khi muốn áp dụng vào thực tế Phân loại tool theo phạm vi ứng dụng Giới thiệu
một số tool đang được dùng phổ biến tại Việt Nam
Trang 12Phần 4: Ứng dụng tool Jmeter vào kiểm thử hiệu năng
Phần này mô phỏng cách thức thực hiện và tiến hành cài đặt một tool kiểm
thử hiệu năng – tool Jmeter vào kiểm thử hiệu năng hệ thống chăm sóc khách hàng Phần 5: Ứng dụng tool Selenium WebDriver vào kiểm thử hồi qui
Phàn này mô phỏng cách thức thực hiện và viết script tự động sử dụng tool
Selenium WebDriver để kiểm thử hồi quy chức năng của hệ thống ECMS
Phần 6: Kết luận và hướng nghiên cứu tiếp theo
Đánh giá tầm quan trọng của các kết quả đã nghiên cứu được, mở ra các hướng nghiên cứu nâng cao tiếp theo
Trong quá trình thực hiện luận văn, em xin gửi lời cảm ơn chân thành đến thầy giáo hướng dẫn PGS.TS Phạm Minh Việt Trong luận văn chắc chắn không thể không có thiếu sót, rất mong được ý kiến đóng ghóp và phản hồi của các thầy cô
Trang 13II GIỚI THIỆU CHUNG VỀ PHẦN MỀM VÀ KIỂM THỬ PHẦN MỀM
2.1 Giới thiệu chung vê phần mềm
2.1.1 Phần mềm là gì?
Phần mềm là một (bộ) chương trình được cài đặt trên máy tính nhằm thực hiện một nhiệm vụ tương đối độc lập nhằm phục vụ cho một ứng dụng cụ thể trong việc quản lý hoạt động của máy tính hoặc áp dụng máy tính trong các hoạt động kinh tế, quốc phòng, văn hóa, giáo dục, giải trí …
Phần mềm có thể được coi như là một phần thay đổi của máy tính và phần cứng là phần cố định Phần mềm thường được chia thành phần mềm ứng dụng (chương trình mà người dùng làm việc trực tiếp đến) và phần mềm hệ thống (bao gồm hệ điều hành và bất cứ chương trình nào hỗ trợ phần mềm ứng dụng
Việc tạo ra một phần mềm phải trải qua nhiều giai đoạn, người ta gọi là quy trình phát triển phần mềm, bắt đầu từ khi có ý tưởng cho đến khi đưa ra sản phẩm phần mềm thực thi
2.1.2 Tại sao phần mềm lại có lỗi
Các nghiên cứu từ trước đến nay đã chỉ ra rằng không thể có 1 hệ thống phần mềm nào hoạt động đúng theo mọi yêu cầu của người dùng đặt ra, không một phần mềm nào là không có lỗi Lỗi trên hóa đơn thanh toán, lỗi trễ xẩy ra trong quá trình
xử lý 1 giao dịch thanh toán thẻ và một trang website không load được dữ liệu là những ví dụ về những vấn đề có thể xảy ra bới 1 phần mềm có lỗi Không phải tất
cả các phần mềm đều có chung một mức độ lỗi và không phải tất cả các lỗi khi xẩy
ra có cùng một mức độ tác động đến hệ thống
Lỗi phần mềm có thể đến từ tất cả các giai đoạn trong vòng đời phát triển của phần mềm: từ lúc tìm hiểu phân tích yêu cầu của khách hàng đến khi phần mềm được triển khai Trong đó một số nguyên nhân phổ biển sau thường gây ra lỗi cho phần mềm đó là:
Thứ nhất là lỗi từ giai đoạn tìm hiểu và phân tích yêu cầu của khách hàng Người tìm hiểu có thể tìm hiểu không hết hoặc hiểu sai yêu cầu của khách hàng, khi phân
Trang 14tích không đánh giá hết được ảnh hưởng của yêu cầu đến toàn bộ hệ thống và không nhìn ra được tác động tương tác của hệ thống hiện tại với các hệ thống khác Lỗi xảy ra trong giai đoạn này thường là những lỗi nghiêm trọng và chi phí sửa lỗi là lớn nhất so với lỗi xảy ra trong các giai đoạn sau này, bởi lỗi từ yêu cầu khi sửa sẽ kéo theo toàn bộ các giai đoạn sau này cũng phải sửa theo Do đó, việc tìm lỗi trong giai đoạn này là rất quan trọng, góp phần quan trọng làm giảm chi phí sản xuất do tránh được các lỗi nghiêm trọng
Thứ hai, lỗi đến từ người phát triển Lỗi này thường là lỗi chủ quan của người thực hiện yêu cầu, trong quá trình khai báo, viết hàm, thủ tục, sử dụng thuật toán, tổ chức
dữ liệu Các lỗi này thường được phát hiện trong quá trình kiểm thử Ngoài ra, lỗi cũng có thể xẩy ra trong chính giai đoạn kiểm thử Khi người thực hiện kiểm thử xác định chiến lược và phương pháp kiểm thử không rõ ràng, đầy đủ cũng sẽ để lọt các lỗi của hệ thống
Ngoài ra cũng có những lỗi khách quan xảy ra, lỗi đến từ môi trường bên ngoài đội
dự án như bản thân khách hàng không rõ ràng về yêu cầu đưa ra, yêu cầu thay đổi liên tục, môi trường triển khai hệ thống không hoàn toàn giống như môi trường đã xác định ban đầu, công cụ phát triển bản thân cũng có lỗi …
Nhiều nghiên cứu đã được thực hiện trên các dự án từ qui mô rất nhỏ đến các dự án rất lơn và kết quả luôn giống nhau Số lỗi do đặc tả yêu cầu xẩy ra là nhiều nhất, chiếm đến 80% tổng số lỗi của tất cả các giai đoạn
Để nâng cao chất lượng phần mềm đến tay người sử dụng, cố gắng loại bỏ được tối
đa có thể các lỗi của phần mềm không có cách nào khác là phải kiểm thử phần mềm trước khi đưa sản phầm ra thị trường
2.2 Giới thiệu chung về kiểm thử phần mềm
2.2.1 Kiểm thử phần mềm là gì?
Kiểm thử phần mềm là quá trình khảo sát một hệ thống hay một thành phần dưới những điều kiện xác định, quan sát và ghi lại các kết quả, đánh giá một khía cạnh nào đó của hệ thống hay thành phần đó (Theo bảng chú giải thuật ngữ chuẩn
Trang 15IEEE của Thuật ngữ kỹ nghệ phần mềm- IEEE Standard Glossary of Software Engineering Terminology)
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 lỗi (Theo “The Art of Software Testing” – Nghệ thuật kiểm thử phần mềm)
Kiểm thử phần mềm là hoạt động khảo sát thực tiễn sản phẩm hay dịch vụ phần mềm trong đúng môi trường chúng dự định sẽ được triển khai nhằm cung cấp cho người có lợi ích liên quan những thông tin về chất lượng của sản phẩm hay dịch vụ phần mềm ấy Mục đích của kiểm thử phần mềm là tìm ra các lỗi hay khiếm khuyết phần mềm nhằm đảm bảo hiệu quả hoạt động tối ưu của phần mềm trong nhiều ngành khác nhau (Theo Bách khoa toàn thư mở Wikipedia)
2.2.2 Vai trò của kiểm thử
Như đã thảo luận ở trên, để loại bỏ lỗi trên sản phầm trên phần mềm (tất nhiên là không thể loại bỏ được hoàn toàn lỗi) và nâng cao chất lượng phần mềm thì kiểm thử là rất cần thiết trong suốt giai đoạn phát triển và bảo trì hệ thống Nó bao gồm quá trình tìm kiếm, kiểm tra những điểm trên giao diện người dùng, nơi mà người dùng có thể làm xuất hiện lỗi của dữ liệu đầu vào hoặc trong việc hiển thị dữ liệu đầu ra, và tìm kiếm những điểm yếu tiềm ẩn có thể gây ra lỗi Thực hiện kiểm thử giúp chúng ta làm tăng chất lượng của sản phẩm và dịch vụ, và nó chính là một dạng của các phương thức Verification và Validation áp dụng cho sản phẩm Có rất nhiều phương thức có thể sử dụng trong kiểm thử, một vài trong số đó được thực hiện bởi người tạo ra sản phẩm, một số khác được thực hiện nởi những nhóm độc lập
Kiểm thử giúp chúng ta đo được chất lượng của phầm mềm thông qua số lượng lỗi được tìm ra, số lượng bài test đã thực hiện và độ bao phủ hệ thống khi thực hiện kiểm thử Chúng ta có thể đánh giá được chất lượng trong cả 2 mặt về các thuộc tính chức năng và phi chức năng của phần mềm Kiểm thử cung cấp sự tin cậy về chất lượng phần mềm nếu nó tìm ra ít hoặc không tìm ra lỗi Đương nhiên, một bài test ngèo nàn sẽ chỉ bao phủ được một phần rất nhỏ các khiếm quyết của hệ thống
và sẽ không còn đủ độ tin cậy để đưa ra đánh giá về phần mềm
Trang 16Kiểm thử giúp giảm thiểu rủi ro về chất lượng của phần mềm, về chi phí của phần mềm cho việc sửa lỗi Việc kiểm thử phát hiện càng sớm các lỗi sẽ ghóp phần quan trọng vào việc giảm rủi ro trong việc phát sinh chi phí sửa lỗi
Tuy nhiên, kiểm thử cũng không phải là tuyệt đối Các nghiên cứu chỉ ra rằng quá trình kiểm thử chỉ có thể tìm ra được 70% số lượng lỗi trong 1 phần mềm Vì vậy, việc thiết kế kiểm thử, chiến lược và cách thức thực hiện kiểm thử là rất quan trọng trong việc tìm ra tối đa số lỗi có thể Điều này phụ thuộc nhiều vào công cụ và khả năng của người thực hiện kiểm thử
2.2.3 Tại sao phải kiểm thử tự động và sử dụng tool kiểm thử?
Mỗi nhóm phát triển phần mềm tự kiểm thử chính sản phẩm của mình thì sản phẩm cung cấp sẽ luôn luôn có sai sót Kỹ sư kiểm thử phấn đấu để ngăn chặn các sai sót này trước khi sản phẩm được phát hành nhưng chúng thường xuất hiện trở lại, ngay cả với các quá trình kiểm thử bằng tay tốt nhất Kiểm thử phần mềm tự động là cách tốt nhất để tăng tính khách quan, hiệu quả, hiệu suất và bao phủ phần mềm cần kiểm thử của bạn
Kiểm thử phần mềm bằng tay được thực hiện bởi người sử dụng máy tính một cách cẩn thận thông qua màn hình ứng dụng, cố gắng sử dụng các cách khác khác nhau
và kết hợp các đầu vào, so sánh các kết quả mong muốn với các kết quả ghi lại những quan sát của họ Kiểm thử bằng tay được lặp đi lặp lại thường xuyên trong chu kỳ phát triển mỗi khi có thay đổi mã nguồn và những thay đổi khác về môi trường hoạt động và cấu hình phần cứng Một công cụ phần mềm kiểm thử tự động
có thể lặp lại hành động đã được ghi lại và được xác định trước, so sánh kết quả với hành vi mong đợi và đưa ra báo cáo thành công hay thất bại của những bài test này tới kỹ sư kiểm tra Những bài test tự động được tạo ra một lần và có thể dễ dàng được lặp lại cũng như có thể được mở rộng để thực hiện các nhiệm vụ không thể kiểm tra thủ công bằng tay Bởi vì điều này, các nhà quản lý có tầm nhìn đã nhận ra rằng kiểm thử phần mềm tự động là một thành phần thiết yếu của các dự án muốn phát triển thành công
Trang 17Kiểm thử phần mềm tự động từ lâu đã được xem xét ở một vị trí quan trọng trong các công ty phần mềm lớn nhưng đối với các công ty nhỏ hơn thì nó lại được cho là quá đắt tiền và khó khắn để thực hiện
Trang 18III NGHIÊN CỨU TOOL KIỂM THỬ TỰ ĐỘNG
3.1 Giới thiệu chung về tool kiểm thử tự động
3.1.1 Khái niệm tool kiểm thử phần mềm
Tool kiểm thử nói chung là công cụ sử dụng để xác thực và kiểm tra các chương trình phần mềm, các ứng dụng hoặc các sản phẩm
Tool kiểm thử phần mềm thực chất là các chương trình phần mềm sử dụng với mục đích chính là để xác thực và kiểm tra các chương trình phần mềm cần kiểm thử có hoạt động đúng với yêu cầu đã được đặt ra từ trước trong những điều kiện môi trường hoạt động nhất định
Ở Việt Nam, trong những năm gần đây việc áp dụng tool kiểm thử tự động trong kiểm thử phần mềm đang ngày càng được coi trọng tại các tổ chức, các đơn vị sản xuất phần mềm Tùy quy mô của tổ chức mà mức độ áp dụng tool có khác nhau Nhưng tất cả đều đang hướng đến mục tiêu tự động hóa và chuyên nghiệp quy trình kiểm thử
3.1.2 Những lợi ích khi sử dụng tool kiểm thử tự động
Tool kiểm thử tự động mang đến rất nhiều lợi ích cho công việc kiểm thử
phần mềm Ta sẽ xem xét ở một số lợi ích sau:
Kiểm thử phần mềm tự động tiết kiệm thời gian và chi phí
Kiểm thử phần mềm thường phải lặp đi lặp lại thường xuyên trong chu kỳ phát triển để đảm bảo chất lượng Mỗi khi source code chương trình có sự thay đổi thì cần phải tiến hành kiểm thử lại phần mềm Trước khi phần mềm được đưa đến khách hàng, nó cần phải được kiểm thử trên tất cả các hệ điều hành hỗ trợ và các cấu hình phần cứng Nếu sử dụng kiểm thử thủ công sẽ rất tốn kém và mất thời gian Với kiểm thử tự động thì chỉ với 1 lần tạo ra có thể sử dụng cho nhiều lần mà không phải thêm bất kỳ chi phí phát sinh thêm nào và những bài test sẽ được thực hiện nhanh hơn rất nhiều kiểm thử thủ công Kiểm thử phần mềm tự động có thể
Trang 19làm giảm thời gian kiểm thử lặp đi lặp lại đến ngày, giờ Tiết kiệm thời gian đóng
ghóp trực tiếp vào việc tiết kiệm chi phí
Kiểm thử phần mềm tự động nâng cao độ chính xác
Ngay cả những nhân viên kiểm thử cẩn thận nhất cũng sẽ mắc lỗi trong quá trình kiểm thử thủ công đơn lẻ Kiểm thử tự động thực hiện tương tự các bước một cách chính xác mỗi khi thực hiện bài test và không bao giờ quên ghi lại các kết quả
một cách chi tiết
Kiểm thử phần mềm tự động tăng độ bao phủ kiểm thử
Kiểm thử phần mềm tự động có thể tăng độ sâu và phạm vi của các bài test
để cải thiện chất lượng phần mềm Các bài test dài thường bị tránh trong quá trình kiểm thử thủ công thì có thể được chạy mà không cần giám sát Thậm chí chúng có thể chạy trên nhiều máy tính với các cấu hình khác nhau Kiểm thử phần mềm tự động có thể kiểm tra sâu bên trong ứng dụng và lấy được các thông tin về bộ nhớ, bảng dữ liệu, nội dung file và trạng thái bên trong chương trình để xác định khi sản phẩm hoạt động như mong đợi Kiểm thử phần mềm tự động có thể dễ dàng thực hiện hàng ngàn trường hợp kiểm thử phức tạp khác nhau trong tất cả các bài test mà chúng có thể khó có thể thực hiện được với kiểm thử thủ công Nhân viên kiểm thử được giải phóng khỏi các bài test thủ công lặp đi lặp lại để tạo các bài test tự động
mới cho các chức năng phức tạp khác
Kiểm thử tự động có thể thực hiện những việc mà kiểm thử thủ công không thể làm được
Ngay cả các đơn vị phần mềm lớn nhất cũng không thể thực hiện điều kiển một bài test ứng dụng web với hàng ngàn user Kiểm thử tự động có thể mô phỏng hàng chục, hàng trăm hoặc hàng ngàn người dùng ảo tương tác với mạng hoặc phần
mềm web và các ứng dụng
Kiểm thử phần mềm tự động giúp ích cho nhân viên phát triển và nhân viên kiểm thử
Trang 20Các bài test kiểm thử tự động có thể được sử dụng cho các nhân viên phát triển để
họ phát hiện ra sớm các vấn đề trước khi bàn giao chương trình cho QA Các bài test có thể chạy tự động bất cứ khi nào có thay đổi về source code và thông báo cho đội ngũ phát triển khi có lỗi Các tính năng này tiết kiệm được thời gian cho đội
phát triển và tăng độ tự tin của
Kiểm thử phần mềm tự động nâng cao trình độ chuyên môn cho các thành viên nhóm
Điều này khó đo đếm được, nhưng vẫn có thể nói kiểm thử phần mềm tự động nâng cao trình độ chuyên môn cho các thành viên Tự động hóa đơn các công việc lặp đi lặp lại với tool kiểm thử tự động cho phép nhóm của bạn dành nhiều thời gian hơn cho các vấn đề của dự án nhiều mang tính thách thức và phức tạp hơn Các thành viên trong nhóm nâng cao được kỹ năng và sự tự tin, đóng ghóp được nhiều hơn cho tổ chức của họ Ngoài ra, việc sử dụng tool giúp nâng cao trình độ của nhân viên kiểm thử Việc record, viết các script phức tạp cũng giúp cho kiểm thử viên hiểu hơn về chương trình, nâng cao các kỹ năng về phần mềm
3.1.3 Khi nào nên sử dụng tool test?
Tool kiểm thử là công cụ giúp thực hiện việc kiểm tra phần mềm một cách tự động Tuy nhiên không phải mọi việc kiểm tra đều có thể tự động hóa, câu hỏi đặt
ra là trong điều kiện hoặc tình huống nào dùng tool kiểm thử là thích hợp? Việc
dùng tool kiểm thử thường được xem xét trong một số tình huống sau:
Không đủ tài nguyên
Khi số lượng tình huống kiểm tra (test case) quá nhiều mà nhân viên kiểm thử không thể hoàn tất bằng tay trong thời gian cụ thể nào đó.Có thể lấy một dẫn chứng
là khi thực hiện kiểm tra chức năng của một website Website này sẽ được kiểm tra với 6 môi trường gồm 3 trình duyệt (IE, Nétcape, Opera) và 2 hệ điều hành
(WinXP, Linux)
Tình huống này đòi hỏi số lần kiểm tra tăng lên và lặp lại 6 lần so với việc kiểm tra cho một môi trường cụ thể
Trang 21Như vậy chỉ với một chương trình mà phải kiểm thử 6 lần, số case sẽ tăng
lên 6 lần Lúc này chi phí và thời gian dành cho kiểm thử sẽ tăng nhiều lần
Kiểm thử hồi quy (regression test)
Trong quá trình phát triển phần mềm, nhóm lập trình thường đưa ra nhiều phiên bản phần mềm liên tiếp để kiểm tra Thực tế cho thấy việc đưa ra các phiên bản phần mềm có thể là hàng ngày, mỗi phiên bản bao gồm những tính năng mới, hoặc tính năng cũ được sửa lỗi hay nâng cấp Việc bổ sung hoặc sửa lỗi code cho những tính năng ở phiên bản mới có thể làm cho những tính năng khác đã kiểm tra tốt chạy sai mặc dù phần code của nó không hề chỉnh sửa Để khắc phục điều này, đối với từng phiên bản, nhân viên kiểm thử không chỉ kiểm tra chức năng mới hoặc được sửa, mà phải kiểm tra lại tất cả những tính năng đã kiểm tra tốt trước đó Điều này khó khả thi về mặt thời gian cũng như tốn nhiều nỗ lực nếu tiến hành kiểm thử thủ công Trong những trường hợp này tool kiểm thử là một lựa chọn phù hợp nhất
Phải thường xuyên kiểm thử một số lượng lớn trường hợp kiểm thử
Một lợi ích rõ ràng của kiểm thử tự động đó chính là khả năng chạy một số lượng lớn case trong một khoảng thời gian giới hạn, vì thế nó khả thi trong trường hợp phải test thường xuyên Đây cũng là lý do cho phép chúng ta tăng số lượng các
case và tần suất kiểm thử Từ đó nâng cao độ bao phủ kiểm thử
Kiểm tra khả năng vận hành phần mềm trong môi trường đặc biệt
Đây là kiểm tra nhằm đánh giá xem khả năng vận hành của phần mềm trong những điều kiện đặc biệt có thỏa mãn yêu cầu đặt ra hay không Thông qua đó nhân viên kiểm thử có thể xác định được các yếu tố về phần cứng, phần mềm ảnh hưởng
Trang 22đến khả năng vận hành của phần mềm Có thể liệt kê một số tình huống kiểm tra tiêu biểu thuộc loại này như sau:
• Đo tốc độ trung bình xử lý một yêu cầu của web server
• Thiết lập 10000 yêu cầu, đồng thời gửi đến web server, kiểm tra tình huống 10000 người dùng truy xuất web cùng lúc
• Xác định số yêu cầu tối đa được xử lý bởi web server hoặc xác định cấu hình máy thấp nhất mà tốc độ xử lý của phần mềm vẫn có thể hoạt động ở mức cho phép Việc kiểm thử thủ công cho những tình huống trên là cực khó và nhiều khi không thể thực hiện được, ví dụ tạo ra 10000 người cùng log vào hệ thống 1 lúc việc chuẩn
bị 10000 người dùng thực cùng sử dụng hệ thống và ghi lại tất cả những tác động này là điều không thể Nhưng với việc sử dụng tool kiểm thử tự động, thì việc tạo ra cho bạn 10000 người dùng ảo không phải là việc khó trong khi không cần tiêu tốn lượng tài nguyên lớn như kiểm thử thủ công
Nói tóm lại ứng với các giai đoạn kiểm thử trong quy trình kiểm thử, thì tool kiểm thử thường được áp dụng trong các giai đoạn: kiểm thử hồi quy (regression test), kiểm thử tải hệ thống (performance test, load test, stress test)
Kiểm thử tự động không thể thay thế hoàn toàn kiểm thử thủ công
Kiểm thử tự động không thể thay thế được hoàn toàn kiểm thử thủ công, cũng không thể tự động hóa toàn bộ các hoạt động và các trường hợp cần kiểm thử Trong nhiều trường hợp, kiểm thử thủ công sẽ được thực hiện dễ dàng hơn nhiều
Trang 23kiểm thử tự động hoặc quá khó để tự động hóa, không khả thi về mặt kinh tế nếu tiến hành kiểm thử tự động
Những trường hợp không nên sử dụng kiểm thử tự động như là:
- Khi có những trường hợp kiểm thử rất ít khi phải thực hiện Ví dụ như một yêu cầu kiểm thử chỉ thực hiện 1 lần trong 1 năm, do đó không nên tự động hóa những case test này
- Khi phần mềm thường xuyên thay đổi Ví dụ, nếu giao diên người dùng và các chức năng thay đổi quá nhiều từ phiên bản này sang phiên bản khác, khi
đó nỗ lực bỏ ra để tự động hóa case kiểm thử sẽ làm tăng chi phí rất nhiều
- Những case kiểm thử mà kiểm tra kết quả dễ dàng nếu thực hiện thủ công nhưng quá khó để kiểm tra tự động Ví dụ, khi cần kiểm tra sự sắp xếp mầu sắc, các yếu tố thuộc về mỹ thuật của màn hình hoặc kiểm tra audio có được bật đúng hay không?
- Những case có sự tương tác với phần cứng, như là tương tác với card thông qua card reader, ngắt kết nối với một vài thiết bị, bật tắt nguồn…
Không phải tất cả các case kiểm thử thủ công đều nên tự động hóa, chỉ những case khả thi hoặc thường xuyên phải thực hiện Khi phần mềm thường xuyên thay đổi thì kiểm thử thủ công sẽ tìm ra được lỗi rất nhanh
Kiểm thử thủ công tìm được nhiều lỗi hơn kiểm thử tự động
Một bài test rất có thể tìm ra được lỗi ngay trong lần đầu tiên mà nó được chạy Nếu một testcase được thực hiện tự động, nó cần được test thủ công trước để đảm bảo tính chính xác James Bach đã đưa ra kết luận dựa trên kinh nghiệm rằng kiểm thử tự động chỉ tìm ra được 15% khuyến quyết trong khi kiểm thử thủ công là 85% (Nguồn: Bach, 1997) Khi một test-suite tự động được xây dựng, nó thường
sử dụng khi re-test Thông thường, các bài test này đã được thực hiện thủ công trước đó và do đó chúng sẽ tìm ra ngay được các lỗi trong khoảng thời gian này Khi thực hiện chạy với tool thực chất là thực hiện kiểm thử lại, ví dụ như tool kiểm thử hồi quy
Phụ thuộc nhiều hơn vào chất lượng của các bài test
Trang 24Một tool kiểm thử chỉ có thể xác định được sự khác nhau giữa kết quả thực
tế với đầu ra mong muốn Do đó, có một sự đòi hỏi khắt khe trong viêc kiểm tra tính chính xác của các đầu ra mong muốn trong kiểm thử tự động Khi tool thông báo cho chúng ta kết quả kiểm thử là pass nhưng thực ra là chúng chỉ trả về kết quả sau khi so sánh đúng đầu ra mong muốn
Vì vậy, việc xác định chất lượng của những bài test cần tự động hóa là rất quan trong Những testware cần phải được xem xét và kiểm tra để đảm bảo tính chính xác của chúng
Kiểm thử tự động không nâng cao hiệu quả kiểm thử
Tự động các bài test không làm chúng hiệu quả hơn trong việc tìm lỗi so với khi thực hiện chúng thủ công Tự động hóa là khâu cuối cùng trong việc nâng cao hiệu quả của các bài test, đó là chi phí và thời gian thực hiện
Tool không có sự tưởng tượng
Tool chỉ là phần mềm và do đó nó cũng chỉ hoạt động theo một cấu trúc cho trước
Cả tool và nhân viên kiểm thử đều có thể test theo một chỉ dẫn những với một nhân viên kiểm thử, cùng một yêu cầu có thể thực hiện theo một cách khác Ví dụ, khi một nhân viên kiểm thử được giao thực hiện chuẩn bị và chạy test một thủ tục, khi
so sánh kết quả thực tế với đầu ra mong muốn và cả 2 đều sai, nhân viên kiểm thử
có thể nhận biết và điều đưa vấn đề này ra giải quyết để nâng cao chất lượng của phần mềm Trong khi nếu tool kiểm thử thực hiện những trường hợp này, nó chỉ đơn giản đưa ra kết quả false cho testcase
3.2 Quy trình kiểm thử sử dụng tool tự động
Kiểm thử tự động cũng tuân theo các bước phát triển phần mềm, chúng ta phải xem việc phát triển kiểm thử tự động giống như phát triển một dự án
Mặc dù tool kiểm thử hiện nay rất phong phú và có nhiều đặc điểm khác nhau, tuy nhiên khi áp dụng tool vào kiểm thử tự động thì cơ bản điều phải tuân theo các bước
cơ bản sau:
Trang 25• Thu thập các đặc tả yêu cầu hoặc test case; lựa chọn những phần cần thực hiện kiểm thử tự động
• Phân tích và thiết kế mô hình phát triển kiểm thử tự động
• Phát triển lệnh đặc tả (script) cho kiểm thử tự động
• Kiểm tra và theo dõi lỗi trong script của kiểm thử tự động
Chi tiết các bước sẽ được xem xét sau đây:
3.2.1 Phân tích và thiết kế mô hình phát triển kiểm thử tự động
Từ việc xác định yêu cầu và mục đích của công đoạn kiểm thử cần tiến hành áp dụng tool, kiểm thử viên sẽ phân tích và thiết kế mô hình sẽ triển khai để áp dụng
tool Để thực hiện thì thường ta sẽ trả lời các câu hỏi thường gặp sau:
1 Chức năng nào sẽ tiến hành kiểm thử tự động và yêu cầu đặt ra cho từng chức năng?
Đây là câu hỏi rất quan trọng mà kiểm thử viên trước khi đặt vấn đề kiểm thử tự động cần trả lời Như đã nói ở trên, không phải bất cứ một bài test nào cũng có thể và cũng nên kiểm thử tự động Cần phải xem xét tính khả thi khi áp dụng như: testcase có thể chuyển sang tự động hóa được không?, tự động hóa có đem lại lợi ích hơn kiểm thử thử công không?, khả năng của tổ chức hiện tại có đáp ứng được không?
Khi đã trả lời được các câu hỏi này và quyết định áp dụng kiểm thử tự động thì cần xác định chi tiết về các chức năng sẽ thực hiện
Thường sẽ có 2 loại kiểm thử tự động:
- Nếu là kiểm thử chức năng: xác định các chức năng, tính năng, các case chi tiết sẽ kiểm thử bằng tool Các yêu cầu đặt ra với các case chi tiết là gì? (VD: chức năng phải cập nhật dữ liệu trong các bảng dữ liệu, dữ liệu phân trang 10 bản ghi/trang …)
Trang 26- Nếu là kiểm thử hiệu năng (performance test): xác định các chức năng cần kiểm thử, tiêu chí pass/fail hiệu năng (VD: 100 user cùng thực hiện tìm kiếm,
thời gian truy vấn trung bình là 5s, tỷ lệ fail là 10% )
2 Môi trường sẽ thực hiện kiểm thử và dữ liệu cần chuẩn bị kiểm thử
Môi trường thường được xem xét ở các điểm sau:
- Cấu hình và địa chỉ server ứng dụng và server database
- Hệ điều hành, trình duyệt sử dụng, version …
- Đường dẫn chương trình, phiên bản ứng dụng
- Cấu hình, địa chỉ, số lượng các mày client để triển khai
3 Lựa chọn tool kiểm thử
Việc lựa chọn tool kiểm thử nào để áp dụng thì căn cứ vào nhiều tiêu chí:
- Từ tài nguyên sẵn có của tổ thức Ví dụ như các ứng dụng của tổ chức đang
sử dụng tool Load Runner để kiểm thử hiệu năng thì sẽ lựa chọn luôn tool này để kiểm thử hiệu năng
- Từ mục đích kiểm thử và môi trường kiểm thử ở các bước trên để xác định tool nào cho phù hợp vì có rất nhiều tool trong đó mỗi tool có 1 thế mạnh và phạm vi khác nhau khi áp dụng (VD có tool chỉ chạy trên trình duyệt IE, tool chỉ làm việc với hệ điều hành windown, tool chỉ hỗ trợ ứng dụng HTTP, Net, các thông số kết quả mà tool sẽ lấy được …) Kiểm thử viên phải có sự tham khảo và nắm được các điểm này để lựa chọn cho phù hợp với ứng dụng của mình
- Nếu tổ chức của bạn chưa có một tool chính thống nào để sử dụng và cũng không có điều kiện sử dụng các tool có licence thì tool open source là lựa chọn của bạn Hiện nay cúng có rất nhiều tool miến phí mà bạn có thể sự dùng được
3.2.2 Tạo test script (kịch bản kiểm thử)
Đây là giai đoạn quan trọng của quy trình kiểm thử bằng tool Đòi hỏi nhân viên kiểm thử phải có kiến thức về tool đang sử dụng để record Mỗi tool kiểm thử
Trang 27đều có cơ chế cho phép record lại các thao tác khi người dùng thao tác trên ứng dụng Các thao tác này sẽ được lưu lại thành các script, script này được viết dưới dạng các ngôn ngữ lập trình khác khau tùy theo tool sử dụng Mỗi kịch bản test sẽ gồm nhiều các script bên trong, các script này chính là cơ sở để thực hiện các bài test của bạn Tuy nhiên chỉ dựa vào các script này thì thường bạn sẽ chưa thể thực hiện được bài test ngay mà sẽ phải trải qua công đoạn chỉnh sửa chuẩn hóa lại script
theo mục đích của bài test
3.2.3 Chỉnh sửa test script
Nếu như ở bước tạo test script, nhân viên kiểm thử chỉ cần có kiến thức sử dụng tool thì ở phần chỉnh sửa test script ngoài phải hiểu biến chi tiết hơn về tool
mà còn đòi hỏi phải có kiến thức về chương trình đang cần đo và kiến thức về ngôn ngữ lập trình Nếu như ở bước tạo test script chỉ yêu cầu 1 tester có trình độ chuyên môn trung bình về tool thì ở công đoạn chỉnh sửa test script thì cần 1 tester phải có trình độ khá về tool sử dụng
Thực tế cho thấy sau khi record thì script chưa thể chạy được ngay mà có rất nhiều ràng buộc từ phía ứng dụng cần đo khiến ta phải chỉnh sửa cho phù hợp Chính vì lý
do đó mà đây là công đoạn có thể cho là quan trọng nhất và khó nhất khi sử dụng tool tự động
Các công việc thường thực hiện trong giai đoạn này là:
- Chạy script, tìm và gỡ lỗi
- Add thêm các control cần thiết
- Add thêm các function cần thiết
- Add thêm danh sách dữ liệu cần thiết
Chỉ khi kịch bản của bạn chạy ổn định, không còn bất kỳ một lỗi nào thì script này
mới sẵn sằng để đưa vào kiểm thử
3.2.4 Chạy test script để kiểm thử tự động
Đây là bước thực thi những script mà bạn đã tạo được từ bước 2 trên môi trường đã chuẩn bị từ bước 1 Nhân viên kiểm thử sẽ thực hiện cài đặt các script
Trang 28trên các may client và sử dụng tool để Run và control các script này theo các bước tùy thuộc vào tool sử dụng Những lưu ý trong qua trình chạy này cũng phải chú ý
để thu được kết quả chính xác nhất Ví dụ như sau mỗi lần đo phải restart ứng dụng,
restart database, cache …
3.2.5 Đánh giá kết quả
Tương ứng với mỗi lần chạy test script thì nhân viên kiểm thử sẽ thực hiện lưu lại kết quả này vào thư mục của dự án Tùy theo yêu cầu mã sẽ đánh giá sau mỗi lần chạy hay đánh giá ở giai đoạn khi kết thúc tất cả các lần đo
Việc đánh giá sẽ dựa trên các report trả về của tool kiểm thử và so sánh với với các tiêu chí đặt ra từ đầu giai đoạn kiểm thử Nhân viên kiểm thử sẽ quyết định chức năng đạt hay không đạt yêu cầu Có thể kèm theo phân tích lý do và các điểm dẫn đến quyết định đó Các kết luận này sẽ được nằm trong một báo cáo kiểm thử, tài liệu này sẽ được gửi đến các bộ phân liên quan trong dự án bao gồm quản trị dự án, nhân viên giải pháp, nhân viên phát triển và quản lý chất lượng để nắm được kết quả và xử lý khi có lỗi
Kết thúc giai đoạn kiểm thử thì các test script cũng được coi như tài nguyên của dự
án, cần được lưu trữ lại để tái sử dụng cho những lần kiểm thử sau
3.3 Phân loại
Hiện nay, tool có thể hỗ trợ cho tất cả các giai đoạn trong vòng đời phát triển của phần mềm Theo cách này thì ta có các nhóm tool như là: test design tool, test management tool, static analysis tool, coverage tool, debugging tool, dynamic tool, simulator
Tuy nhiên ta sẽ thao luận sâu hơn với cách phân loại theo chức năng và
phạm vi ứng dụng của tool như sau đây
3.3.1 Tool đo tải và hiệu năng
Các tool được sử dụng với mục đích test tải và hiệu năng cho các hệ thống Nguyên tắc chung là tạo ra nhiều người dùng ảo, nhiều request, nhiều secssion để
Trang 29gây áp lực đến hệ thống đồng thời hoặc trong 1 khoảng thời gian từ đó đánh giá khả năng chịu tải, khả năng phục hồi, điểm ngưỡng tải của ứng dụng …
Một số tool thuộc loại này đó là: Tsung, PerformanceXpert, LoadUI, AppViewWeb,
LoadRunner, Jmeter …
3.3.2 Tool kiểm thử các ứng dụng Java
Là các tool phục vụ cho automation test với các ứng dụng viết bằng Java Một số tool thuộc loại này đó là: Arquillian, RTI, Yourkit Java Profiler, VisualVM,
Lapse, Checkmart, TestNG, LinkScan …
3.3.3 Tool kiểm tra đường dẫn liên kết
Là các tool phục vụ cho việc kiểm tra các link trên hệ thống: kiểm tra hosted link, URL, xác định các tập tin không được khai báo, Link bị hỏng, Link lỗi cú pháp
…
Một số tool thuộc loại này đó là: LinkTiger, HiSoftware, Link Validation
Utinlity, ChangeAgent, Link Checker Pro, WebLink Validator, LinkScan
3.3.4 Tool kiểm thử tính hợp lệ
Là các tool hỗ trợ cho việc kiểm tra tính hợp lệ của Page linh, chính tả, cú pháp HTML…
Một số tool thuộc loại này đó là: Total Validator, RealValidator, HTML
Validator, CSE 3310 HTML Validator
3.3.5 Tool kiểm thử chức năng Web/test hồi quy
Là các tool phục vụ cho việc automation test chức năng các ứng dụng Web thường sử dụng trong quá trình Regression test Nguyên tắc chung là record lại các đối tượng và hành động thành các script tự động để sử dụng cho các lần test sau
Số lượng các tool ở loại này là rất phong phú và được sử dụng thường xuyên trong việc kiểm thử, có thể kể ra đây 1 số tool thuộc loại này như: QuickTestPro, Rational Robot, Selenium, Fabasoft app.test, Janova, FuncUnit, qUnit, Twist, QF-Test,
WebDriver, QEngine, Test Complete Enterprise, SimpleTest…
Trang 303.3.6 Tool test bảo mật cho ứngd dụng Web
Là các tool quét các lỗ hổng về bảo mật cho các ứng dụng Web như các lỗ hổng SQL injection, XSS, CFRS, các vấn đề bảo mật về File,
Một số tool thuộc loại này đó là: Vega, Aribisec Web Analyzer, Golem, Skipfish, Seeker, WebSecurity, Arachni, Tarantula, RATS, beSTORM, Proxy Zed, SPIKE
Proxy, AppScan…
3.3.7 Tool test các ứng dụng cho Mobile
Là các tool hỗ trợ giả lập để test các ứng dụng phát triển cho Mobile trên nền Ipad, Iphone, Android
Một số tool thuộc loại này đó là: SeeTestMobile, ZAP-fiX for Mobile, Mobiltest, M-eux, Android APK for Selenium, Instruments for Xcode 4, Perfecto Mobile, Robotium, FoneMonkey, TestQuest CountDown, Intent Fuzzer, MITE…
3.4 Giới thiệu chi tiết về một số tool đang sử dụng phổ biến ở Việt Nam
Về lĩnh vực kiểm thử phần mềm, ở Việt Nam hiện nay có rất nhiều tool test đang được sử dụng Tùy vào mục đích sử dụng và khả năng của doanh nghiệp và tool test có thể là tool kiểm thử hiệu năng hoặc chức năng, miễn phí mã nguồn mở hoặc các tool thương mại
Các tool thường được các công ty phần mềm của Việt Nam sử dụng vì độ phù hợp với các sản phẩm phần mềm đang phát triển tại Việt Nam như là:
- Các tool thương mại: QuickTestPro, Rational Robot, TestComplete, Load Runner…
- Các tool mã nguồn mở miễn phí: Jmeter, Selenium, Ruby…
Dưới đây xin giới thiệu chi tiết hơn về đặc điểm, tính năng của một số tool đang được sử dụng
Trang 313.4.1 QuickTestPro (QuickTest Professional)
3.4.1.1 Giới thiệu
Trong lĩnh vực kiểm thử tự động hiện có khá nhiều tool test thương mại nổi tiếng, phổ biến như QuickTest Professional, WinRunner, Rational Robot, SilkTest, JTest,… Trong số đó, QuickTest Professional của hãng Mercury khá tốt và mạnh, bao gồm nhiều chức năng điển hình của một công cụ kiểm tra tự động
QuickTestPro là tool test dùng để kiểm thử chức năng (functional test) và cho phép thực hiện kiểm thử hồi quy (regression test) một cách tự động Đây cũng là công cụ
áp dụng phương pháp Keyword-Driven, một kỹ thuật scripting (lập trình trong kiểm thử tự động) hiện đại, cho phép nhân viên kiểm thử bổ sung testcase bằng cách tạo file mô tả cho nó mà không cần phải chỉnh sửa hay bổ sung bất cứ script nào cả Nó cũng phù hợp trong tình huống chuyển giao công việc mà người mới tiếp nhận chưa
có thời gian hoặc không hiểu script vẫn có thể thực hiện kiểm thử phần mềm theo
đúng yêu cầu
Loại phần mềm hỗ trợ
QuickTestPro giúp chúng ta kiểm thử phần mềm theo hướng chức năng trên rất nhiều loại chương trình phần mềm khác nhau Tuy nhiên Mercury chỉ hỗ trợ sẵn một số loại chương trình thông dụng như:
Trang 32Một số loại chương trình khác đòi hỏi chúng ta phải cài đặt thêm thành phần
bổ sung của QuickTestPro thì mới thực hiện kiểm tra được Các loại chương trình
đó là:
.NET
• NET Framework 1.0, 1.1, 2.0 beta
• Các đối tượng chuẩn của NET và các đối tượng khác thừa kế từ các đối tượng
Trang 33• IBM Personal Communications
Repository (OR – được giải thích ở phần sau) để QuickTestPro nhận ra sự thay đổi
đó mà không cần thay đổi bất cứ test script nào
• Hỗ trợ làm việc theo nhóm thông qua sự chia sẻ thư viện, thống nhất quản lý Object Repository
• Thực tế cho thấy, QuickTestPro thực hiện kiểm thử tự động trên nhiều trình duyệt cùng lúc tốt hơn những tool test khác
• Với chức năng Recovery Scenarios, QuickTestPro cho phép xử lý những sự kiện hoặc lỗi không thể đoán trước có thể làm script bị dừng trong khi đang chạy
• QuickTestPro có khả năng hiểu test script của Mercury Winrunner (một công cụ kiểm tra khác của Mercury)
3.4.1.3 Các thành phần quan trọng trong QuickTestPro
Trang 34Object Repository (OR):
Cấu trúc theo dạng cây, mô tả các đối tượng trong phần mềm được kiểm tra Đây được xem là cầu nối để test script tương tác với phần mềm được kiểm tra
Khi ra lệnh cho QuickTestPro ghi lại thao tác người dùng lên phần mềm thì trong OR sẽ tự động phát sinh thành phần đại diện cho những đối tượng trên phần mềm vừa được thao tác
OR có thể tổ chức thành 2 loại, một loại dùng chung trong nhiều test script, loại khác dùng theo từng Action
Để xem OR, chọn menu Tools -> Object Repository
Checkpoint:
Có thể hiểu là nơi kiểm tra trong test script, khi chạy nó sẽ thực hiện so sánh kết quả thực tế khi kiểm tra phần mềm với kết quả mong đợi Sau khi tiến hành so sánh QuickTestPro sẽ tự động ghi lại kết quả vào Test Results (nơi lưu kết quả khi
chạy test script)
Ngôn ngữ sử dụng viết script
QuickTestPro sử dụng ngôn ngữ VBScript để viết test script Đây là ngôn ngữ dễ học; rất giống ngôn ngữ VBA Chế độ Expert View của QuickTestPro là chế
độ soạn thảo dành cho VBScript Ngoài việc dùng VBScript để tương tác với phần mềm được kiểm tra, QuickTestPro còn có khả năng cấu hình hệ thống bằng ngôn ngữ Windows Script
Với nhiều chức năng ưu việt như đã đề cập bên trên, QuickTestPro là một Test Tool mạnh mẽ có khả năng hỗ trợ đắc lực cho kiểm thử Việc ứng dụng nó hợp
lý chắc chắn sẽ giúp giảm công sức của nhân viên kiểm thử đồng thời làm tăng chất lượng phần mềm Trong điều kiện Việt Nam hiện nay, với tỷ trọng gia công phần mềm ngày càng lớn tại các công ty phần mềm, người viết cho rằng kiểm tra phần mềm tự động với những công cụ như QuickTestPro rất đáng để các doanh nghiệp
phần mềm quan tâm nghiên cứu, đầu tư và ứng dụng
Trang 353.4.2 Selenium
3.4.2.1 Giới thiệu
Selenium là tool kiểm thử đang được áp dụng rộng rãi cho các hệ thống Web Với nhiều ưu điểm sau:
o Là tool open source => dễ cài đặt và không tốn chi phí sử dụng Quá trình
sử dụng có thể dễ dàng customize theo nhu cầu
o Dễ sử dụng hơn so với các tool khác cùng loại trên thị trường (QuickTest Pro, rational Robot…) => Nhân viên kiểm thử dễ dàng tiếp cận
o Là tool hỗ trợ mạnh cho các ứng dụng Web (đặc biệt trình duyệt FireFox)
=> phù hợp cho nhiều hệ thống đang phát triển tại trung tâm phần mềm Ngoài ra có thể hỗ trợ bất kỳ 1 trình duyệt nào trong khi chỉ cần tạo script trên 1 trình duyệt
Hỗ trợ nhiều loại ngôn ngữ lập trình: HTML, Java, C#, C … cho phép người sử dụng ngôn ngữ sở trường của mình để tạo Scipt
Mỗi module có một chức năng và nhiệm vụ riêng, có vai trò hỗ trợ khác nhau trong quá trình kiểm thử
Trang 37- Selenium IDE là 1 add-on của FireFox, cho phép nhân viên kiểm thử và nhân viên phát triển ghi lại các luồng chức năng trên màn hình chương trình Do
đó Selenium IDE phù hợp cho việc kiểm thử GUI và các chức năng cần kiểm tra chủ yếu về luồng chức năng theo màn hình của các hệ thống sử dụng trình duyệt FireFox
- Selenium IDE cung cấp sẵn 1 thư viện các lệnh tương tác màn hình, đáp ứng được hầu hết các sự kiện màn hình khi người dùng cần Cách gọi lệnh rất trực quan dễ dùng, không đòi hỏi người dùng phải có kiến thức nhiều về ngôn ngữ lập trình
- Selenium cung cấp cơ chế mở rộng linh hoạt, cho phép người dùng dễ dàng
mở rộng thư viện lệnh theo nhu cầu Sử dụng JavaScript – ngôn ngữ lập trình
khá đơn giản hiện nay
Command trong Selenium IDE
Một dòng lệnh trong Selenium IDE được cấu thành từ 3 tham số: command, target, value
Selenimu RC cho phép chúng ra test trên nhiều trình duyệt khác nhau mà không cần phải cài đặt Selenium core trên web server cũng không cần thay đổi gì trên script
Trang 38Sự thay đổi này cho phép developer và tester có thể sử dụng các ngôn ngữ lập trình
để gửi command tới browser cho phép thực hiện các testcase phức tạp mà Selenium IDE không làm được như database testing Không đơn giản như Selenium IDE, để
sử dụng được Selenium RC đòi hỏi người sử dụng cần có kiến thức về ngôn ngữ lập trình, biết cách tự tạo ra script test
Selenium RC hỗ trợ chạy trực tiếp các script được tạo từ Selenium IDE với nhiều
trình duyệt khác ngoài FireFox
Run Script từ Selenium IDE với Selenium RC
Trên màn hình command Prompt chạy câu lệnh sau:
Java –jar selenium-server-standalone.jar –htmlsuite *trình_duyệt
Kết quả: Xuất hiện 2 cửa sổ
1 cửa sổ hiển thị thông tin của testsuite được chạy trên Selenium Core Framework như hình vẽ
Trang 39Hình 2: Cửa sổ Selenium Core Framework
1 cửa sổ khác mở ra trình duyệt tương ứng và load đường dẫn URL tương ứng trong command Sau đó sẽ thực thi testsuite trên cửa sổ này Kết thúc sẽ ghi kết quả test ra file result.html tương ứng
Hình 3: File chứa kết quả result.html
c, Selenium Core
Selenium Core yêu cầu máy client chạy là 1 web server cho ứng dụng cần đo
và cần file Selenium Core zip Selenium Core giúp thực thi các script test đã được
Trang 40tạo ra bằng Selenium IDE với bất kỳ một trình duyệt nào trong đó máy chạy script đóng luôn vai trò là server của ứng dụng
d, Selenium Grid
Selenium Grid là một sự mở rộng cho Selenium RC cho phép run với số lượng lớn test suite và trên nhiều môi trường Selenium Grid cho phép bạn chạy nhiều bài test song song và nhiều bài test khác nhau có thể chạy cùng lúc trên nhiều máy từ xa
Điều này có 2 ưu điểm Thứ nhất, nếu bạn có 1 số lượng lớn test suite và 1 test suite chạy chậm bạn có thể tăng hiệu suất bằng cách sử dụng Selenium Grid, cho phép điều khiển test suite để chạy nhiều bài test khác nhau tại cùng lúc trên nhiều máy Thứ hai, nếu bạn cần phải chạy test suite trên nhiều môi trường khác nhau Seleneum Grid sẽ giúp bạn chạy test trên nhiều máy cùng lúc Selenium Grid ghóp phần giảm một phần rất lớn thời gian chạy test suite bằng cách xử lý song song
e, Selenium WebDriver
Tính năng mới quan trọng nhất trong Selenium 2 là sự tích hợp của WebDriver API WebDriver được thiết kế để cung cấp 1 giao diện chương trình đơn giản hơn, more concise ghóp phần giải quyết một số hạn chế trong Selenium RC API Selenium WebDriver được phát triển để hỗ trợ tốt hơn những trang web động nơi có những element có thể thay đổi kể cả khi trang tự động load lại Mục đích của WebDriver là đưa ra một API hướng đối tượng được thiết kế tốt để cung cấp sự hỗ
trợ tốt hơn cho những vấn đề trong quá trình kiểm thử ứng dụng web nâng cao Điểm khác của WebDriver so với Selenium RC
Selenium WebDriver sử dùng lệnh gọi trực tiếp đến trình duyệt vốn có sẵn một cách tự động Vì sử dụng trực tiếp những trình duyệt có sãn nên những tính năng được hỗ trợ sẽ phụ thuộc vào trình duyệt được sử dụng Trong khi Selenium
RC làm việc như nhau trên các trình duyệt được hỗ trợ