Khanh Hoang - Kenn
Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.
Có công cụ nguồn mở nào đáp ứng nhu cầu của lĩnh vực kiểm định phần mềm? Và chúng ta phải cân nhắc những yếu tố gì, tiêu chí nào để đưa ra quyết định lựa chọn giữa công cụ nguồn mở và công cụ thương mại?
Sản xuất phần mềm chuyên nghiệp ngày nay không thể không sử dụng các công cụ hỗ trợ. Chúng là trợ thủ đắc lực (đôi khi là bắt buộc) giúp lực lượng phát triển phần mềm nâng cao năng suất và chất lượng dự án. Tuy nhiên, một thực tế là chi phí cho các phần mềm hỗ trợ thương mại là rất cao, đôi lúc làm cho dự án không còn khả năng sinh lời ... Hơn nữa, với tình hình kinh tế hiện nay, các doanh nghiệp gia công phần mềm đang phải gồng mình cung cấp các gói dịch vụ giá thấp nhưng có chất lượng cao hơn để thu hút khách hàng. Do vậy ban quản trị dự án luôn phải tìm cách tiết kiệm chi phí phát triển, kiểm định cũng như vận hành dự án, trong khi vẫn đảm bảo chất lượng sản phẩm đầu ra.
Các phần mềm mã nguồn mở có thể đáp ứng cho nhu cầu trên. Mozilla Firefox, OpenOffice, hay LAMP (Linux, Apache, MySQL, PHP)... là các tên tuổi được nhiều người biết đến trong lĩnh vực phần mềm mã nguồn mở. Nhưng có công cụ mã nguồn mở nào đáp ứng nhu cầu của lĩnh vực kiểm định phần mềm? Và chúng ta phải cân nhắc những yếu tố gì, dựa trên những tiêu chí nào để đưa ra quyết định lựa chọn giữa công cụ kiểm tra mã nguồn mở và công cụ thương mại? Hy vọng bài viết này có thể giúp bạn trả lời câu hỏi trên.
Cộng đồng mã nguồn mở có khá nhiều ứng dụng hỗ trợ việc kiểm tra tự động, từ các công cụ kiểm tra tính năng, hiệu năng, đến công cụ hỗ trợ kiểm tra hệ thống mạng, cơ sở dữ liệu... Dưới đây chúng tôi chọn ra một số công cụ mã nguồn mở có uy tín trong lĩnh vực kiểm tra tự động, cụ thể là kiểm tra tự động tính năng, hiệu năng của ứng dụng web.
Là một công cụ chuyên dùng để kiểm tra hiệu năng của các ứng dụng web, được viết bằng Java, JMeter có thể hoạt động trên các hệ điều hành có hỗ trợ JVM (Java Virtual Machine) phiên bản 1.4 trở lên. JMeter không đòi hỏi kiến thức lập trình chuyên sâu để sử dụng. Hiện nay ứng dụng này đã được cải tiến để có thể đo lường hiệu năng hoạt động của các đối tượng và giao thức sau: HTTP, HTTPS, SOAP, JDBC, LDAP, JMS, POP3 ...
Các thành phần chính:
Test Plan: Bao gồm các bước sẽ được JMeter thực thi.
Thread Group: Đại diện cho người dùng ảo (virtual user), có thể gồm các thành phần sau:
- Logic Controller: Cho phép điều chỉnh logic khi gửi các yêu cầu đến đối tượng cần kiểm tra.
- Sampler: Cung cấp thông tin cho JMeter gửi các yêu cầu đến máy chủ cần kiểm tra. Tùy theo giao thức kiểm tra, JMeter hỗ trợ những loại sampler khác nhau.
- Config Element: Sử dụng để thêm vào những thay đổi/ cấu hình cần thiết cho các sampler.
Hình 1 – Giao diện cửa sổ ứng dụng của JMeter
- Timer: Điều chỉnh khoảng thời gian dừng giữa các lần gửi yêu cầu.
- Pre/Post Processor: Cho phép thực hiện một số bước cần thiết ngay trước/ sau khi chạy một sampler nào đó.
- Assertion: Các phương pháp xác nhận thông tin trả về từ đối tượng kiểm tra có đúng với mong đợi hay không.
- Listener: Cho phép thu thập thông tin kết quả. Có thể đưa ra các báo cáo kết quả kiểm tra dạng đồ thị, hoặc xuất ra tập tin.
WorkBench: Được xem như một vùng tạm để làm việc, lưu trữ. Tất cả các thành phần bên trong WorkBench sẽ không được thực thi (trừ khi nó được chuyển vào trong Test Plan).
JMeter có thể giả lập hàng ngàn người dùng ảo để thực hiện đo lường, kiểm tra hiệu năng của đối tượng cần test dựa trên một kịch bản dựng sẵn. Số lượng người sử dụng ảo bị hạn chế bởi cấu hình phần cứng của máy chủ chạy test. Nhưng điều này có thể được khắc phục với phương pháp kiểm tra phân tán. JMeter đồng thời cũng cung cấp một hệ thống báo cáo kết quả kiểm tra linh động. Tính dễ sử dụng của công cụ này là không cao nếu so sánh với các công cụ thương mại. Nhưng JMeter hiện đang được sử dụng rộng rãi nên có một hệ thống tài liệu hỗ trợ rất tốt, từ các hướng dẫn trên website, đến các diễn đàn và ebook.
Selenium gồm một bộ các công cụ hỗ trợ kiểm tra tự động tính năng của ứng dụng web, bao gồm: Selenium IDE, Selenium Remote Control (RC), Selenium Core và Selenium Grid. Bộ công cụ này hoạt động tốt trên nhiều hệ điều hành và có thể thực thi kiểm tra trực tiếp trên các trình duyệt web khác nhau.
- Selenium IDE: Một ứng dụng mở rộng cho Mozilla Firefox phiên bản 2.0 trở lên. Công cụ này cung cấp chức năng "thu và chạy lại" – Record and Playback. Nhờ đó, Tester có thể nhanh chóng tạo một bộ kịch bản kiểm tra (test script) bằng cách trực tiếp "thu" các thao tác của mình trên đối tượng cần kiểm tra thành một tập những câu lệnh Selenese (ngôn ngữ kịch bản được dùng riêng cho Selenium IDE và Selenium Core, có dạng bảng HTML). Sau đó chạy lại các câu lệnh này để kiểm tra. Chức năng này rất hữu dụng giúp tiết kiệm thời gian viết kịch bản kiểm tra. Selenium IDE còn cho phép lưu kịch bản đã thâu dưới nhiều loại ngôn ngữ lập trình khác nhau như Java, PHP, C#, Ruby, Perl hay Python.
- Selenium RC: Công cụ này có thể nhận các test script được thu bởi Selenium IDE, cho phép chỉnh sửa, cải tiến linh động bằng nhiều ngôn ngữ lập trình khác nhau. Sau đó khởi động một trong các trình duyệt web được chỉ định để thực thi kiểm tra trực tiếp trên trình duyệt đó. Selenium RC còn cung cấp khả năng lưu lại kết quả kiểm tra.
- Selenium Grid: Thực hiện phương pháp kiểm tra phân bổ, phối hợp nhiều Selenium RC để có thể thực thi trên nhiều trình duyệt web khác nhau trong cùng một lúc. Cũng cho phép lưu lại kết quả kiểm tra.
- Selenium Core: Đã được tích hợp trong Selenium IDE. Selenium Core là một công cụ chạy các test script viết bằng Selenese. Thế mạnh của công cụ này là có thể chạy test script trên gần như tất cả các trình duyệt, nhưng lại yêu cầu được cài đặt trên máy chủ của website cần kiểm tra. Điều này là không thể khi Tester không có quyền truy cập đến máy chủ đó.
Hình 2 - Cơ cấu làm việc của bộ ba Selenium IDE, Selenium RC và Selenium Grid (nguồn: http://seleniumhq.org/)
Là một công cụ hỗ trợ kiểm tra tính năng nên Selenium không có khả năng giả lập nhiều người dùng ảo cùng một lúc. Công việc của nó là chạy kiểm tra tự động dựa trên một kịch bản đã được thiết kế từ trước. Qua đó chúng ta có thể chắc chắn rằng đối tượng kiểm tra có hoạt động đúng như mong đợi hay không. Lợi ích Selenium có thể đem lại là không nhỏ, nhưng để tận dụng lợi thế đó, tester phải có khả năng nghiên cứu và ứng dụng, đồng thời kiến thức lập trình tốt cũng sẽ giúp ích nhiều trong quá trình sử dụng công cụ mã nguồn mở này.
Ngoài hai công cụ hữu ích trên, các công cụ sau đây tuy có một số khuyết điểm nhưng cũng gây được ấn tượng tốt với cộng đồng người dùng nên chúng tôi sẽ điểm qua một số thông tin sau:
- The Grinder (http://grinder.sourceforge.net). Nhìn chung, The Grinder có nhiều điểm tương đồng với JMeter: là một ứng dụng thuần Java, hoạt động trên nhiều hệ điều hành, yêu cầu JVM phiên bản 1.4 trở lên. The Grinder cũng được thiết kế để kiểm tra hiệu năng web, cơ sở dữ liệu qua JDBC và một số giao thức khác. Điều khác biệt là The Grinder đòi hỏi tester phải có khả năng sử dụng ngôn ngữ Jython để có thể viết/chỉnh sửa các kịch bản kiểm tra (test script) theo ý mình, và hệ thống báo cáo kết quả kiểm tra không linh động như JMeter.
- TestMaker (http://www.pushtotest.com). Hỗ trợ kiểm tra hiệu năng và tính năng của ứng dụng web. TestMaker có khả năng chạy test script được thâu từ các công cụ khác như TestGen4Web và Selenium. Tuy nhiên, phiên bản được xây dựng sẵn để cài đặt và sử dụng miễn phí nhưng bị hạn chế khả năng chạy kiểm tra tối đa với 200 người dùng ảo. Để xóa bỏ hạn chế này, người sử dụng có thể trả tiền hoặc tự tải mã nguồn của TestMaker về và tự xây dựng (build) thành một bộ cài đặt và sử dụng hoàn chỉnh. Điều này đòi hỏi kiến thức về Java, Ant, NetBean, ...
- WebLoad OpenSource (http://webload.org). Vốn là một công cụ thương mại hỗ trợ kiểm tra hiệu năng web của RadView Software. Gia nhập cộng đồng mã nguồn mở vào năm 2007 nhưng WebLoad OpenSource bị hạn chế nhiều tính năng so với phiên bản thương mại của nó. Hiện tại WebLoad OpenSource không hỗ trợ giao thức HTTPS nên khá bất tiện trong một số trường hợp.
- OpenSTA (http://opensta.org) cũng là một công cụ kiểm tra hiệu năng web có tên tuổi nhưng đã không đưa ra một phiên bản mới nào từ cuối năm 2007. Một trong những yếu điểm của OpenSTA là chỉ hoạt động trên Windows. Tuy nhiên tính thân thiện và dễ sử dụng của công cụ này lại được đánh giá cao. Ngôn ngữ kịch bản được sử dụng trong OpenSTA là SCL.
Nhiều ứng dụng mã nguồn mở phục vụ công việc kiểm định phần mềm cũng được giới thiệu tại www.opensourcetesting.org.
Liệu các công cụ hỗ trợ kiểm định mã mở có thể làm tốt công việc như các công cụ thương mại hay không. Câu trả lời là có, nhưng chúng ta vẫn phải xét đến các khía cạnh sau:
Hình 3 – So sánh giữa công cụ mã mở và thương mại
Khi quyết định sử dụng các công cụ mã nguồn mở, chúng ta phải chấp nhận rằng chúng không dễ sử dụng (như công cụ thương mại), có một số hạn chế trong tính năng và có thể công cụ đó vẫn còn một số lỗi phát sinh trong quá trình sử dụng. Vì vậy việc sàng lọc không phải đơn giản. Tốt nhất công cụ mã mở đó vẫn phải được cập nhật và hỗ trợ tài liệu, kỹ thuật bởi cộng đồng để có thể giảm thiểu các yếu tố rủi ro vừa nêu.
Ngoài ra, việc tìm được nhân lực có thể sử dụng tốt các công cụ kiểm định mã nguồn mở cũng là một bài toán khó. Do đó, việc nghiên cứu và đào tạo cần được đầu tư đúng lúc, đúng mức độ cần thiết cho nhu cầu dự án. Tuy nhiên khi xem xét lại giữa công sức phải bỏ ra để ứng dụng phần mềm mã nguồn mở và chi phí rất lớn để đầu tư công cụ thương mại, ta sẽ thấy được sự cân bằng giữa hai loại công cụ nói trên.
Các vấn đề cân nhắc khi quyết định ứng dụng công cụ mã nguồn mở vào dự án:
* Vấn đề kỹ thuật:
- Nhu cầu kiểm định của dự án? Sử dụng các công nghệ, giao thức gì?
- Có yêu cầu đặc biệt nào về báo cáo và phân tích kết quả kiểm tra không?
- Công cụ mã mở đó có được hỗ trợ kỹ thuật/ tài liệu đầy đủ không?
* Vấn đề nguồn lực:
- Khả năng kỹ thuật và nghiên cứu của tester
- Trong nhóm ít nhất nên có một tester đã có kinh nghiệm sử dụng, hoặc thông thạo ngôn ngữ kịch bản mà công cụ đó hỗ trợ.
* Vấn đề chi phí:
- Chi phí và quỹ thời gian cho giai đoạn kiểm định tự động (nên cân nhắc cả thời gian đào tạo để ứng dụng công cụ).
Các phần mềm mã nguồn mở đem lại cơ hội thứ hai bên cạnh các phần mềm thương mại, cho lĩnh vực kiểm định chất lượng phần mềm. Tuy không tốn chi phí đầu tư ban đầu nhưng việc ứng dụng công cụ mã mở cũng có các phát sinh tiềm ẩn khác đôi khi rất tốn kém, như việc phải tìm được giải pháp vượt qua các hạn chế và lỗi của công cụ (nếu có), hoặc phải lập trình thêm một số module bổ sung tính năng để đáp ứng nhu cầu dự án, tốn nhiều thời gian để tìm hiểu và ứng dụng tốt... Do đó cần có kế hoạch cân nhắc và đánh giá kỹ tất cả các khía cạnh để cuối cùng việc ứng dụng công cụ mã mở đó đem lại lợi ích nhiều hơn với tổng chi phí và công sức đầu tư thấp hơn.
Ngô Quách Hy
[email protected]
Global Cybersoft Việt Nam