Bối cảnh và vấn đề nghiên cứu

Trong bối cảnh công nghệ thông tin phát triển với sự đa dạng của các nền tảng thiết bị như web, di động và điện toán đám mây (Cloud), các sản phẩm phần mềm bắt buộc phải vận hành ổn định và tương thích trên nhiều môi trường khác nhau. Điều này đặt ra thách thức lớn cho các đơn vị sản xuất và phát triển phần mềm trong việc kiểm soát chất lượng sản phẩm. Kiểm thử phần mềm đóng vai trò thiết yếu nhằm xác nhận yêu cầu nghiệp vụ, đánh giá độ ổn định của hệ thống, phát hiện và ngăn ngừa các lỗi tiềm ẩn trước khi đưa sản phẩm vào vận hành thực tế.

Thực tiễn ngành công nghệ thông tin tại Việt Nam ghi nhận sự mất cân đối lớn về cơ cấu nhân lực giữa lập trình viên và kiểm thử viên. Phần lớn sinh viên tốt nghiệp ngành công nghệ thông tin có xu hướng theo đuổi công việc lập trình thay vì kiểm thử. Tại các công ty phần mềm quốc tế, tỷ lệ nhân sự trung bình là 4 kiểm thử viên trên 1 lập trình viên (tỷ lệ 4:1). Ngược lại, tại thị trường Việt Nam, tỷ lệ này ở mức 5 lập trình viên mới có 1 kiểm thử viên (tỷ lệ 5:1). Dữ liệu nghiên cứu từ nguồn bachkhoa-aptech.vn được tác giả trích dẫn cho thấy đến năm 2020, thị trường lao động trong nước thiếu hụt khoảng 10.000 kỹ sư kiểm thử (trong văn bản ghi nhận mốc khoảng 10 nghìn nhân sự). Đồng thời, khi Việt Nam tiếp nhận làn sóng đầu tư gia công phần mềm từ các tập đoàn công nghệ như Samsung, LG, Renesas, Foxconn, Fujitsu, Canon, Panasonic, HP, CSC, Sony, nhu cầu kiểm chuẩn phần mềm ngày càng gia tăng. Tuy nhiên, phần lớn doanh nghiệp trong nước chưa có quy trình kiểm thử dùng chung mà tự ban hành quy trình riêng, chủ yếu áp dụng kiểm thử thủ công dựa trên đặc tả. Việc triển khai các công cụ tự động hóa còn gặp rào cản do chi phí bản quyền công cụ chuyên dụng quá cao. Do đó, việc ứng dụng các công cụ mã nguồn mở như Selenium để tự động hóa quy trình kiểm thử ứng dụng web là một hướng đi thực tế nhằm tiết kiệm thời gian, kinh phí và nhân lực.

Mục tiêu nghiên cứu của khóa luận được xác định cụ thể gồm:

  1. Tìm hiểu lý thuyết chung về kiểm thử phần mềm.
  2. Hiểu được các công cụ hỗ trợ kiểm thử phần mềm, đặc biệt là Selenium.
  3. Tìm hiểu sâu về các tính năng của Selenium: đưa ra hướng dẫn cài đặt và sử dụng hiệu quả bộ công cụ.
  4. Áp dụng kiến thức lý thuyết đã tìm hiểu để thực hiện kiểm thử cho một ứng dụng cụ thể.

Các yêu cầu thực hiện tương ứng gồm:

  1. Nắm vững cơ sở lý thuyết chung về kiểm thử phần mềm.
  2. Nắm vững cách sử dụng phần mềm Selenium.
  3. Áp dụng được các phương pháp về kiểm thử phần mềm vào bài toán thực tế.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Cơ sở lý thuyết kiểm thử phần mềm, các kỹ thuật kiểm thử ứng dụng web và bộ công cụ kiểm thử tự động Selenium (trọng tâm là tiện ích Selenium IDE).
  • Đối tượng thực nghiệm: Hệ thống website của Công ty Cổ phần Thương mại Phát triển Kỹ thuật và Nhân lực Quốc tế (JVNET) tại địa chỉ https://jvnet.vn/.
  • Không gian nghiên cứu: Bộ môn Công nghệ phần mềm thuộc Khoa Công nghệ thông tin, Học viện Nông nghiệp Việt Nam và Công ty TNHH Đầu tư và thương mại dịch vụ Việt Đức.
  • Thời gian nghiên cứu: Lịch làm việc 3 buổi/tuần, từ ngày 20/02/2022 đến ngày 06/04/2021 (ghi nhận nguyên văn theo mốc thời gian trình bày trong báo cáo khóa luận).

Cơ sở lý thuyết và phương pháp

Khóa luận xây dựng nội dung dựa trên nền tảng lý thuyết công nghệ phần mềm và các chuẩn mực kiểm thử:

  • Khái niệm và phân loại phần mềm: Phần mềm được định nghĩa là tập hợp các tập tin có mối liên hệ chặt chẽ nhằm thực thi các nhiệm vụ trên thiết bị điện tử thông qua việc gửi chỉ thị đến phần cứng. Phân loại theo phương thức hoạt động gồm phần mềm hệ thống (hệ điều hành, driver, firmware, BIOS), phần mềm ứng dụng, phần mềm dịch mã (trình biên dịch, trình thông dịch) và nền tảng ứng dụng (như ASP.NET). Phân loại theo quyền can thiệp mã nguồn gồm phần mềm mã nguồn đóng và phần mềm mã nguồn mở.
  • Khái niệm lỗi phần mềm: Phân biệt rõ các trạng thái sai (Fault - lỗi phát sinh từ phân tích, thiết kế hoặc mã nguồn), thất bại (Failure - hành vi sai lệch khi thực thi chương trình), sự cố (Incident - hiện tượng lỗi hiển thị trực quan cho người dùng hoặc kiểm thử viên nhận biết), tính năng thừa so với tài liệu đặc tả và các lỗi phi chức năng.
  • Đặc tả yêu cầu phần mềm (SRS): Phân loại yêu cầu khách hàng theo sản phẩm và tiến trình, theo chức năng (yêu cầu chức năng, yêu cầu phi chức năng, yêu cầu đặc tả thuộc tính kiến trúc nổi bật), theo tính kiểm định và theo phạm vi đặc tả (yêu cầu hệ thống và yêu cầu phần mềm).
  • Cấp độ và quy trình kiểm thử: 4 cấp độ kiểm thử chuẩn hóa gồm Kiểm thử đơn vị (Unit testing), Kiểm thử tích hợp (Integration testing), Kiểm thử hệ thống (System testing) và Kiểm thử chấp nhận (Acceptance testing với hai hình thức Alpha test và Beta test). Vòng đời kiểm thử phần mềm (STLC) tuân thủ 6 giai đoạn kế tiếp nhau.
  • Các kỹ thuật thiết kế ca kiểm thử hộp đen: Kỹ thuật phân vùng tương đương, kỹ thuật phân tích giá trị biên (tập trung vào giá trị nhỏ nhất, lớn nhất, giá trị lân cận và giá trị danh định), kỹ thuật đoán lỗi dựa trên kinh nghiệm và kỹ thuật chuyển trạng thái dựa trên việc theo dõi sự thay đổi trạng thái của hệ thống theo chuỗi sự kiện.

Phương pháp nghiên cứu thực hiện trong đề tài:

  • Phương pháp nghiên cứu tài liệu: Thu thập, tổng hợp, dịch thuật và phân tích các tài liệu học thuật, giáo trình công nghệ phần mềm và hệ thống tài liệu hướng dẫn kỹ thuật trực tuyến của bộ công cụ kiểm thử tự động Selenium.
  • Phương pháp tham vấn chuyên môn: Tiếp thu ý kiến chỉ đạo, định hướng nghiên cứu và hiệu chỉnh nội dung từ giảng viên hướng dẫn khoa học (ThS. Hoàng Thị Hà).
  • Phương pháp thực nghiệm: Cài đặt và cấu hình tiện ích Selenium IDE phiên bản 2.x trên trình duyệt Mozilla Firefox; phân tích giao diện và đặc tả luồng sự kiện của website JVNET; thiết kế các ca kiểm thử (test case) và lập trình kịch bản kiểm thử tự động bằng cú pháp Selenese để kiểm tra chức năng.

Nguồn dữ liệu sử dụng:

  • Dữ liệu thứ cấp: Các số liệu thống kê về thị trường lao động ngành kiểm thử từ cổng thông tin bachkhoa-aptech.vn; hệ thống tài liệu kỹ thuật về các công cụ WebLoad, Apache JMeter, Burp Suite, Exploit-Me, Ranorex và Selenium.
  • Dữ liệu sơ cấp: Cấu trúc trang web, quy chuẩn định dạng dữ liệu đầu vào, thông báo phản hồi giao diện và các luồng nghiệp vụ thực tế của các phân hệ chức năng trên website https://jvnet.vn/.

Nội dung chính theo từng chương

Chương I: Phần mềm và kiểm thử phần mềm

Chương I tập trung hệ thống hóa các khái niệm nền tảng về công nghệ phần mềm và quy trình đảm bảo chất lượng. Tác giả nhấn mạnh kiểm thử phần mềm là quá trình tìm kiếm thất bại hoặc chứng minh phần mềm vận hành đúng đắn, chiếm vị trí quyết định trong việc nâng cao độ tin cậy của sản phẩm thông qua chu trình khép kín: "đưa lỗi vào – tìm lỗi – khử lỗi đi".

Quy trình kiểm thử phần mềm chuẩn được tác giả phân rã thành 6 giai đoạn cụ thể:

  1. Phân tích yêu cầu: Đội ngũ QA nghiên cứu tài liệu khách hàng, bản mẫu (prototype) và tài liệu đặc tả để xác định phạm vi kiểm thử chức năng và phi chức năng.
  2. Lập kế hoạch kiểm thử: Trưởng nhóm kiểm thử xác định phạm vi thời gian, phương pháp tiếp cận và xây dựng các tài liệu kế hoạch (test plan, test schedule, test estimation).
  3. Thiết kế kịch bản kiểm thử: Đọc hiểu tài liệu, thiết kế danh sách ca kiểm thử (test case), chuẩn bị dữ liệu kiểm thử (test data) và kịch bản tự động (test automation script).
  4. Thiết lập môi trường kiểm thử: Chuẩn bị môi trường phần cứng, phần mềm và chạy các ca kiểm thử khói (smoke test) để xác nhận tính sẵn sàng.
  5. Thực hiện kiểm thử: Tiến hành chạy ca kiểm thử, ghi nhận lỗi lên công cụ quản lý lỗi, thực hiện kiểm thử lại (retest) và kiểm thử hồi quy (regression test).
  6. Đóng chu trình kiểm thử: Tổng hợp báo cáo kết quả kiểm thử (test results), danh sách lỗi (defect reports) và đánh giá mức độ hoàn thiện của hệ thống.

Về phương pháp tiếp cận, khóa luận so sánh giữa kiểm thử thủ công (thao tác trực tiếp, dễ sai sót do con người, chi phí nhân công cao) và kiểm thử tự động (máy móc thực thi kịch bản định sẵn, độ chính xác cao nhưng phụ thuộc chất lượng kịch bản). Về kỹ thuật thực thi, kiểm thử hộp trắng (kiểm thử cấu trúc mã nguồn, đường dẫn điều khiển, kiểm thử nhánh) được đối chiếu với kiểm thử hộp đen (kiểm thử chức năng từ giao diện người dùng, không can thiệp mã nguồn).

Khóa luận chuẩn hóa thang đo mức độ nghiêm trọng của lỗi phần mềm thành 10 cấp độ, được tổng hợp trong bảng sau:

Cấp độ Tên mức độ Mô tả và biểu hiện thực tế
1 Nhẹ Lỗi hiển thị chính tả
2 Vừa Gây hiểu lầm hoặc chứa thông tin thừa
3 Khó chịu Tên bị thiếu, chữ bị cắt cụt hoặc hóa đơn hiển thị giá trị 0.0 đồng
4 Bực mình Một vài giao dịch không được hệ thống xử lý
5 Nghiêm trọng Làm mất giao dịch của người dùng
6 Rất nghiêm trọng Xử lý sai lệch nội dung giao dịch
7 Cực kỳ nghiêm trọng Lỗi rất nghiêm trọng diễn ra với tần suất thường xuyên
8 Quá quắt Gây tổn hại hoặc hủy hoại cơ sở dữ liệu
9 Thảm họa Toàn bộ hệ thống dừng hoạt động
10 Dịch họa Sự cố thảm họa lây lan trên diện rộng

Cấu trúc một ca kiểm thử chuẩn được định nghĩa gồm: Test case ID, Function (chức năng), Pre-condition (điều kiện tiên quyết), Test Data (dữ liệu thử nghiệm), Test Steps (các bước thực hiện), Expected Results (kết quả mong đợi), Actual result (kết quả thực tế: pass, fail, untested, N/A) và Comments (ghi chú hoặc ảnh chụp minh chứng). Chương này cũng phân tích 7 nguyên tắc kiểm thử cốt lõi: kiểm thử chỉ chứng minh sự hiện diện của lỗi; kiểm thử toàn bộ là bất khả thi; cần kiểm thử càng sớm càng tốt; lỗi phân bổ tập trung; nghịch lý thuốc trừ sâu (cần liên tục cập nhật test case); kiểm thử phụ thuộc ngữ cảnh; và quan niệm sai lầm về việc phần mềm hoàn toàn "hết lỗi".

Chương II: Kiểm thử ứng dụng trên nền web

Chương II phân tích các đặc trưng riêng biệt của ứng dụng trên nền tảng web, bao gồm đối tượng người dùng đa dạng, chạy trên nhiều hệ điều hành và trình duyệt khác nhau, lưu lượng truy cập không thể dự đoán trước và yêu cầu khắt khe về thời gian phản hồi. Nội dung kiểm thử ứng dụng web được chia thành 6 hạng mục chính:

  1. Kiểm thử chức năng: Kiểm tra tính toàn vẹn của tất cả liên kết (liên kết ngoài, nội bộ, liên kết trong trang, liên kết gửi email); kiểm tra biểu mẫu (form) đối với các trường bắt buộc, giá trị mặc định, kiểm tra hợp lệ dữ liệu (validation) và các thao tác xem, nhập, lưu, sửa, xóa; kiểm tra tính đúng đắn khi truy vấn cơ sở dữ liệu; kiểm thử cookie (lưu trữ tùy chọn, trạng thái đăng nhập); kiểm tra cú pháp HTML/CSS phục vụ khả năng nhận diện trên các công cụ tìm kiếm (Google, Yahoo, Bing).
  2. Kiểm thử tính khả dụng: Đánh giá tính thân thiện của giao diện, tính nhất quán của hệ thống menu chính trên các trang, kiểm tra hoạt động của các nút điều hướng (button, text link, breadcrumb), đảm bảo văn bản không lỗi chính tả và hình ảnh trình bày hợp lý.
  3. Kiểm thử giao diện hệ thống: Kiểm tra sự tương tác giữa Web Server, Application Server và Database Server. Hệ thống phải hiển thị cảnh báo phù hợp khi server dữ liệu gặp sự cố hoặc kết nối bị ngắt quãng.
  4. Kiểm thử khả năng tương thích: Đảm bảo ứng dụng hiển thị và hoạt động ổn định trên nhiều trình duyệt (Chrome, Firefox, Internet Explorer, Safari, Opera), trên các hệ điều hành khác nhau và tương thích với thiết bị ngoại vi (định dạng in ấn qua máy in).
  5. Kiểm thử hiệu năng: Thực hiện kiểm thử tải (Load Testing) để đo thời gian phản hồi khi lưu lượng truy cập tăng cao và kiểm thử áp lực (Stress Testing) nhằm đẩy hệ thống vượt quá giới hạn chịu đựng để kiểm tra khả năng phục hồi.
  6. Kiểm thử bảo mật: Xác minh cơ chế ngăn chặn truy cập trực tiếp URL nội bộ khi chưa đăng nhập, kiểm tra cơ chế phân quyền tài khoản khi thay đổi tham số ID trên thanh địa chỉ, xử lý dữ liệu đầu vào không hợp lệ tại trường đăng nhập, kiểm soát quyền tải tệp tin thư mục, kiểm tra mã xác thực CAPTCHA và ghi nhật ký lỗi (log) trên máy chủ web.

Chương II đồng thời phân loại và đánh giá các công cụ hỗ trợ kiểm thử ứng dụng web phổ biến:

Nhóm công cụ Tên công cụ Đặc tính kỹ thuật và chi phí
Kiểm thử hiệu năng WebLoad Đo khả năng chịu tải và độ chịu lỗi; hỗ trợ công nghệ Ajax, .NET, HTML5; tích hợp cơ chế ghi/phát dựa trên DOM và kịch bản Javascript.
Kiểm thử hiệu năng Apache JMeter Công cụ mã nguồn mở, tích hợp kế hoạch kiểm thử, hỗ trợ kiểm thử tải và kiểm thử chức năng web.
Kiểm thử bảo mật Burp Suite Quét lỗ hổng bảo mật ứng dụng web; bản miễn phí cung cấp module Spider (thu thập thông tin trang) và Intruder (tấn công tự động); tích hợp Burp Scanner.
Kiểm thử bảo mật Exploit-Me Tiện ích tích hợp trên Firefox gồm XSS-Me (phát hiện lỗi Cross-Site Scripting) và SQL Inject-Me (kiểm tra lỗi SQL Injection).
Kiểm thử chức năng Ranorex Kiểm thử tự động trên web, desktop và di động; chi phí bản quyền thương mại 3500 USD/năm.
Kiểm thử chức năng Selenium Bộ công cụ mã nguồn mở kiểm thử tự động ứng dụng web; đa trình duyệt, đa hệ điều hành, hỗ trợ nhiều ngôn ngữ lập trình, hoàn toàn miễn phí.

Chương III: Kiểm thử ứng dụng trên nền web bằng công cụ Selenium

Chương III đi sâu vào bộ công cụ Selenium và thực nghiệm kiểm thử trên hệ thống thực tế. Lịch sử phát triển của Selenium được tác giả khái quát từ năm 2004 tại ThoughtWorks với tên gọi JavaScriptTestRunner. Năm 2007, tác giả Jason Huggins gia nhập Selenium Team thuộc Google để tiếp tục phát triển công cụ. Hệ sinh thái Selenium bao gồm 4 thành phần:

  • Selenium IDE: Tiện ích mở rộng trên trình duyệt Mozilla Firefox do Shinya Kasatani phát triển ban đầu, cho phép ghi (Record) và phát lại (Playback) thao tác mà không bắt buộc người dùng phải có kỹ năng lập trình.
  • Selenium RC: Cho phép viết kịch bản kiểm thử bằng các ngôn ngữ như Java, C#, PHP, Python, Ruby, Perl và HTML thông qua các thư viện API hỗ trợ.
  • Selenium WebDriver: Phiên bản nâng cấp kế nhiệm của RC, điều khiển trực tiếp trình duyệt thông qua lời gọi cấp hệ điều hành, hỗ trợ xử lý logic điều kiện (if, else) và vòng lặp.
  • Selenium Grid: Hỗ trợ thực thi song song các kịch bản kiểm thử trên nhiều máy tính và nhiều trình duyệt khác nhau theo mô hình kiểm thử phân tán.

Khóa luận tập trung nghiên cứu công cụ Selenium IDE do ưu điểm dễ cấu hình, giao diện trực quan, hỗ trợ thiết lập điểm dừng (breakpoint), gỡ lỗi (debug) và chèn ghi chú. Tuy nhiên, tác giả cũng chỉ rõ nhược điểm của Selenium IDE là chỉ chạy trực tiếp trên trình duyệt Firefox (cần cấu hình phụ trợ để chạy trên Chrome, IE), không hỗ trợ kiểm thử cơ sở dữ liệu, không kiểm thử được trên di động và khó xử lý các quy trình nghiệp vụ phức tạp.

Quy trình cài đặt Selenium IDE 2.x được tác giả hướng dẫn qua 5 bước thao tác: truy cập trang tải về chính thức, chọn phiên bản phát hành mới nhất, chọn "Add to Firefox", xác nhận cài đặt và khởi động lại trình duyệt Firefox để hoàn tất. Giao diện làm việc của Selenium IDE bao gồm các thành phần: thanh nhập địa chỉ gốc (Base URL), thanh trượt điều chỉnh tốc độ thực thi, các nút điều khiển thực thi (chạy toàn bộ bộ kiểm thử - Test Suite, chạy ca kiểm thử đơn lẻ, tạm dừng, tiếp tục, chạy từng bước - Step), nút ghi thao tác (Record), bảng thuộc tính câu lệnh (Command, Target, Value), tab Source (lưu kịch bản dưới định dạng HTML) và cửa sổ hiển thị nhật ký Log. Tiện ích còn cho phép người dùng thiết lập điểm dừng (Toggle breakpoint) và điểm bắt đầu (Set/Clear Start Point) nhằm hỗ trợ kiểm thử các phân đoạn nghiệp vụ mong muốn mà không cần chạy lại toàn bộ kịch bản từ đầu.

Hệ thống câu lệnh Selenese trong Selenium IDE được phân chia thành 3 nhóm thành phần:

  • Actions: Các thao tác tương tác trực tiếp với ứng dụng như click chuột, chọn liên kết (open, click, clickAndWait). Nếu hành động thất bại, kịch bản sẽ dừng thực thi.
  • Accessors: Kiểm tra trạng thái ứng dụng và lưu giá trị vào biến để tái sử dụng (storeTitle, storeElementPresent).
  • Assertions: Xác minh trạng thái thực tế so với kết quả mong đợi. Assertions gồm 3 cấp độ: assert (nếu kiểm tra sai sẽ dừng kịch bản ngay lập tức), verify (nếu sai vẫn ghi nhận lỗi và cho phép kịch bản tiếp tục thực thi) và waitFor (chờ đợi một điều kiện giao diện xuất hiện trước khi hết hạn thời gian timeout).

Các lệnh Selenese thông dụng được tổng hợp trong bảng sau:

STT Tên lệnh Ý nghĩa và chức năng
1 open Điều hướng trình duyệt đến một trang web theo URL xác định
2 click Thực hiện hành động click chuột vào phần tử
3 clickAndWait Click chuột và chờ tải hoàn tất một trang web mới
4 verifyTitle / assertTitle Xác minh tiêu đề trang web đúng với giá trị mong đợi
5 verifyTextPresent Xác minh sự xuất hiện của một đoạn văn bản bất kỳ trên trang
6 verifyElementPresent Xác minh sự tồn tại của phần tử giao diện theo thẻ HTML
7 verifyText Xác minh chính xác nội dung văn bản tại phần tử HTML chỉ định
8 verifyTable Xác minh nội dung mong đợi của một bảng dữ liệu
9 waitForPageToLoad Tạm dừng kịch bản cho đến khi trang web tải xong hoàn toàn
10 waitForElementPresent Tạm dừng kịch bản cho đến khi phần tử giao diện chỉ định xuất hiện

Trong phần thực nghiệm bài toán thực tế, khóa luận tiến hành kiểm thử trên website của Công ty Cổ phần Thương mại Phát triển Kỹ thuật và Nhân lực Quốc tế (JVNET, địa chỉ https://jvnet.vn/, thành lập từ tháng 9/2005). Tác giả tiến hành phân tích đặc tả và xây dựng kịch bản kiểm thử cho 3 module nghiệp vụ cốt lõi:

  • Module 1 (Đăng ký): Người dùng nhập thông tin gồm họ và tên, địa chỉ, số điện thoại, email, năm sinh, giới tính, nguồn biết đến JVNET và ghi chú. Hệ thống kiểm soát các điều kiện biên với mã thông báo: [1-1] "Cột được yêu cầu" (khi bỏ trống trường bắt buộc); [1-2] "Bạn cần nhập đúng định dạng cho {tên trường}" (khi nhập sai định dạng số điện thoại, email); và [1-3] "Cảm ơn bạn đã quan tâm và đăng ký tư vấn với chúng tôi" (khi nhập hợp lệ toàn bộ).
  • Module 2 (Tìm kiếm): Người dùng nhập từ khóa tìm kiếm tin tức, đơn hàng tuyển dụng. Hệ thống xử lý thông báo lỗi [2-1] "Sorry, but nothing matched your search terms. Please try again with some different keywords" khi từ khóa không tồn tại trong cơ sở dữ liệu, hoặc hiển thị danh sách bài viết tương ứng mà không phân biệt chữ hoa, chữ thường.
  • Module 3 (Liên hệ): Chức năng "Gọi lại cho tôi" yêu cầu nhập họ và tên, số điện thoại, email. Các mã phản hồi tương ứng gồm [3-1] "The field is required" (khi thiếu trường bắt buộc); [3-2] "{The field name} entered is invalid" (khi sai định dạng); và [3-3] "Cảm ơn bạn đã quan tâm và đăng ký tư vấn với chúng tôi" (khi gửi yêu cầu thành công).

Kết quả và đóng góp

Khóa luận đã hoàn thành các nội dung nghiên cứu và đạt được những kết quả cụ thể sau:

  • Về mặt lý thuyết: Hệ thống hóa một cách chi tiết toàn bộ cơ sở lý luận về kiểm thử phần mềm, cấu trúc tài liệu đặc tả yêu cầu (SRS), 4 cấp độ kiểm thử, 6 bước trong chu trình STLC, 7 nguyên tắc kiểm thử và 4 kỹ thuật thiết kế ca kiểm thử hộp đen. Khóa luận cung cấp các tiêu chí rõ ràng để đánh giá chất lượng của một ca kiểm thử hiệu quả và bảng phân loại 10 cấp độ nghiêm trọng của lỗi phần mềm.
  • Về công nghệ kiểm thử web: Khái quát và phân tích toàn diện 6 nội dung kiểm thử chuyên biệt cho ứng dụng web (chức năng, khả năng sử dụng, giao diện server, tính tương thích, hiệu năng và bảo mật). Tổng hợp và so sánh đặc tính kỹ thuật của các công cụ kiểm thử hiện đại gồm WebLoad, JMeter, Burp Suite, Exploit-Me, Ranorex và Selenium.
  • Về thực hành công cụ: Cung cấp tài liệu hướng dẫn kỹ thuật chi tiết về quy trình cài đặt, cấu hình, giải thích các thành phần giao diện, phím chức năng và cơ chế hoạt động của tập lệnh Selenese (phân định rõ Actions, Accessors và các cấp độ Assertions) trên công cụ Selenium IDE.
  • Về ứng dụng thực tế: Xây dựng thành công bộ ca kiểm thử chức năng cho 3 module nghiệp vụ chính (Đăng ký, Tìm kiếm, Liên hệ) trên hệ thống website đang vận hành của công ty JVNET (https://jvnet.vn/), bao quát đầy đủ các trường hợp kiểm thử hợp lệ, kiểm tra dữ liệu biên và đối soát các mã thông báo lỗi hệ thống.

Đóng góp của tác giả:

  • Khóa luận làm rõ tính cấp thiết của việc áp dụng kiểm thử tự động nhằm giải quyết sự mất cân đối nhân lực kiểm thử tại Việt Nam (tỷ lệ 5 lập trình viên : 1 kiểm thử viên) và bài toán chi phí của doanh nghiệp trong bối cảnh các công cụ thương mại (như Ranorex với mức phí 3500 USD/năm) vượt quá ngân sách của nhiều đơn vị.
  • Đề xuất quy trình ứng dụng công cụ mã nguồn mở miễn phí Selenium IDE vào thực tế kiểm thử ứng dụng web, cung cấp tài liệu tham khảo có tính ứng dụng cho việc đào tạo và thực hành kiểm thử phần mềm.

Hạn chế và hướng nghiên cứu tiếp

Khóa luận ghi nhận các hạn chế chính xuất phát từ giới hạn thời gian nghiên cứu và phạm vi công cụ:

  • Về phạm vi công cụ: Khóa luận chỉ mới tập trung nghiên cứu sâu thành phần Selenium IDE trong bộ công cụ Selenium. Các thành phần nâng cao khác như Selenium RC, Selenium WebDriver và mô hình kiểm thử song song phân tán Selenium Grid chưa được triển khai thực nghiệm trên hệ thống mã nguồn.
  • Về phạm vi kiểm thử: Việc thực nghiệm trên website JVNET mới chỉ dừng lại ở kiểm thử hộp đen mức chức năng giao diện người dùng và kiểm tra tính hợp lệ của biểu mẫu (form validation). Các nội dung kiểm thử quan trọng khác của ứng dụng web như kiểm thử hiệu năng chịu tải, kiểm thử áp lực và kiểm thử bảo mật chuyên sâu chưa được tiến hành thực nghiệm bằng công cụ tự động.
  • Hạn chế của công cụ lựa chọn: Tiện ích Selenium IDE còn tồn tại các rào cản kỹ thuật như chỉ vận hành tối ưu trên trình duyệt Mozilla Firefox, không hỗ trợ kiểm thử cơ sở dữ liệu trực tiếp, không hỗ trợ kiểm thử ứng dụng di động và gặp nhiều khó khăn khi cần tự động hóa các luồng nghiệp vụ phức tạp.

Hướng nghiên cứu tiếp theo được xác định dựa trên phạm vi mở rộng của đề tài:

  • Mở rộng nghiên cứu và ứng dụng Selenium WebDriver kết hợp các ngôn ngữ lập trình (Java, Python, C#) để viết kịch bản kiểm thử tự động linh hoạt hơn, cho phép lồng ghép các cấu trúc điều kiện logic phức tạp.
  • Nghiên cứu cơ chế vận hành của Selenium Grid nhằm xây dựng hệ thống kiểm thử tự động phân tán, cho phép chạy kịch bản kiểm thử song song trên nhiều trình duyệt và hệ điều hành cùng lúc.
  • Kết hợp Selenium với các công cụ kiểm thử hiệu năng (như Apache JMeter) và bảo mật (như Burp Suite) để hoàn thiện quy trình kiểm chuẩn chất lượng toàn diện cho ứng dụng web.

Giá trị tham khảo

Khóa luận mang lại giá trị tham khảo hữu ích cho nhiều đối tượng:

  • Sinh viên chuyên ngành Công nghệ thông tin, Hệ thống thông tin và Công nghệ phần mềm: Là tài liệu học tập phù hợp để nắm bắt kiến thức nền tảng về quy trình STLC, kỹ thuật thiết kế test case và các nguyên tắc kiểm thử phần mềm.
  • Kiểm thử viên mới vào nghề (Junior Tester): Có thể sử dụng nội dung Chương III như tài liệu hướng dẫn từng bước để cài đặt, nắm vững cú pháp Selenese và sử dụng Selenium IDE nhằm tự động hóa các tác vụ kiểm thử web cơ bản mà không đòi hỏi nền tảng lập trình chuyên sâu.
  • Các nhóm phát triển phần mềm và doanh nghiệp vừa và nhỏ: Cung cấp góc nhìn thực tiễn về việc ứng dụng công cụ kiểm thử tự động mã nguồn mở để tối ưu hóa chi phí sản xuất và rút ngắn thời gian bàn giao sản phẩm.

Các phần nội dung có giá trị tham khảo cao nhất gồm:

  • Bảng phân loại 10 mức độ nghiêm trọng của lỗi và phân tích 7 nguyên tắc kiểm thử trong Chương I.
  • Bảng tổng hợp các lệnh Selenese kèm phân tích cơ chế xử lý lỗi của lệnh assert và verify trong Chương III.
  • Bản đặc tả luồng sự kiện, điều kiện đầu vào, đầu ra và mã thông báo lỗi của các module nghiệp vụ website JVNET làm mẫu biểu tham chiếu cho việc viết kịch bản kiểm thử biểu mẫu web.

Câu hỏi thường gặp

1. Tỷ lệ nhân lực giữa lập trình viên và kiểm thử viên tại Việt Nam và quốc tế được tác giả nêu trong khóa luận có sự khác biệt như thế nào?
Theo số liệu trình bày trong khóa luận, tại các công ty phần mềm nước ngoài, trung bình cứ 1 lập trình viên thì có 4 kiểm thử viên (tỷ lệ 4:1). Trong khi đó, tại thị trường lao động Việt Nam, tỷ lệ này bị đảo ngược nghiêm trọng khi trung bình 5 lập trình viên mới có 1 kiểm thử viên (tỷ lệ 5:1). Khóa luận cũng dẫn số liệu từ bachkhoa-aptech.vn cho thấy đến năm 2020 thị trường Việt Nam thiếu hụt khoảng 10.000 kỹ sư kiểm thử.

2. Khóa luận phân chia mức độ nghiêm trọng của lỗi phần mềm thành mấy cấp độ và các cấp độ nguy hiểm nhất có đặc điểm gì?
Khóa luận phân loại lỗi phần mềm thành 10 cấp độ nghiêm trọng tăng dần, từ Cấp 1 (Nhẹ - lỗi chính tả) đến Cấp 10 (Dịch họa - thảm họa lây lan). Trong đó, ba cấp độ lỗi cao nhất bao gồm: Cấp 8 (Quá quắt - gây hủy hoại cơ sở dữ liệu), Cấp 9 (Thảm họa - làm toàn bộ hệ thống dừng hoạt động) và Cấp 10 (Dịch họa - sự cố thảm họa bắt đầu chuyển sang mức độ lây lan ra các hệ thống liên quan).

3. Bộ công cụ Selenium gồm những thành phần nào và tại sao tác giả lựa chọn Selenium IDE để nghiên cứu sâu?
Bộ công cụ Selenium gồm 4 thành phần chính: Selenium IDE, Selenium RC, Selenium WebDriver và Selenium Grid. Tác giả lựa chọn đi sâu vào Selenium IDE do công cụ này hoạt động như một tiện ích mở rộng trực quan trên trình duyệt Firefox, hỗ trợ ghi và phát lại (Record/Playback) kịch bản kiểm thử dễ dàng, cho phép debug, đặt điểm dừng mà không đòi hỏi kiểm thử viên phải có kỹ năng lập trình chuyên sâu, rất phù hợp với phạm vi thời gian nghiên cứu của một khóa luận tốt nghiệp.

4. Điểm khác biệt cốt lõi giữa hai lệnh xác minh assert và verify trong cú pháp Selenese của Selenium IDE là gì?
Trong cú pháp Selenese, cả assert và verify đều dùng để xác minh trạng thái thực tế của ứng dụng so với kết quả mong đợi. Tuy nhiên, khi một lệnh assert bị thất bại (kết quả không khớp), quá trình thực thi ca kiểm thử sẽ ngay lập tức bị dừng lại. Ngược lại, khi một lệnh verify không thành công, hệ thống sẽ ghi nhận và hiển thị thông báo lỗi trong khung Log nhưng kịch bản kiểm thử vẫn tiếp tục chạy các bước kế tiếp.

5. Khóa luận đã tiến hành kiểm thử thực nghiệm trên những chức năng cụ thể nào của website JVNET?
Khóa luận đã phân tích và thiết lập kịch bản kiểm thử cho 3 module chức năng trên website https://jvnet.vn/: Module 1 - Đăng ký (kiểm tra nhập liệu các trường họ tên, địa chỉ, SĐT, email, năm sinh và các mã thông báo [1-1], [1-2], [1-3]); Module 2 - Tìm kiếm (kiểm tra việc nhập từ khóa tìm tin tuyển dụng, tin tức và mã lỗi [2-1]); và Module 3 - Liên hệ (kiểm tra chức năng "Gọi lại cho tôi" với các mã thông báo [3-1], [3-2], [3-3]).

Kết luận

Khóa luận tốt nghiệp của sinh viên Vũ Khánh Huyền đã hệ thống hóa đầy đủ cơ sở lý thuyết về kiểm thử phần mềm, các nội dung kiểm thử ứng dụng web và làm rõ vai trò của tự động hóa trong quy trình đảm bảo chất lượng. Thông qua việc phân tích và hướng dẫn chi tiết tiện ích Selenium IDE, đề tài đã cung cấp quy trình từng bước từ cài đặt, sử dụng cú pháp Selenese đến việc thiết lập các kịch bản kiểm thử tự động. Kết quả thực nghiệm kiểm thử chức năng trên website JVNET (https://jvnet.vn/) đã chứng minh tính khả thi và hiệu quả của việc ứng dụng công cụ mã nguồn mở trong việc tối ưu hóa quy trình kiểm thử phần mềm.