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

Sự phát triển mạnh mẽ của ngành công nghiệp phần mềm đã đưa các ứng dụng máy tính thâm nhập vào mọi lĩnh vực của đời sống xã hội, từ quản lý thiết bị gia dụng đến điều khiển giao thông và giao dịch tài chính. Song song với đó, ứng dụng Web trở thành nền tảng kết nối thiết yếu trong doanh nghiệp và thương mại điện tử, đòi hỏi mức độ tin cậy và hiệu năng vận hành ngày càng cao. Trong quy trình sản xuất phần mềm, hoạt động kiểm thử đóng vai trò trọng yếu nhằm đảm bảo chất lượng, kiểm soát lỗi và tối ưu chi phí khắc phục sự cố.

Tuy nhiên, việc kiểm thử thủ công các ứng dụng Web thường tốn kém thời gian, dễ gây nhầm lẫn khi phải lặp lại nhiều lần các kịch bản kiểm thử qua từng phiên bản phát hành. Việc áp dụng các công cụ kiểm thử tự động nổi lên như một giải pháp thiết thực để nâng cao năng suất và độ chính xác. Xuất phát từ bối cảnh đó, tác giả Nguyễn Thị Kim Tuyến thực hiện luận văn thạc sĩ chuyên ngành Khoa học máy tính tại Trường Đại học Công nghệ Thông tin và Truyền thông – Đại học Thái Nguyên (năm 2018) với đề tài: "Nghiên cứu một số kỹ thuật và công cụ kiểm thử ứng dụng trong kiểm thử tự động ứng dụng Web".

Nhiệm vụ nghiên cứu của luận văn được xác định cụ thể như sau:

  1. Nghiên cứu tổng quan về kiểm thử phần mềm, quy trình kiểm chứng (Verification), quy trình thẩm định (Validation) và vấn đề đảm bảo chất lượng phần mềm.
  2. Khảo sát các nguyên lý, kỹ thuật kiểm thử hộp trắng (White-box testing), kiểm thử hộp đen (Black-box testing) và phương pháp kiểm thử dòng điều khiển.
  3. Nghiên cứu, so sánh các công cụ hỗ trợ kiểm thử phần mềm tự động phổ biến: Apache JMeter, QuickTest Professional (QTP), Katalon Studio và Selenium WebDriver.
  4. Ứng dụng công cụ Selenium WebDriver kết hợp framework TestNG để xây dựng kịch bản và thực thi kiểm thử tự động cho các chức năng cơ bản trên giao diện ứng dụng Web.

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

  • Đối tượng nghiên cứu: Các phương pháp, kỹ thuật thiết kế ca kiểm thử (test case) và các công cụ tự động hóa kiểm thử phần mềm, trọng tâm là Selenium WebDriver.
  • Phạm vi nghiên cứu: Kiểm thử tự động trên nền tảng ứng dụng Web, tập trung vào bài toán kiểm tra tính hợp lệ của dữ liệu đầu vào trên biểu mẫu (Form input validation) và thực nghiệm kiểm thử chức năng Đăng nhập cùng chức năng Soạn thảo/Gửi email của dịch vụ thư điện tử (Google Mail) trên hai trình duyệt Mozilla Firefox và Google Chrome.

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

Luận văn tiếp cận các khái niệm và nền tảng lý thuyết cốt lõi trong công nghệ phần mềm:

  • Khái niệm kiểm thử và lỗi phần mềm: Kiểm thử phần mềm là quá trình thực thi chương trình nhằm tìm ra lỗi, thiếu sót hoặc chứng minh phần mềm hoạt động đúng đặc tả. Lỗi phần mềm được định nghĩa tổng quát là "sự không khớp giữa chương trình và đặc tả của nó", biểu hiện dưới ba dạng: Sai (làm khác đặc tả), Thiếu (yêu cầu có trong đặc tả nhưng không được xây dựng) và Thừa (tính năng đưa vào mà không có trong đặc tả). Văn bản phân biệt rõ 4 khái niệm kỹ thuật: Lỗi (Error/Defect do lập trình viên tạo ra), Sai (Fault/Bug phát sinh từ lỗi), Thất bại (Failure khi chức năng không chạy đúng mong đợi) và Khuyết thiếu (Missing case).
  • Quy trình kiểm chứng và thẩm định: Kiểm chứng (Verification) đánh giá phần mềm có xây dựng đúng theo tài liệu đặc tả hay không (thường gắn với kiểm thử tĩnh), trong khi thẩm định (Validation) đảm bảo phần mềm đáp ứng đúng nhu cầu của người dùng cuối (gắn với kiểm thử động).
  • Kỹ thuật kiểm thử hộp trắng: Dựa trên cấu trúc mã nguồn bên trong để thiết kế ca kiểm thử. Luận văn sử dụng phương pháp kiểm thử đường dẫn cơ sở (Basic Path Testing) do Tom McCabe đề xuất, chuyển đổi mã nguồn thành đồ thị lưu trình (Flow Graph) và tính toán độ phức tạp Cyclomatic $V(G)$ theo ba công thức từ Lý thuyết đồ thị:
    1. $V(G) = R$ (với $R$ là số vùng của đồ thị).
    2. $V(G) = P + 1$ (với $P$ là số đỉnh điều kiện).
    3. $V(G) = E - N + 2$ (với $E$ là số cạnh, $N$ là số đỉnh).
  • Kỹ thuật kiểm thử hộp đen: Tiếp cận hướng dữ liệu vào/ra mà không can thiệp cấu trúc bên trong, áp dụng các kỹ thuật: Phân hoạch tương đương (Equivalence Partitioning), Phân tích giá trị biên (Boundary Value Analysis - BVA), Kỹ thuật đồ thị nhân - quả (Cause-Effect Graph) và Kiểm thử so sánh (Back-to-back testing).

Phương pháp nghiên cứu:

  • Phương pháp phân tích - tổng hợp lý thuyết: Thu thập, hệ thống hóa tài liệu về vòng đời kiểm thử phần mềm (STLC), phân loại kỹ thuật kiểm thử tĩnh/động, phân tích ưu nhược điểm giữa kiểm thử thủ công và kiểm thử tự động.
  • Phương pháp so sánh, đánh giá công cụ: Khảo sát cấu trúc, đặc trưng và cơ chế hoạt động của 4 công cụ kiểm thử: JMeter, QuickTest Pro, Katalon Studio và Selenium.
  • Phương pháp thực nghiệm kỹ thuật: Thiết kế bộ kịch bản kiểm thử chức năng, lập trình tự động hóa tương tác trình duyệt bằng ngôn ngữ Java với thư viện Selenium WebDriver API, quản lý thực thi và kết xuất báo cáo qua TestNG.

Nguồn dữ liệu: Dữ liệu đặc tả giao diện biểu mẫu web, cấu trúc phần tử HTML (DOM) của trang đăng nhập và gửi thư điện tử, cùng các tập giá trị kiểm thử hợp lệ và không hợp lệ (chuỗi rỗng, sai định dạng tài khoản, sai mật khẩu).


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

Chương 1: Tổng quan về kiểm thử phần mềm và vấn đề đảm bảo chất lượng phần mềm

Chương này tập trung trình bày các khái niệm nền tảng về sản phẩm phần mềm, phân loại lỗi và vị trí của kiểm thử trong quy trình phát triển:

  • Phân tích nguyên nhân phát sinh lỗi phần mềm: Trích dẫn các nghiên cứu chỉ ra rằng lỗi do khâu xác định đặc tả yêu cầu chiếm tỷ lệ cao nhất (khoảng 80%), tiếp theo là lỗi thiết kế, lỗi lập trình và lỗi do các công cụ phát triển phần mềm (bộ biên dịch, thư viện lớp).
  • Chi phí khắc phục sự cố: Hoạt động bảo trì chiếm chi phí chủ yếu trong vòng đời phần mềm, trong đó hoạt động kiểm thử chiếm khoảng 40% (tỷ lệ 15/33) tổng chi phí phát triển ban đầu. Chi phí sửa lỗi tăng theo cấp số nhân nếu lỗi được phát hiện muộn ở các giai đoạn sau.
  • Quy trình kiểm thử phần mềm (Software Testing Life Cycle - STLC) gồm 4 giai đoạn chính: Phân tích yêu cầu (Requirement Analysis), Thiết kế ca kiểm thử (Testcase Development), Thiết lập môi trường và thực thi kiểm thử qua nhiều vòng (Environment Setup & Execution), Kết thúc chu kỳ kiểm thử (Test Cycle Closure).

Chương 2: Một số kỹ thuật và công cụ kiểm thử phần mềm

Chương 2 đi sâu phân tích cơ chế của các kỹ thuật thiết kế ca kiểm thử hộp trắng và hộp đen:

  • Trình bày chi tiết kỹ thuật kiểm thử đường dẫn cơ sở, quy tắc vẽ đồ thị lưu trình và phương pháp tính độ phức tạp Cyclomatic nhằm xác định số lượng đường dẫn độc lập cần bao phủ.
  • Phân tích kỹ thuật phân hoạch tương đương, phân tích giá trị biên (xác định giá trị biên trên, biên dưới, lân cận biên) và đồ thị nhân - quả để xây dựng bảng quyết định logic.
  • Khái quát kiểm thử dòng điều khiển với các dạng câu lệnh gán, câu lệnh điều kiện và điểm hợp nhất luồng thực thi.
  • So sánh toàn diện giữa kiểm thử thủ công và kiểm thử tự động về các tiêu chí thời gian, chi phí đầu tư, tính lặp lại và độ tin cậy.
Tiêu chí Kiểm thử thủ công (Manual Testing) Kiểm thử tự động (Automation Testing)
Ưu điểm - Cho phép thực hiện kiểm thử khám phá.
- Thích hợp cho sản phẩm mới hoặc ca kiểm thử chạy ít lần.
- Chi phí đầu tư ngắn hạn ban đầu thấp.
- Phù hợp cho ca kiểm thử lặp lại nhiều lần, tính ổn định và tin cậy cao.
- Giảm thao tác lặp gây nhàm chán cho tester.
- Giảm chi phí vận hành trong dài hạn.
Hạn chế - Tốn nhiều thời gian và công sức khi phải chạy lại tập test case cho mỗi bản phát hành (release). - Chi phí đầu tư công cụ, con người ban đầu lớn.
- Không thể tự động hóa toàn bộ mọi trường hợp (không thay thế hoàn toàn con người).

Chương 3: Một số công cụ kiểm thử phần mềm

Tác giả tiến hành khảo sát và phân tích cấu trúc của 4 công cụ kiểm thử phần mềm tiêu biểu:

  • Apache JMeter: Công cụ mã nguồn mở do Stefano Mazzocchi phát triển ban đầu để kiểm thử hiệu năng máy chủ FTP, CSDL, Java Servlet; hỗ trợ đa giao thức (HTTP, HTTPS, SOAP, JDBC, LDAP, POP3...). Các thành phần chính gồm: Test Plan, Thread Group, Logic Controller, Sampler, Config Element, Timer, Pre/Post Processor, Assertion và Listener.
  • QuickTest Professional (QTP): Công cụ thương mại hỗ trợ kiểm thử chức năng và kiểm thử hồi quy tự động. Thành phần gồm: Action, DataTable, Object Repository (OR) và Checkpoint; có tính năng Recovery Scenarios xử lý sự cố bất ngờ.
  • Katalon Studio: Giải pháp kiểm thử tự động do KMS Technology phát triển trên nền tảng Selenium và Appium, hỗ trợ cả Web và Mobile. Hỗ trợ Record - Playback trên 3 trình duyệt (IE, Chrome, Firefox); kết nối trực tiếp với các hệ quản trị CSDL (MySQL, SQL Server, Oracle) để kiểm thử hướng dữ liệu (data-driven), nhưng không hỗ trợ định dạng XML.
  • Selenium WebDriver: Thư viện cung cấp tập API điều khiển trực tiếp trình duyệt thông qua mã định danh phần tử HTML (ID, Name, XPath...).

Chương 4: Ứng dụng công cụ hỗ trợ kiểm thử Selenium Webdriver trong kiểm thử ứng dụng Web

Chương cuối trình bày việc triển khai kiểm thử tự động vào bài toán thực tế:

  • Phân tích tầm quan trọng của việc kiểm tra tính hợp lệ dữ liệu biểu mẫu (Form input validation) ở cả phía máy khách (Client-side bằng JavaScript) và phía máy chủ (Server-side).
  • Xây dựng bài toán kiểm thử chức năng Đăng nhập và Soạn thảo/Gửi email cho ứng dụng Web Mail (Google Account / Gmail) trên hai trình duyệt Firefox và Chrome.
  • Thiết kế bộ dữ liệu và triển khai kịch bản mã nguồn Java sử dụng Selenium WebDriver cùng framework TestNG.

Thiết kế và triển khai

Hệ thống kiểm thử thực nghiệm được thiết kế và triển khai dựa trên các thành phần công nghệ:

  • Môi trường phát triển: Java Development Kit (JDK), Eclipse IDE, Selenium Java Client Driver (.jar).
  • Framework kiểm thử và báo cáo: TestNG Framework dùng để quản lý kịch bản, chạy kiểm thử và kết xuất giao diện báo cáo kết quả.
  • Trình duyệt thực thi: Mozilla Firefox và Google Chrome.

Các hàm và phương thức Selenium WebDriver được sử dụng:

  • IWebDriver w = new FirefoxDriver(): Khởi tạo đối tượng điều khiển trình duyệt Firefox.
  • w.GoToUrl("URL"): Điều hướng trình duyệt đến địa chỉ web chỉ định.
  • IWebElement e = w.FindElement(By.Id("element_id")): Tìm và gán đối tượng điều khiển phần tử HTML qua thuộc tính Id.
  • e.Clear(): Xóa dữ liệu cũ đang có trong ô nhập liệu.
  • e.SendKeys("text"): Truyền chuỗi ký tự đầu vào cho phần tử web.
  • e.Click(): Kích hoạt sự kiện nhấp chuột vào nút lệnh/liên kết.
  • e.GetAttribute("innerHTML"): Lấy nội dung thuộc tính HTML để so sánh dữ liệu.
  • w.Close(): Đóng cửa sổ trình duyệt sau khi hoàn tất.

Bộ kịch bản kiểm thử chi tiết (Test Case Specification):

Mã Test Case Điều kiện kiểm thử & Thao tác Kết quả mong đợi
TC01 Để trống cả trường Email và Password, nhấn nút Đăng nhập. Không cho phép đăng nhập; hiển thị thông báo: "Hãy nhập email hoặc số điện thoại".
TC02 Nhập Email hợp lệ (loptrungk28ctn@gmail.com), để trống Password. Không cho phép đăng nhập; hiển thị thông báo: "Vui lòng nhập mật khẩu của bạn".
TC03 Nhập Email không tồn tại/sai định dạng (loptrungctn@gmail...), nhấn tiếp tục. Không cho phép đăng nhập; hiển thị thông báo: "Rất tiếc! Google không nhận dạng được email đó".
TC04 Nhập Email đúng, nhập sai Password. Không cho phép đăng nhập; hiển thị thông báo: "Mật khẩu sai! Hãy thử lại".
TC05 Nhập Email và Password hợp lệ, đăng nhập thành công vào trang chủ; mở giao diện soạn thư, nhập người nhận (kimtuyen15@gmail.com), chủ đề "Hello", nội dung "SeleniumWebDriver" và gửi. Thư điện tử được gửi thành công đến địa chỉ người nhận.

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

Kết quả thực nghiệm

Tác giả đã lập trình kịch bản tự động hóa hoàn chỉnh cho cả 5 trường hợp kiểm thử bằng mã nguồn Java kết hợp Selenium WebDriver và thực thi trên trình duyệt Mozilla Firefox. Báo cáo tổng hợp từ TestNG ghi nhận các số liệu sau:

  • Tổng số trường hợp kiểm thử (Total test cases): 5
  • Số trường hợp kiểm thử thành công (Passed): 5 (đạt tỷ lệ 100%)
  • Số trường hợp kiểm thử thất bại (Failed): 0
  • Hệ thống trích xuất báo cáo trực quan dưới dạng biểu đồ và bảng tóm tắt trạng thái thực thi của từng test case.

Đóng góp của luận văn

  1. Về mặt lý luận: Hệ thống hóa cơ sở lý thuyết về kiểm thử phần mềm, quy trình kiểm chứng - thẩm định, các kỹ thuật đo độ phức tạp kiểm thử hộp trắng (Cyclomatic complexity) và các phương pháp thiết kế ca kiểm thử hộp đen.
  2. Về mặt so sánh công nghệ: Cung cấp cái nhìn tổng hợp về cấu trúc, ưu điểm và hạn chế của các công cụ kiểm thử phổ biến trên thị trường (JMeter, QTP, Katalon Studio, Selenium).
  3. Về mặt thực tiễn: Xây dựng quy trình mẫu và kịch bản thực nghiệm hoàn chỉnh để kiểm thử tự động các biểu mẫu và tương tác người dùng trên nền tảng Web bằng Selenium WebDriver, làm tài liệu tham khảo cho việc áp dụng kiểm thử tự động trong thực tế.

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

Hạn chế

  • Số lượng trường hợp kiểm thử thực nghiệm còn dừng ở mức độ thử nghiệm demo với 5 test case cơ bản của chức năng Đăng nhập và Gửi thư.
  • Chưa giải quyết được các hạn chế cố hữu của Selenium WebDriver được nêu trong luận văn, bao gồm: việc xử lý kém đối với các thành phần tải dữ liệu bất đồng bộ Ajax, khó khăn khi tương tác với các hộp thoại cảnh báo hệ thống hoặc ứng dụng bên ngoài (Windows App / Dialog), và thời gian thực thi còn chậm do phải khởi động lại trình duyệt qua từng phiên kiểm thử.

Hướng nghiên cứu tiếp

  • Mở rộng phạm vi nghiên cứu và áp dụng bộ công cụ Selenium WebDriver vào các hệ thống phần mềm và ứng dụng Web có quy mô lớn, phức tạp hơn trong thực tế.
  • Nghiên cứu xây dựng công cụ kiểm thử dưới dạng một ứng dụng Web hoàn chỉnh có khả năng chạy độc lập trên nhiều hệ điều hành khác nhau.
  • Thu thập thêm kinh nghiệm và tri thức từ các kiểm thử viên chuyên nghiệp để tự động hóa khâu sinh ca kiểm thử một cách đầy đủ và tối ưu hơn.

Giá trị tham khảo

Luận văn là tài liệu tham khảo hữu ích cho:

  • Sinh viên, học viên chuyên ngành Khoa học máy tính, Công nghệ thông tin, Kỹ thuật phần mềm: Nắm bắt quy trình kiểm thử phần mềm chuẩn mực (STLC), công thức tính toán độ phức tạp Cyclomatic $V(G)$ và phương pháp thiết kế test case hộp trắng/hộp đen.
  • Kỹ sư kiểm thử phần mềm (Tester/QA/QC): Tham khảo bảng so sánh tính năng giữa các công cụ tự động hóa (JMeter, QTP, Katalon Studio, Selenium) và cách thiết lập môi trường Eclipse + Java + TestNG + Selenium WebDriver để triển khai kiểm thử tự động giao diện Web.

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

1. Nguyên nhân nào gây ra nhiều lỗi phần mềm nhất trong quá trình phát triển?

Theo các nghiên cứu được tổng hợp trong luận văn, nguyên nhân gây ra lỗi nhiều nhất không phải do khâu lập trình mà xuất phát từ khâu đặc tả yêu cầu, chiếm khoảng 80% tổng số lỗi. Các lý do chính gồm đặc tả không được viết rõ ràng, thiếu cẩn thận, yêu cầu thay đổi liên tục hoặc do sự phối hợp chưa tốt trong nhóm phát triển.

2. Độ phức tạp Cyclomatic $V(G)$ trong kiểm thử hộp trắng được tính bằng những công thức nào?

Độ phức tạp Cyclomatic $V(G)$ trên đồ thị lưu trình $G$ được xác định theo một trong ba công thức:

  • $V(G) = R$ ($R$ là số vùng khép kín của đồ thị).
  • $V(G) = P + 1$ ($P$ là số đỉnh điều kiện).
  • $V(G) = E - N + 2$ ($E$ là số cạnh, $N$ là số đỉnh của đồ thị).

3. Katalon Studio có ưu điểm gì nổi bật so với Selenium IDE và nó không hỗ trợ loại dữ liệu nào?

Katalon Studio cho phép thực hiện Record - Playback trên cả 3 trình duyệt phổ biến (IE, Chrome, Firefox) và trên các trình duyệt đang mở sẵn (qua add-on), khắc phục hạn chế chỉ hoạt động trên Firefox của Selenium IDE. Về mặt dữ liệu, công cụ này hỗ trợ kết nối trực tiếp với CSDL (MySQL, SQL Server, Oracle), tập tin Excel, CSV nhưng không hỗ trợ kết nối tập tin XML.

4. Selenium WebDriver có những nhược điểm kỹ thuật nào được tác giả chỉ ra?

Selenium WebDriver có ba nhược điểm chính:

  1. Hoạt động chưa tốt với các thành phần giao diện sử dụng công nghệ Ajax.
  2. Không hỗ trợ tương tác trực tiếp với các hộp thoại, cửa sổ của hệ điều hành (Windows App/Dialog như hộp thoại Download/Upload) nếu không có thư viện thứ ba hỗ trợ (như AutoIT).
  3. Thời gian thực thi kịch bản chậm do cơ chế phải bật và tắt trình duyệt cho mỗi phiên kiểm thử.

5. Kết quả kiểm thử tự động chức năng Đăng nhập và Gửi email trên Firefox đạt kết quả như thế nào?

Toàn bộ 5 trường hợp kiểm thử (từ TC01 đến TC05) bao gồm kiểm tra bắt lỗi trường rỗng, sai định dạng tài khoản, sai mật khẩu và gửi email thành công đều được thực thi tự động chính xác, đạt tỷ lệ thành công 5/5 (100% Passed) và không ghi nhận lỗi thất bại (0 Failed) trên báo cáo TestNG.


Kết luận

Luận văn của tác giả Nguyễn Thị Kim Tuyến đã hệ thống hóa toàn diện các lý thuyết nền tảng về kiểm thử phần mềm, quy trình STLC và các kỹ thuật thiết kế ca kiểm thử hộp trắng, hộp đen. Công trình đã phân tích, so sánh chi tiết các công cụ kiểm thử tự động phổ biến gồm JMeter, QTP, Katalon Studio và Selenium WebDriver. Đồng thời, tác giả đã triển khai thực nghiệm thành công mô hình kiểm thử tự động bằng Java kết hợp Selenium WebDriver và TestNG cho chức năng đăng nhập và gửi thư điện tử với tỷ lệ hoàn thành 100%, tạo tiền đề thực tế cho việc ứng dụng kiểm thử tự động hóa trên các nền tảng ứng dụng Web.