Tổng quan nghiên cứu

Theo Viện Tiêu chuẩn và Công nghệ Quốc gia Hoa Kỳ, các lỗi phần mềm gây tổn thất hàng tỷ USD mỗi năm cho nền kinh tế, trong đó hơn 33% chi phí có thể được phòng tránh nếu các quy trình kiểm thử được triển khai hiệu quả ngay từ giai đoạn đầu. Trong các dự án phát triển phần mềm hiện đại, chi phí dành cho hoạt động kiểm định chất lượng thường chiếm trên 50% tổng ngân sách dự án. Tuy nhiên, phương pháp kiểm thử thủ công truyền thống đang bộc lộ nhiều hạn chế nghiêm trọng như tiêu tốn nguồn nhân lực, thời gian kéo dài và dễ phát sinh sai sót do yếu tố con người, đặc biệt là khi thực hiện kiểm thử hồi quy lặp đi lặp lại qua nhiều phiên bản phát hành.

Luận văn thạc sĩ chuyên ngành Khoa học máy tính của tác giả Phạm Thị Hải Yến, dưới sự hướng dẫn khoa học của Phó Giáo sư Tiến sĩ Hoàng Xuân Huấn tại Trường Đại học Công nghệ – Đại học Quốc gia Hà Nội năm 2020, tập trung giải quyết bài toán nâng cao hiệu năng kiểm thử phần mềm thông qua việc nghiên cứu và xây dựng framework kiểm thử tự động hóa toàn diện. Mục tiêu trọng tâm của đề tài là ứng dụng bộ công cụ Selenium WebDriver kết hợp công cụ Cucumber và tích hợp hệ thống kiểm thử tự động vào quy trình Tích hợp liên tục thông qua máy chủ Jenkins.

Phạm vi nghiên cứu được triển khai thực nghiệm trực tiếp trên hệ thống dịch vụ thực tế tại Công ty Cổ phần Dịch vụ Công nghệ Thông tin VIVAS ở Hà Nội trong giai đoạn 2019-2020. Nghiên cứu mang ý nghĩa thực tiễn sâu sắc khi giúp rút ngắn thời gian thực thi một kịch bản kiểm thử từ 5 phút xuống chỉ còn 30 giây, cắt giảm hơn 85% thời gian kiểm thử hồi quy trên đa trình duyệt, đồng thời nâng cao độ tin cậy và chuẩn hóa quy trình phát triển phần mềm cho doanh nghiệp.

Cơ sở lý thuyết và phương pháp nghiên cứu

Khung lý thuyết áp dụng

Nghiên cứu xây dựng trên nền tảng kết hợp hai phương pháp phát triển phần mềm tiên tiến: Phát triển hướng kiểm thử và Phát triển hướng hành vi. Quy trình Phát triển hướng kiểm thử vận hành theo chu trình ba bước chặt chẽ gồm Đỏ, Xanh lá và Tái cấu trúc, tuân thủ 3 điều luật cơ bản nhằm đảm bảo mã nguồn chỉ được viết vừa đủ để vượt qua các bài kiểm thử định trước. Phương pháp Phát triển hướng hành vi đóng vai trò mở rộng, sử dụng ngôn ngữ Gherkin với các từ khóa chuẩn mực như Given, When, Then để đặc tả hành vi hệ thống bằng ngôn ngữ tự nhiên, giúp thu hẹp khoảng cách giao tiếp giữa lập trình viên, chuyên viên kiểm thử và chuyên viên phân tích nghiệp vụ.

Về kiến trúc tự động hóa, tác giả áp dụng mô hình thiết kế Page Object Model làm cấu trúc lõi cho framework. Mô hình này phân tách rành mạch giữa kho lưu trữ phần tử giao diện và các phương thức thực thi hành động, tạo nên tính đóng gói cao và khả năng tái sử dụng tối đa. Nghiên cứu khai thác 5 khái niệm kỹ thuật trọng tâm:

  • Bộ định vị phần tử giao diện với 7 cơ chế nhận diện phần tử web bao gồm ID, Name, LinkText, TagName, ClassName, CSS Selector và XPath.
  • Trình điều khiển tự động hóa Selenium WebDriver hỗ trợ tương tác trực tiếp trên 5 trình duyệt phổ biến như Chrome, Firefox, Safari, Opera và Internet Explorer.
  • Ngôn ngữ đặc tả hành vi Gherkin và công cụ phân tích cú pháp Cucumber.
  • Kiểm thử hồi quy tự động nhằm xác minh tính ổn định của hệ thống sau các đợt cập nhật tính năng.
  • Hệ thống Tích hợp liên tục thông qua công cụ tự động hóa Jenkins quản lý quy trình build mã nguồn và thực thi kịch bản kiểm thử tự động.

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

Nghiên cứu sử dụng nguồn dữ liệu thực nghiệm gồm 120 kịch bản kiểm thử hồi quy thực tế từ các dịch vụ phần mềm đang vận hành tại Công ty VIVAS. Phương pháp chọn mẫu là chọn mẫu phi xác suất có chủ đích, ưu tiên lựa chọn các phân hệ chức năng trọng yếu có tần suất thay đổi mã nguồn cao như module đăng nhập, tra cứu dữ liệu và đăng ký dịch vụ.

Phương pháp phân tích dữ liệu kết hợp giữa phân tích định lượng và đánh giá hiệu năng so sánh đối đầu. Tác giả tiến hành đo lường chính xác các biến số: thời gian thực thi từng kịch bản, tổng thời gian kiểm thử toàn bộ hệ thống, mức độ tiêu hao nhân lực và tỷ lệ phát hiện lỗi giữa phương pháp kiểm thử thủ công và kiểm thử tự động. Lý do lựa chọn phương pháp này là vì nó cung cấp bằng chứng thực nghiệm rõ ràng, có khả năng lượng hóa chính xác hiệu quả đầu tư công nghệ trong chu kỳ 12 tháng triển khai dự án từ năm 2019 đến năm 2020. Toàn bộ mã nguồn kiểm thử được quản lý tập trung trên GitHub và liên kết trực tiếp với máy chủ Jenkins CI.

Kết quả nghiên cứu và thảo luận

Những phát hiện chính

Quá trình thực nghiệm đối sánh giữa kiểm thử thủ công và framework tự động hóa tại Công ty VIVAS mang lại các kết quả định lượng cụ thể:

Thứ nhất, tốc độ thực thi kịch bản kiểm thử được tối ưu hóa vượt bậc. Đối với một kịch bản kiểm thử đơn lẻ trên một trình duyệt, phương pháp thủ công tiêu tốn trung bình 300 giây (5 phút), trong khi kịch bản tự động hóa sử dụng Selenium WebDriver chỉ mất 30 giây để hoàn thành, giúp giảm tới 90% thời gian thực hiện.

Thứ hai, hiệu năng kiểm thử đa trình duyệt thể hiện ưu thế áp đảo. Khi tiến hành kiểm thử một kịch bản đồng thời trên 3 trình duyệt phổ biến gồm Google Chrome, Mozilla Firefox và Microsoft Edge, kiểm thử thủ công yêu cầu 900 giây (15 phút) thao tác lặp lại của kỹ sư kiểm thử. Ngược lại, hệ thống tự động hóa hoàn tất toàn bộ quy trình chỉ trong 90 giây, tiết kiệm chính xác 90% tổng thời gian thực thi.

Thứ ba, tỷ lệ bao phủ kiểm thử tự động hóa đạt trên 80% tổng số kịch bản kiểm thử hồi quy của dự án thí điểm. Việc này giúp doanh nghiệp giải phóng khoảng 50% khối lượng công việc thủ công nhàm chán cho đội ngũ kiểm thử viên, cho phép nhân sự tập trung vào các kịch bản kiểm thử thăm dò phức tạp.

Thứ tư, hệ thống tích hợp liên tục Jenkins CI rút ngắn thời gian phản hồi vòng lặp phát triển. Máy chủ CI tự động kích hoạt toàn bộ test suite sau mỗi lệnh commit mã nguồn lên GitHub, trả về báo cáo kết quả chi tiết trong vòng chưa đầy 2 phút, giúp phát hiện lỗi xung đột mã nguồn sớm hơn 70% so với chu trình kiểm thử thủ công hàng tuần.

Thảo luận kết quả

Nguyên nhân chính dẫn đến sự bứt phá về hiệu năng là nhờ việc ứng dụng kiến trúc Page Object Model kết hợp Cucumber BDD. Khi giao diện ứng dụng thay đổi, đội ngũ phát triển chỉ cần cập nhật định vị phần tử tại một lớp giao diện duy nhất thay vì phải chỉnh sửa hàng loạt kịch bản riêng lẻ, giúp giảm 70% thời gian bảo trì mã kiểm thử.

So với các giải pháp kiểm thử thương mại trên thị trường như QuickTest Professional (QTP) hay các công cụ trả phí của IBM, Selenium WebDriver khẳng định sự vượt trội nhờ bản quyền mã nguồn mở hoàn toàn miễn phí, hỗ trợ đa dạng 6 ngôn ngữ lập trình và khả năng tùy biến linh hoạt mà không phát sinh chi phí bản quyền hàng năm cho doanh nghiệp.

Dữ liệu nghiên cứu được trực quan hóa thông qua hệ thống biểu đồ cột đối sánh thời gian thực thi giữa kiểm thử thủ công và tự động, biểu đồ tròn thể hiện tỷ lệ phần trăm tự động hóa test case, cùng các bảng tổng hợp theo dõi chỉ số build từ Extent Reports và TestNG Report được nhúng trực tiếp trên giao diện quản trị của Jenkins CI.

Đề xuất và khuyến nghị

Từ kết quả thực nghiệm đạt được, nghiên cứu đưa ra 4 khuyến nghị hành động chiến lược dành cho các tổ chức công nghệ:

Thứ nhất, chuẩn hóa cấu trúc dự án kiểm thử theo mô hình Page Object Model. Các doanh nghiệp phần mềm cần áp dụng triệt để mô hình Page Object Model nhằm phân tách rõ ràng giữa giao diện, luồng xử lý và dữ liệu kiểm thử. Mục tiêu giảm ít nhất 60% tình trạng trùng lặp mã nguồn kiểm thử trong vòng 3 tháng đầu triển khai, do nhóm kỹ sư kiểm thử tự động chủ trì thực hiện.

Thứ hai, mở rộng thực thi kiểm thử song song trên hạ tầng đám mây. Doanh nghiệp cần tích hợp Selenium Grid hoặc hạ tầng Docker vào hệ thống Jenkins CI hiện tại để nâng công suất chạy đồng thời 500 kịch bản kiểm thử, rút ngắn thời gian phản hồi toàn bộ hệ thống xuống dưới 10 phút. Thời gian hoàn thành trong quý 2, do bộ phận DevOps phối hợp cùng Trưởng nhóm Đảm bảo Chất lượng triển khai.

Thứ ba, thiết lập chương trình đào tạo chuyển đổi kỹ năng kiểm thử. Tổ chức các khóa đào tạo nội bộ kéo dài 40 giờ về cú pháp Gherkin, tư duy BDD và kỹ năng lập trình Java căn bản cho 100% chuyên viên kiểm thử thủ công trong thời hạn 6 tháng, nhằm xây dựng đội ngũ kỹ sư kiểm thử chất lượng cao. Đơn vị phụ trách là Phòng Nhân sự phối hợp cùng các Chuyên gia Kiểm thử tự động.

Thứ tư, tự động hóa quy trình kích hoạt kiểm thử đêm. Thiết lập lịch trình chạy tự động 100% bộ kịch bản kiểm thử hồi quy vào khung giờ 0h00 hàng ngày thông qua Jenkins cron job, hướng tới mục tiêu phát hiện và xử lý 95% lỗi hồi quy trước mỗi phiên bản phát hành chính thức. Đơn vị thực thi là Đội ngũ Vận hành Hệ thống và Trưởng dự án phần mềm.

Đối tượng nên tham khảo luận văn

Tài liệu luận văn mang lại giá trị thực tiễn và học thuật cho 4 nhóm đối tượng chính:

Nhóm chuyên viên kiểm thử phần mềm: Cung cấp tài liệu hướng dẫn kỹ thuật chi tiết từ việc thiết lập thư viện Maven, viết kịch bản Gherkin, cấu hình WebDriver đến xử lý 7 loại locator, giúp các kiểm thử viên thủ công chuyển đổi thành công sang kỹ sư kiểm thử tự động trong vòng 3 đến 6 tháng.

Nhóm trưởng nhóm Đảm bảo Chất lượng và Quản lý Dự án: Cung cấp khung đo lường hiệu quả đầu tư công nghệ rõ ràng với các chỉ số định lượng về việc tiết kiệm 50% nguồn lực và cắt giảm 90% thời gian kiểm thử hồi quy, làm căn cứ vững chắc để xây dựng đề án tự động hóa quy trình kiểm thử cho doanh nghiệp.

Nhóm kỹ sư phát triển phần mềm và Chuyên viên DevOps: Cung cấp mô hình kết hợp hoàn chỉnh giữa TDD, BDD và luồng tự động hóa CI/CD qua Jenkins, hỗ trợ thiết lập cơ chế kiểm soát chất lượng mã nguồn tự động ngay trên nhánh phát triển của Git.

Nhóm giảng viên, học viên cao học và sinh viên ngành Công nghệ Thông tin: Đóng vai trò là tài liệu tham khảo học thuật chuẩn mực với 74 tài liệu trích dẫn chuyên sâu, hệ thống hóa toàn diện các mẫu thiết kế phần mềm và phương pháp luận kiểm thử tự động hóa hiện đại.

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

Tại sao nên kết hợp Cucumber với Selenium WebDriver thay vì chỉ dùng Selenium thuần?

Cucumber đóng vai trò như một cầu nối ngôn ngữ tự nhiên thông qua cú pháp Gherkin, cho phép tất cả các bên như khách hàng, phân tích nghiệp vụ và lập trình viên đều hiểu rõ kịch bản kiểm định. Trong khi đó, Selenium WebDriver trực tiếp thực thi thao tác kỹ thuật trên trình duyệt. Sự kết hợp này giúp tăng tính minh bạch của tài liệu kiểm thử và giảm 40% hiểu lầm về mặt nghiệp vụ so với việc chỉ viết mã kiểm thử thuần túy bằng ngôn ngữ lập trình.

Mô hình Page Object Model giải quyết bài toán bảo trì mã nguồn như thế nào?

Trong kiểm thử tự động, giao diện người dùng thường xuyên thay đổi khiến các locator bị sai lệch. Mô hình Page Object Model cô lập các phần tử giao diện của mỗi trang web vào một lớp Java độc lập. Khi giao diện thay đổi, kỹ sư chỉ cần cập nhật locator tại đúng một vị trí duy nhất trong Page UI thay vì phải rà soát hàng trăm kịch bản kiểm thử, giúp giảm tới 70% thời gian bảo trì hệ thống.

Trong 7 cơ chế định vị phần tử của Selenium, cơ chế nào mang lại độ ổn định cao nhất?

Định vị bằng ID là phương thức tối ưu và nhanh nhất do tính chất duy nhất của thuộc tính này trên cây cấu trúc DOM. Trường hợp phần tử không có thuộc tính ID, định vị bằng Name hoặc CSS Selector là các lựa chọn ưu tiên tiếp theo. XPath tuy có khả năng điều hướng linh hoạt nhưng có tốc độ xử lý chậm hơn và dễ bị gãy nếu cấu trúc trang web thay đổi, do đó nên ưu tiên sử dụng XPath tương đối thay cho XPath tuyệt đối.

Chi phí đầu tư ban đầu cho kiểm thử tự động có thực sự hiệu quả không?

Mặc dù giai đoạn thiết lập ban đầu đòi hỏi chi phí về thời gian và công sức xây dựng framework cao hơn kiểm thử thủ công, nhưng kiểm thử tự động mang lại điểm hòa vốn rất nhanh. Ngay từ lần chạy kiểm thử hồi quy thứ 3 trên hệ thống thực tế, chi phí vận hành bắt đầu giảm mạnh. Tốc độ thực thi nhanh gấp 10 lần giúp doanh nghiệp tiết kiệm hàng trăm giờ lao động trong mỗi chu kỳ phát hành sản phẩm.

Vai trò cốt lõi của Jenkins trong hệ thống kiểm thử tự động là gì?

Jenkins đóng vai trò là trung tâm điều phối tự động trong quy trình Tích hợp liên tục. Thay vì con người phải kích hoạt kịch bản bằng tay, Jenkins tự động lắng nghe các sự kiện thay đổi mã nguồn trên kho lưu trữ, tự động biên dịch, khởi chạy bộ kiểm thử Selenium và xuất báo cáo kết quả trực quan đến hộp thư của đội ngũ phát triển chỉ trong vòng 2 phút, đảm bảo chất lượng phần mềm được kiểm soát 24/7.

Kết luận

  • Luận văn xây dựng thành công framework kiểm thử tự động hóa hoàn chỉnh dựa trên sự kết hợp giữa Selenium WebDriver, Cucumber BDD và mô hình thiết kế Page Object Model.
  • Thực nghiệm tại Công ty VIVAS chứng minh framework giúp rút ngắn 90% thời gian thực thi kiểm thử và đạt tỷ lệ bao phủ hơn 80% các kịch bản kiểm thử hồi quy định kỳ.
  • Tích hợp thành công hệ thống kiểm thử tự động vào máy chủ Jenkins CI, thiết lập chu trình phản hồi chất lượng mã nguồn tự động chỉ trong vòng 2 phút sau khi build.
  • Đóng góp bộ tài liệu thực hành và phương pháp luận chuẩn xác cho các doanh nghiệp công nghệ muốn chuyển đổi từ kiểm thử thủ công sang tự động hóa hiệu quả.
  • Kế hoạch phát triển trong 6 tháng tiếp theo tập trung vào việc mở rộng kiểm thử song song đa luồng với Selenium Grid và ứng dụng kiểm thử tự động trên nền tảng ứng dụng di động.

Độc giả quan tâm đến việc tối ưu hóa quy trình kiểm thử phần mềm và xây dựng hệ thống CI/CD có thể tham khảo toàn văn luận văn thạc sĩ của tác giả Phạm Thị Hải Yến tại Thư viện Trường Đại học Công nghệ – Đại học Quốc gia Hà Nội để tiếp cận toàn bộ mã nguồn và cấu hình kỹ thuật chi tiết.