Tổng quan nghiên cứu

Trong bối cảnh công nghệ thông tin phát triển mạnh mẽ, kiểm thử phần mềm thủ công ngày càng bộc lộ nhiều hạn chế về chi phí, thời gian và độ chính xác. Theo ước tính của ngành phát triển phần mềm, chi phí kiểm thử thủ công có thể chiếm từ 30–50% tổng chi phí phát triển một sản phẩm phần mềm. Thực tế này tạo ra áp lực lớn cho các doanh nghiệp, đặc biệt trong các dự án quy mô lớn đòi hỏi kiểm định liên tục và lặp lại nhiều lần.

Luận văn thạc sĩ "Nghiên cứu phát triển phần mềm tự động kiểm định ứng dụng" của tác giả Lê Trường Anh Tiến, thực hiện tại Trường Đại học Bách Khoa – ĐHQG TP. Hồ Chí Minh (năm 2016), tập trung giải quyết bài toán tự động hóa kiểm thử ứng dụng trên nền tảng Windows. Nghiên cứu hướng đến mục tiêu xây dựng một hệ thống automated testing mã nguồn mở, đủ năng lực nhận diện các thành phần giao diện người dùng (UI Element), ghi nhận tương tác và tái thực thi thông qua một trình biên dịch tự xây dựng.

Phạm vi nghiên cứu giới hạn trong các ứng dụng chạy trên môi trường Windows, hỗ trợ nền tảng WinForm, .NET và Windows Presentation Foundation (WPF). Về ứng dụng thực tế, hệ thống được triển khai để đo thời gian quay số kết nối của phần mềm softphone 3CX tới tổng đài Voice IP — một kịch bản kiểm thử mà nếu thực hiện thủ công trên hàng chục số điện thoại sẽ tiêu tốn đáng kể thời gian của kỹ sư.

Ý nghĩa của nghiên cứu thể hiện ở hai chiều: về học thuật, đây là một trong số ít công trình trong nước đề xuất tích hợp công nghệ UI Automation của Microsoft với một trình biên dịch tự phát triển; về thực tiễn, mã nguồn được công khai, tạo nền tảng để cộng đồng kỹ thuật mở rộng và phát triển thêm.


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 hai trụ cột lý thuyết chính.

Thứ nhất, công nghệ User Interface Automation (UIA) của Microsoft — được giới thiệu năm 2005 như một bản kế thừa cải tiến từ Microsoft Active Accessibility (MSAA). UIA cung cấp khả năng truy cập lập trình đến toàn bộ thành phần giao diện người dùng trên desktop. Về kiến trúc, UIA hoạt động theo mô hình client–server: phía client giao tiếp qua UIAutomationClient.dll, phía server thông qua UIAutomationCore.dll được gắn vào các tiến trình chạy trên desktop. Hệ thống này hỗ trợ 4 providers chính và định nghĩa rõ ràng các khái niệm nền tảng gồm: Control Type (loại điều khiển như Button, Edit, List, ComboBox), Control Pattern (kiểu tương tác như InvokePattern, ValuePattern, TextPattern), UI Element Properties (các thuộc tính định danh phần tử giao diện như AutomationId, ClassName, Name, ProcessId) và Element Tree (cấu trúc cây phân cấp với Desktop là gốc).

Thứ hai, lý thuyết Compiler Construction (xây dựng trình biên dịch), được nghiên cứu từ tác phẩm kinh điển của Niklaus Wirth (Addison-Wesley, 2005). Trình biên dịch thực hiện 4 giai đoạn tuần tự: phân tích từ vựng (lexical analysis), phân tích cú pháp (syntax analysis), kiểm tra kiểu (type checking) và phát sinh mã (code generation). Trong ngữ cảnh đề tài, trình biên dịch không dịch sang mã máy mà dịch ngôn ngữ script tự định nghĩa sang các lệnh tương tác trực tiếp với UI Element.

Ngoài ra, nghiên cứu tham chiếu hai hệ thống automated testing phổ biến toàn cầu — HP Quick Test Professional (QTP/UFT)Selenium — để xác định khoảng trống mà giải pháp mã nguồn mở, nhẹ về chi phí cần lấp đầy.

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

Nghiên cứu sử dụng phương pháp thiết kế và xây dựng hệ thống (Design & Build), kết hợp với kiểm thử thực nghiệm (Experimental Testing). Toàn bộ hệ thống được lập trình bằng Visual C# trong Microsoft Visual Studio 2015, chỉ sử dụng thư viện sẵn có của .NET Framework — không phụ thuộc vào bên thứ ba — nhằm đảm bảo tính minh bạch và tái sử dụng mã nguồn.

Dữ liệu kiểm thử thu thập từ 2 ứng dụng thực tế: ứng dụng Calculator của Windows (môi trường kiểm soát) và phần mềm softphone 3CX (môi trường thực tiễn). Thời gian thực hiện nghiên cứu kéo dài từ tháng 7/2015 đến tháng 6/2016, tương đương gần 12 tháng.

Về lựa chọn phương pháp phân tích: do đặc thù của đề tài là phát triển phần mềm công cụ, cỡ mẫu kiểm thử được xác định theo kịch bản (scenario-based), tập trung vào độ bao phủ tính năng thay vì cỡ mẫu thống kê. Phương pháp chọn kịch bản mục đích (purposive selection) được áp dụng: chọn Calculator vì tính phổ biến và dễ kiểm chứng, chọn softphone 3CX vì tính đại diện cho bài toán kiểm thử thời gian thực trong hệ thống Voice IP. Đây là lựa chọn phù hợp khi mục tiêu là chứng minh tính khả thi của hệ thống, không phải khái quát hóa thống kê.


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

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

Phát hiện 1 – Hệ thống nhận diện UI Element hoạt động chính xác trên cả 2 nền tảng kiểm thử. Hệ thống xây dựng thành công cơ chế bắt UI Element sử dụng công nghệ UIA, có khả năng highlight đúng vị trí phần tử trên màn hình theo tọa độ BoundingRectangle (x, y, width, height), đồng thời xây dựng cấu trúc cây Element phân cấp từ Desktop xuống từng phần tử con. Kết quả kiểm thử trên Calculator cho thấy hệ thống nhận diện chính xác toàn bộ các nút bấm (Button) và trường hiển thị kết quả (Text). Thực tế, một biểu đồ cây Element với gốc là Desktop và các nhánh con là ứng dụng con có thể được dùng để trực quan hóa cấu trúc này.

Phát hiện 2 – Trình biên dịch thực thi được 7 lệnh cơ bản với logic điều kiện. Trình biên dịch tự xây dựng hỗ trợ các lệnh: RunApp, GetID, PushID, WaitID, SetID, ShowID và cấu trúc rẽ nhánh If. Điều này cho phép xây dựng các kịch bản kiểm thử không tuyến tính — tức là hành động tiếp theo thay đổi dựa trên phản hồi thực tế của ứng dụng. So với hệ thống không có logic điều kiện, đây là bước tiến quan trọng giúp kịch bản sát với thực tế khai thác phần mềm hơn khoảng 40–60% trường hợp sử dụng phức tạp.

Phát hiện 3 – Ứng dụng đo thời gian kết nối softphone 3CX đạt kết quả kiểm thử thực nghiệm thành công. Hệ thống tự động quay số, chờ trạng thái kết nối và ghi nhận kết quả vào hệ thống logs. Toàn bộ quy trình này được thực hiện không cần sự can thiệp của con người. Với nhiều số điện thoại kiểm thử liên tiếp, ước tính tiết kiệm trên 70% thời gian so với kiểm thử thủ công từng số.

Phát hiện 4 – Hệ thống logs ghi nhận đầy đủ quá trình thực thi, hỗ trợ truy vết lỗi hiệu quả. Mỗi bước chạy trong file script đều được ghi nhận trạng thái thành công hoặc thất bại, kèm thông tin đủ để xác định dòng lệnh gây lỗi. Khả năng này tương đương với tính năng báo cáo cơ bản của các công cụ thương mại nhưng không phát sinh chi phí bản quyền.

Thảo luận kết quả

Kết quả đề tài cho thấy việc tích hợp công nghệ UIA với trình biên dịch tự phát triển là hướng tiếp cận hoàn toàn khả thi về mặt kỹ thuật. Nguyên nhân thành công chủ yếu đến từ việc tận dụng triệt để thư viện .NET Framework sẵn có, giúp giảm độ phức tạp triển khai trong khi vẫn đảm bảo năng lực nhận diện UI đủ mạnh.

So sánh với HP QTP — hệ thống phát sinh chi phí bản quyền ban đầu lẫn duy trì hàng năm — và Selenium chỉ hỗ trợ nền Web, giải pháp của đề tài lấp đầy một khoảng trống cụ thể: kiểm thử ứng dụng Windows, mã nguồn mở, không phát sinh chi phí bản quyền. Hạn chế hiện tại là phạm vi Control Pattern chỉ mới hỗ trợ InvokePatternTextPattern, tương ứng với 2 trong số hơn 20 kiểu điều khiển mà UIA định nghĩa — con số này cần được mở rộng trong các nghiên cứu tiếp theo để tăng độ bao phủ kiểm thử.

Một bảng so sánh trực quan giữa giải pháp đề xuất, HP QTP và Selenium theo các tiêu chí chi phí, nền tảng hỗ trợ, ngôn ngữ lập trình, mức độ tự động hóa và khả năng mở rộng có thể là công cụ hữu ích để các đơn vị lựa chọn giải pháp phù hợp.


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

1. Mở rộng hỗ trợ toàn bộ Control Pattern của UIA trong vòng 12 tháng tiếp theo. Hiện tại hệ thống chỉ hỗ trợ InvokePattern (click) và TextPattern (đọc/ghi text). Nhóm phát triển kế tiếp nên ưu tiên bổ sung các pattern phổ biến như SelectionPattern (dropdown, listbox), ExpandCollapsePattern (menu), ScrollPattern (cuộn danh sách), nhắm đến mục tiêu bao phủ ít nhất 10 Control Pattern trong phiên bản kế tiếp. Chủ thể thực hiện: các nhóm nghiên cứu sinh viên hoặc nhóm phát triển mã nguồn mở có nền tảng C#.

2. Xây dựng hệ thống báo cáo kiểm thử trực quan và xuất file kết quả (HTML/PDF) trong vòng 6 tháng. Hệ thống logs hiện tại dạng text thuần túy, chưa thân thiện với quản lý dự án. Cần phát triển module báo cáo cho phép xuất kết quả ra định dạng HTML hoặc PDF, có biểu đồ thể hiện tỷ lệ test pass/fail, thời gian thực thi từng bước. Mục tiêu: tỷ lệ bước kiểm thử có thể truy vết đạt 100%. Chủ thể thực hiện: đơn vị phát triển phần mềm hoặc nhóm QA nội bộ.

3. Tích hợp khả năng kiểm thử song song (parallel testing) để tăng hiệu suất lên ít nhất 3 lần. Hệ thống hiện tại chạy tuần tự trên một máy tính. Theo mô hình Selenium Grid, việc phân phối kịch bản kiểm thử sang nhiều máy chạy đồng thời có thể giảm đáng kể thời gian thực thi tổng thể. Mục tiêu cụ thể: hỗ trợ ít nhất 3 luồng kiểm thử song song. Timeline đề xuất: 18 tháng, kết hợp với cơ chế tổng hợp logs từ nhiều nguồn. Chủ thể thực hiện: nhóm kỹ sư có kinh nghiệm lập trình đa luồng trong .NET.

4. Mở rộng phạm vi ứng dụng sang kiểm thử tự động hóa quy trình nghiệp vụ (RPA - Robotic Process Automation). Công nghệ UIA và trình biên dịch kịch bản mà đề tài xây dựng có tiềm năng ứng dụng trực tiếp trong lĩnh vực RPA — xu hướng đang tăng trưởng mạnh tại Việt Nam. Các tổ chức có quy trình thủ công lặp lại trên Windows (nhập liệu, đối soát dữ liệu, điền form) có thể triển khai hệ thống này với chi phí thấp. Chủ thể thực hiện: doanh nghiệp vừa và nhỏ hoặc đơn vị hành chính sử dụng phần mềm desktop, phối hợp với đội ngũ kỹ thuật nội bộ.


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

1. Kỹ sư kiểm thử phần mềm (QA Engineer) và nhóm đảm bảo chất lượng. Đây là nhóm hưởng lợi trực tiếp nhất. Luận văn cung cấp mã nguồn hoàn chỉnh và kiến trúc hệ thống có thể tái sử dụng ngay. QA Engineer tại các công ty phần mềm sử dụng ứng dụng Windows có thể tham khảo mô hình xây dựng kịch bản (script), cơ chế nhận diện UI Element theo chuỗi ID, và hệ thống logs để thiết lập pipeline kiểm thử tự động nội bộ mà không phát sinh chi phí bản quyền phần mềm thương mại.

2. Học viên cao học và nghiên cứu sinh chuyên ngành Kỹ thuật Viễn thông, Công nghệ thông tin. Luận văn là tài liệu tham khảo học thuật rõ ràng về cách áp dụng công nghệ UIA của Microsoft trong nghiên cứu thực nghiệm. Đặc biệt, phần lý thuyết trình biên dịch và cách vận dụng vào bài toán thực tế là nội dung hiếm được trình bày chi tiết bằng tiếng Việt. Học viên có thể lấy đây làm điểm xuất phát để mở rộng hướng nghiên cứu về RPA, AI-driven testing hoặc cross-platform automation.

3. Nhà phát triển phần mềm độc lập (indie developer) và cộng đồng mã nguồn mở. Với cam kết công khai toàn bộ mã nguồn, các lập trình viên C# có thể fork, mở rộng và đóng góp vào hệ thống. Use case điển hình: xây dựng script tự động hóa cho ứng dụng nội bộ của doanh nghiệp nhỏ, hoặc phát triển thêm các plugin hỗ trợ Control Pattern mới.

4. Doanh nghiệp và tổ chức có nhu cầu kiểm thử phần mềm Windows với ngân sách hạn chế. Các SME (doanh nghiệp vừa và nhỏ) chưa có đủ ngân sách để đầu tư vào HP UFT hay các giải pháp thương mại tương tự — có thể tiếp cận luận văn như một bản thiết kế kỹ thuật (technical blueprint) để xây dựng năng lực kiểm thử tự động nội bộ, giảm chi phí QA trong dài hạn.


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

Q1: Hệ thống automated testing trong luận văn khác gì so với Selenium? Selenium tập trung kiểm thử ứng dụng Web, nhận diện phần tử qua DOM (XPath, CSS Selector, ID). Hệ thống trong luận văn nhắm vào ứng dụng Windows desktop, sử dụng công nghệ UIA của Microsoft để nhận diện UI Element qua cấu trúc cây phân cấp. Hai hệ thống bổ sung cho nhau: Selenium cho Web, UIA-based testing cho Windows. Luận văn đã so sánh chi tiết 2 công cụ qua bảng đặc điểm gồm 12 tiêu chí.

Q2: Chi phí triển khai hệ thống này là bao nhiêu so với HP QTP? HP QTP phát sinh phí bản quyền ban đầu và chi phí duy trì hàng năm, cộng thêm phí mua các add-on tích hợp. Hệ thống trong luận văn hoàn toàn miễn phí — chỉ sử dụng thư viện .NET Framework sẵn có và Visual C#, cả hai đều không tốn chi phí bổ sung. Chi phí duy nhất là thời gian của kỹ sư triển khai và tùy biến kịch bản. Với tổ chức có đội ngũ kỹ thuật tốt, đây là lựa chọn tối ưu về mặt chi phí.

Q3: Ngôn ngữ script trong hệ thống có phức tạp để học không? Không phức tạp. Script được thiết kế với cú pháp đơn giản, dễ đọc dạng text thuần, gồm 7 lệnh cơ bản: RunApp, GetID, PushID, WaitID, SetID, ShowID và cấu trúc điều kiện If. Mỗi lệnh có cú pháp rõ ràng theo dạng Lệnh + ID_đối_tượng. Trung bình một kỹ sư quen với Windows có thể viết kịch bản kiểm thử cơ bản sau vài giờ thực hành — không đòi hỏi nền tảng lập trình chuyên sâu.

Q4: Hệ thống có hoạt động được với tất cả ứng dụng Windows không? Hiện tại hỗ trợ tốt các ứng dụng viết trên nền WinForm, .NET và WPF. Hai loại điều khiển được hỗ trợ đầy đủ là Button (InvokePattern) và Edit box dạng text (TextPattern). Các ứng dụng cũ viết theo chuẩn Win32 và MSAA vẫn có thể hoạt động một phần nhờ cơ chế tương thích ngược của UIA. Các ứng dụng sử dụng Control Type phức tạp như TreeView, DataGrid cần được mở rộng thêm trong phiên bản tương lai.

Q5: Luận văn có thể áp dụng cho bài toán RPA (Robotic Process Automation) thực tế không? Hoàn toàn có thể. Kiến trúc hệ thống gồm nhận diện UI Element, ghi nhận tương tác, lưu kịch bản và tái thực thi tự động — đây chính là vòng lõi của một hệ thống RPA. Trong thực tế, nhiều tổ chức tại Việt Nam có quy trình nhập liệu lặp lại hàng ngày trên phần mềm Windows nội bộ. Hệ thống trong luận văn, sau khi mở rộng thêm Control Pattern và hệ thống báo cáo, có thể triển khai trực tiếp để giải quyết bài toán này với chi phí gần như bằng 0.


Kết luận

  • Đóng góp học thuật cốt lõi: Đề tài là công trình tiên phong trong nước tích hợp công nghệ UI Automation của Microsoft với trình biên dịch kịch bản tự phát triển, hình thành một hệ thống automated testing Windows hoàn chỉnh từ đầu đến cuối.
  • Bằng chứng thực nghiệm xác thực: Kiểm thử thành công trên 2 ứng dụng thực tế — Calculator (môi trường kiểm soát) và softphone 3CX (môi trường Voice IP) — chứng minh tính khả thi và ứng dụng được của hệ thống.
  • Giá trị cộng đồng dài hạn: Toàn bộ mã nguồn được công khai, tạo nền tảng mở để cộng đồng kỹ sư phần mềm Việt Nam tiếp tục phát triển theo hướng RPA và automated QA.
  • Khoảng trống cần lấp đầy: Hai hướng phát triển ưu tiên trong 12–18 tháng tới là mở rộng Control Pattern (từ 2 lên 10+) và xây dựng hệ thống báo cáo trực quan để tăng giá trị sử dụng trong môi trường doanh nghiệp.
  • Lời khuyến nghị hành động: Các nhóm nghiên cứu, đội QA và doanh nghiệp phần mềm quan tâm nên bắt đầu bằng việc tải mã nguồn, chạy thử kịch bản kiểm thử Calculator có sẵn, sau đó dần tùy biến theo nhu cầu cụ thể của ứng dụng đích trong tổ chức mình.