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

Kiểm thử phần mềm (Software Testing) giữ vai trò then chốt trong chu kỳ phát triển hệ thống nhằm xác nhận yêu cầu, đánh giá sản phẩm, phát hiện và ngăn ngừa lỗi trước khi vận hành thực tế. Trong bối cảnh công nghệ hiện đại, các ứng dụng buộc phải hoạt động trên nhiều nền tảng khác nhau như web, thiết bị di động, IoT và điện toán đám mây. Sự phân tán nền tảng này đòi hỏi các thành phần dịch vụ phải có tính tương thích và độ ổn định cao, từ đó gia tăng áp lực kiểm thử chất lượng ở tầng dịch vụ hậu tầng (backend).

Thực tiễn thị trường lao động 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: trong khi tại các công ty phần mềm quốc tế trung bình 1 lập trình viên cần tới 4 kiểm thử viên (Tester), thì tại Việt Nam tỷ lệ này lại đảo ngược với 5 lập trình viên mới có 1 kiểm thử viên. Phần lớn sinh viên theo học ngành Công nghệ thông tin có định hướng trở thành lập trình viên, dẫn đến tình trạng khan hiếm nhân lực kiểm thử chất lượng cao. Xuất phát từ nhu cầu thực tiễn đó, đề tài đồ án môn học "Đảm bảo chất lượng phần mềm" tập trung vào việc nghiên cứu và thực thi kiểm thử giao diện lập trình ứng dụng (API Testing) cho hệ thống Website bán hoa tươi.

Đề tài xác định các mục tiêu và nhiệm vụ nghiên cứu cụ thể sau:

  1. Xác định thông tin cơ bản về dự án, phân định rõ các thành phần chức năng nằm trong phạm vi kiểm thử và ngoài phạm vi kiểm thử.
  2. Liệt kê và chuẩn hóa các yêu cầu kiểm thử (Test Requirements).
  3. Lựa chọn và xác lập các chiến lược kiểm thử phù hợp với kiến trúc ứng dụng web.
  4. Ước lượng các yêu cầu về tài nguyên và chi phí cần thiết cho quá trình kiểm thử.
  5. Thiết lập hệ thống tài liệu và biểu mẫu kiểm thử hoàn chỉnh sau khi hoàn tất quy trình kiểm thử.
  6. Đảm bảo tính đúng đắn của các chức năng phần mềm, bao gồm việc định hướng luồng xử lý, kiểm tra dữ liệu đầu vào, quy trình tính toán và dữ liệu phản hồi nhận được.
  7. Kiểm tra tính chính xác của dữ liệu, luồng nghiệp vụ và việc tuân thủ các quy tắc nghiệp vụ trong hệ thống thương mại điện tử.

Đối tượng nghiên cứu của đồ án là tập hợp các giao diện lập trình ứng dụng RESTful API phục vụ hệ thống Website bán hoa tươi. Phạm vi nghiên cứu về mặt không gian và học thuật được triển khai tại Khoa Công nghệ Thông tin, Trường Đại học Ngoại ngữ - Tin học Thành phố Hồ Chí Minh (HUFLIT) trong khuôn khổ Học kỳ II năm học 2021-2022. Phạm vi kỹ thuật tập trung vào các điểm cuối API dành cho hai nhóm tác tử chính là Người dùng (Khách hàng) và Quản trị viên (Admin).

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

Đề tài xây dựng trên nền tảng lý thuyết kiểm thử phần mềm chuyên sâu kết hợp các công cụ kiểm thử tự động hiện đại, tập trung vào các khái niệm và chuẩn mực sau:

  • Khái niệm Kiểm thử API (API Testing): Là một nhánh của kiểm thử tích hợp (Integration Testing), thực hiện kiểm tra trực tiếp các giao diện lập trình ứng dụng mà không cần thông qua giao diện người dùng đồ họa (GUI). Kiểm thử API yêu cầu thiết lập môi trường khởi tạo, thực hiện các lời gọi hàm/dịch vụ với các tham số tương ứng và kiểm tra tính hợp lệ của mã trạng thái (status code), cấu trúc phản hồi cùng dữ liệu trả về về mặt chức năng, độ tin cậy, hiệu suất và an toàn thông tin.
  • Kiểm thử tự động (Automation Testing): Quá trình sử dụng các phần mềm chuyên dụng (Automation Testing Tool) để thực thi tự động các kịch bản kiểm thử, giúp nâng cao năng suất, hạn chế sai sót do thao tác thủ công lặp đi lặp lại và rút ngắn thời gian hồi quy.
  • Công cụ Apache JMeter: Ứng dụng mã nguồn mở phát triển hoàn toàn bằng Java, ban đầu thiết kế để kiểm tra tải cho ứng dụng web, sau đó mở rộng thành công cụ kiểm thử hiệu năng và chức năng cho nhiều giao thức và dịch vụ: Web (HTTP, HTTPS trên nền NodeJS, Java, PHP, ASP.NET), SOAP/REST Webservices, FTP, LDAP, Database thông qua kết nối JDBC, Message-oriented middleware (MOM) qua JMS, Mail (SMTP, POP3, IMAP), TCP, Native commands/Shell scripts và các đối tượng Java. JMeter cho phép ghi lại quá trình kiểm thử, hỗ trợ debug và thực thi thông qua dòng lệnh (CLI) trên nhiều hệ điều hành tương thích Java (Linux, Windows, macOS).
  • Hệ thống chuẩn chất lượng phần mềm: Đồ án căn cứ vào 6 đặc tính chất lượng phần mềm chuẩn mực:
    1. Tính chức năng (Functionality): Tính phù hợp, tính chính xác, khả năng cộng tác làm việc và tính an toàn.
    2. Tính tin cậy (Reliability): Tính hoàn thiện, khả năng chịu lỗi và khả năng phục hồi.
    3. Tính khả dụng (Usability): Khả năng hiểu được, học được, sử dụng được và mức độ hấp dẫn.
    4. Tính hiệu quả (Efficiency): Khả năng đáp ứng thời gian và mức độ sử dụng tài nguyên.
    5. Khả năng bảo trì (Maintainability): Khả năng phân tích, thay đổi, tính ổn định và khả năng kiểm tra.
    6. Tính khả chuyển (Portability): Khả năng thích nghi, cài đặt, cùng tồn tại và thay thế.

Phương pháp nghiên cứu thực nghiệm được áp dụng qua quy trình 5 bước của Tester: tiếp nhận và phân tích đặc tả yêu cầu; lập kế hoạch và phạm vi kiểm thử; thiết kế kịch bản kiểm thử (Test Case); triển khai kịch bản tự động (Test Script) trên công cụ JMeter; thực thi kiểm thử và báo cáo kết quả. Nguồn dữ liệu kiểm thử được sinh trực tiếp từ các tham số kiểm thử biên, chuỗi ký tự đặc biệt, giá trị rỗng, mã định danh đối tượng và chuỗi xác thực JSON Web Token (JWT) kết nối tới dịch vụ API cục bộ (localhost:4000/api/v2/ và mạng nội bộ 192.5:4000/api/v2/).

Thiết kế và triển khai

Hệ thống Website bán hoa tươi được phân tích thành 14 ca sử dụng (Use Case) nền tảng, phân định quyền hạn rõ ràng cho Khách hàng và Admin:

Mã UC Tên Use Case Tác tử (Actor) Mô tả nghiệp vụ
UC01 Tra cứu sản phẩm Tất cả tác tử Tìm kiếm hoa tươi trong danh mục theo điều kiện tra cứu
UC02 Đặt hàng Khách hàng, Nhân viên, Quản lý Tạo đơn đặt hàng mới và lưu trữ vào cơ sở dữ liệu
UC03 Hủy đặt Khách hàng, Nhân viên, Quản lý Hủy đơn đặt hàng đã tạo trong hệ thống
UC04 Thanh toán Khách hàng Nhập thông tin thẻ/tài khoản và xác nhận thanh toán hóa đơn
UC05 Đăng ký Khách hàng Khởi tạo tài khoản người dùng mới trên hệ thống
UC06 Đăng nhập Tất cả tác tử Xác thực thông tin người dùng và cấp quyền truy cập
UC07 Thêm vào giỏ hàng Khách hàng Đưa sản phẩm được chọn vào danh sách giỏ hàng
UC08 Cập nhật số lượng Khách hàng Điều chỉnh số lượng mặt hàng và tính lại tổng giá trị giỏ hàng
UC09 Xóa khỏi giỏ hàng Khách hàng Loại bỏ sản phẩm không còn nhu cầu mua ra khỏi giỏ hàng
UC10 Xem lịch sử đơn hàng Khách hàng, Nhân viên, Quản lý Tra cứu danh sách các đơn hàng đã đặt trong quá khứ
UC11 Thêm sản phẩm Admin Tạo mới mặt hàng hoa tươi vào cơ sở dữ liệu hệ thống
UC12 Xóa sản phẩm Admin Gỡ bỏ mặt hàng hoa tươi khỏi danh mục quản lý
UC13 Sửa sản phẩm Admin Cập nhật thông tin chi tiết, giá và hình ảnh sản phẩm
UC14 Phân quyền User Admin Thay đổi cấp bậc và quyền hạn của người dùng hệ thống

Kế hoạch phân công công việc thực hiện đồ án giữa 3 thành viên được hoạch định chi tiết theo tiến độ thời gian:

STT Nhóm công việc / Nội dung Thời lượng Số người Nhân sự phụ trách
1 Tìm hiểu API, công cụ JMeter 3 ngày 3 Cả nhóm
2 Đặc tả các chức năng hệ thống 1 tuần 3 Cả nhóm
3 Xác định phạm vi kiểm thử hệ thống 5 ngày 2 Nguyễn Xuân Tú, Phan Minh Trí
4 Viết Test Case API 3 ngày 3 Trần Ngọc Bằng (chủ trì)
5 Viết Test Script cho API Order 1 tuần 3 Cả nhóm
5.1 Test Script cho API Authentication 1 tuần 1 Trần Ngọc Bằng
5.2 Test Script cho API User 1 tuần 1 Nguyễn Xuân Tú
5.3 Test Script cho API Product 1 tuần 1 Phan Minh Trí
6 Thực thi kiểm thử trên công cụ (JMeter) 1 tuần 3 Cả nhóm
7 Thiết kế Slide báo cáo 1 ngày 1 Trần Ngọc Bằng
8 Biên soạn báo cáo tổng kết 3 ngày 3 Nguyễn Xuân Tú (chủ trì)

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

Phần I: Giới thiệu chung và cơ sở công nghệ kiểm thử

Phần này trình bày tổng quan về vai trò của hoạt động kiểm thử trong quy trình sản xuất phần mềm hiện đại; chỉ ra sự chênh lệch cung - cầu nhân lực Tester tại thị trường Việt Nam. Tác giả làm rõ nguyên lý kiểm thử API ở tầng trung gian (middleware), nhấn mạnh sự cần thiết của việc cấu hình môi trường gọi API và xác thực dữ liệu phản hồi khi chưa có giao diện người dùng. Nội dung phần này cũng giới thiệu chi tiết về phương pháp kiểm thử tự động (Automation Testing) và kiến trúc đa giao thức của công cụ Apache JMeter.

Phần II: Đặc tả các chức năng hệ thống (System Functions)

Tác giả chi tiết hóa 14 Use Case của hệ thống Website bán hoa tươi. Mỗi Use Case đều được chuẩn hóa cấu trúc gồm: Tên, Mã, Mô tả nghiệp vụ, Tác tử kích hoạt, Điều kiện tiên quyết (Precondition), Kết quả sau khi thực hiện (Postcondition), Luồng sự kiện chính (Standard Flow), Luồng sự kiện rẽ nhánh (Alternative Flow), Các trường hợp phát sinh lỗi (Error Situations) và Trạng thái hệ thống khi lỗi xảy ra (System state in error situations). Các kịch bản lỗi tập trung vào việc xử lý mất kết nối máy chủ, sai định dạng dữ liệu, dữ liệu rỗng và trùng lặp mã nhận diện trong cơ sở dữ liệu.

Phần III: Xác định mục tiêu và chuẩn chất lượng của hệ thống

Chương này xác định các mục tiêu cốt lõi của chiến lược kiểm thử và xây dựng khung tham chiếu chất lượng dựa trên 6 nhóm đặc tính phần mềm chuẩn. Tác giả phân tích các tiêu chí riêng biệt của Website bán hoa tươi: đảm bảo tính năng giao dịch trực tuyến chính xác, phân quyền chặt chẽ giữa Quản trị viên và Khách hàng, kiểm soát tính toàn vẹn của dữ liệu phản hồi từ máy chủ. Từ đó, nhóm nghiên cứu xác định phạm vi kiểm thử cụ thể bao gồm 14 nhóm API cần thẩm định.

Phần IV: Thiết kế Test Case và Test Script API

Đây là nội dung trọng tâm của đồ án, bao gồm hệ thống kịch bản kiểm thử chi tiết và kịch bản tự động hóa trên JMeter:

  • Nhóm API Người dùng (User APIs):
    • POST /api/v2/login: 10 Test Cases (TC_001 đến TC_010) kiểm tra xác thực thông tin đăng nhập với tài khoản rỗng, sai mật khẩu, tài khoản không tồn tại, chứa ký tự đặc biệt, khoảng trắng đầu/cuối.
    • POST /api/v2/password/forgot: 10 Test Cases (TC_011 đến TC_020) kiểm tra chức năng quên mật khẩu với email không tồn tại, sai định dạng tên miền, chuỗi rỗng và viết hoa/thường.
    • POST /api/v2/register: 11 Test Cases (TC_021 đến TC_031) kiểm tra ràng buộc dữ liệu đăng ký người dùng (họ tên, email, mật khẩu, tệp tin đính kèm avatar).
    • PUT /api/v2/password/update: 14 Test Cases (TC_032 đến TC_045) kiểm tra cập nhật mật khẩu với mật khẩu cũ không khớp, mật khẩu mới rỗng, chuỗi khoảng trắng.
    • GET /api/v2/logout: 4 Test Cases (TC_046 đến TC_049) kiểm tra đăng xuất với mã JWT Token hợp lệ, token bị chèn ký tự, khoảng trắng hoặc bị cắt ngắn.
    • PUT /api/v2/me/update: 15 Test Cases (TC_050 đến TC_064) kiểm tra cập nhật thông tin hồ sơ người dùng.
    • POST /api/v2/review: 4 Test Cases (TC_069 đến TC_072) kiểm tra đánh giá sản phẩm với nội dung rỗng, khoảng trắng và ký tự đặc biệt.
    • GET /api/v2/products và GET /api/v2/product/:id: 8 Test Cases (TC_073 đến TC_080) kiểm tra truy xuất danh sách và chi tiết sản phẩm qua tham số URL.
  • Nhóm API Quản trị viên (Admin APIs):
    • POST /api/v2/admin/product/new: 12 Test Cases (TC_001 đến TC_012) kiểm tra ràng buộc toàn vẹn khi tạo sản phẩm mới (Tên, Mô tả, Giá, Số lượng tồn kho, Danh mục, Tệp hình ảnh).
    • PUT /api/v2/admin/product/:id: 11 Test Cases (TC_013 đến TC_023) kiểm tra cập nhật sản phẩm khi thiếu các trường thông tin bắt buộc.
    • DELETE /api/v2/admin/product/:id: 4 Test Cases (TC_024 đến TC_027) kiểm tra xóa sản phẩm theo định danh hợp lệ và không hợp lệ.
    • GET /api/v2/reviews và DELETE /api/v2/reviews: 8 Test Cases (TC_028 đến TC_035) kiểm tra truy xuất và xóa đánh giá sản phẩm.
    • GET /api/v2/admin/products: 4 Test Cases (TC_036 đến TC_039) kiểm tra lấy toàn bộ danh mục sản phẩm quản trị.
    • GET, DELETE người dùng quản trị: 16 Test Cases (TC_040 đến TC_055) kiểm tra các API /admin/users, /admin/user/:id và /admin/users/allUsersEmail.
    • GET, DELETE đơn hàng quản trị: 8 Test Cases (TC_056 đến TC_059, TC_064 đến TC_067) kiểm tra API /admin/orders và /admin/order/:id.
  • Hệ thống Test Script tự động: Thiết lập kịch bản trên JMeter cho các luồng xử lý thành công (Success) và thất bại (False) cho từng nhóm API: Login, LogoutUser, RegisterUser, DeleteOrder, DeleteProduct, DeleteSingleReviewProduct, DeleteUser, ForgotPassword, GetAllOrder, GetAllReviewProduct, GetAllUser, GetAllUserEmail, GetProductDetail, GetSingleUser, ReviewProduct, UpdatePassword, UpdateProfile, UserDetail.

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

Đồ án đã đạt được các kết quả cụ thể thông qua quá trình kiểm thử thực nghiệm:

  • Chuẩn hóa hệ thống tài liệu đặc tả 14 Use Case nghiệp vụ thương mại điện tử với đầy đủ luồng chính, luồng phụ và trạng thái lỗi.
  • Xây dựng và thực thi thành công hơn 140 kịch bản kiểm thử API chi tiết (bao gồm hơn 70 Test Case phía User và gần 70 Test Case phía Admin). Mọi kịch bản đều được kiểm tra thực tế trên môi trường máy chủ cục bộ và ghi nhận kết quả đạt (Pass).
  • Xác minh được khả năng kiểm soát dữ liệu đầu vào chặt chẽ của hệ thống backend: các trường hợp tham số rỗng, sai định dạng email, sai token JWT, hoặc ID không tồn tại đều trả về đúng thông báo lỗi (như User validation failed, Resources not found with this id, Invalid _id, Product not found with this id).
  • Xây dựng bộ kịch bản kiểm thử tự động (Test Script) hoàn chỉnh trên công cụ Apache JMeter cho toàn bộ các điểm cuối API cốt lõi, phục vụ cho cả luồng dữ liệu hợp lệ và luồng dữ liệu lỗi.

Về mặt đóng góp, đề tài đã thiết lập một quy trình mẫu về kiểm thử tự động API cho ứng dụng thương mại điện tử quy mô vừa và nhỏ, kết hợp chặt chẽ giữa lý thuyết đảm bảo chất lượng phần mềm và công cụ kiểm thử thực hành.

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

Hạn chế của đồ án:

  • Phạm vi kiểm thử chủ yếu tập trung vào kiểm tra chức năng (Functional Testing) và xác thực dữ liệu đầu vào của các API đơn lẻ; chưa mở rộng sang kiểm thử tải chịu đựng quy mô lớn (Stress Testing, Spike Testing) với số lượng người dùng ảo đồng thời cao trên JMeter.
  • Quá trình kiểm thử mới dừng lại ở tầng API backend, chưa kết hợp kiểm thử toàn diện giao diện người dùng (Web UI Testing) và kiểm thử tính toàn vẹn dữ liệu trực tiếp ở tầng cơ sở dữ liệu (Database Testing).

Hướng phát triển tiếp theo được nhóm tác giả xác định:

  • Triển khai thực nghiệm kiểm thử trên các hệ thống phân tán và có độ phức tạp nghiệp vụ cao hơn.
  • Tiếp tục nghiên cứu, ứng dụng sâu rộng các công cụ kiểm thử tự động nâng cao khác.
  • Mở rộng phạm vi kiểm thử sang kiểm thử giao diện website tự động và kiểm thử hiệu năng cơ sở dữ liệu thông qua các giao thức chuyên dụng (như JDBC trên JMeter).

Giá trị tham khảo

Báo cáo đồ án môn học này là tài liệu tham khảo thiết thực cho:

  • Sinh viên chuyên ngành Công nghệ thông tin, Kỹ thuật phần mềm đang theo học các học phần Đảm bảo chất lượng phần mềm, Kiểm thử phần mềm, Kiểm thử tự động.
  • Các kỹ sư kiểm thử phần mềm mới bắt đầu (Junior Tester / QA) có nhu cầu tìm hiểu phương pháp thiết kế Test Case cho RESTful API và cách thức tổ chức kịch bản kiểm thử trên công cụ Apache JMeter.
  • Nội dung có giá trị tham khảo nổi bật nhất là cấu trúc đặc tả 14 Use Case chi tiết và bộ biểu mẫu thiết kế Test Case API bao quát đa dạng trường hợp biên (chuỗi rỗng, khoảng trắng, ký tự đặc biệt, cấu trúc Token JWT).

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

1. Đề tài sử dụng công cụ kiểm thử tự động nào và công cụ này hỗ trợ những giao thức nào?
Đề tài sử dụng công cụ mã nguồn mở Apache JMeter được viết 100% bằng Java. Công cụ này hỗ trợ kiểm thử hiệu suất và chức năng trên nhiều giao thức/ứng dụng: Web (HTTP, HTTPS), SOAP/REST Webservices, FTP, LDAP, kết nối cơ sở dữ liệu qua JDBC, Message-oriented middleware qua JMS, Mail (SMTP, POP3, IMAP), TCP, Native commands/Shell scripts và Java Objects.

2. Hệ thống Website bán hoa tươi trong đồ án có bao nhiêu ca sử dụng (Use Case) và phân quyền cho những tác tử nào?
Hệ thống được thiết kế với 14 Use Case (từ UC01 đến UC14), phân quyền cho hai đối tượng tác tử chính là Khách hàng (thực hiện tra cứu, đặt hàng, hủy hàng, thanh toán, đăng ký, đăng nhập, quản lý giỏ hàng, xem lịch sử) và Quản trị viên - Admin (thêm, xóa, sửa sản phẩm và phân quyền người dùng).

3. Nhóm tác giả đã thiết kế những trường hợp biên nào khi kiểm thử API Đăng nhập (POST /login)?
API Đăng nhập được thiết kế với 10 Test Cases (TC_001 đến TC_010), kiểm tra các trường hợp: email và mật khẩu cùng rỗng; email hợp lệ nhưng mật khẩu rỗng; email rỗng nhưng mật khẩu có giá trị; email và mật khẩu đúng; email đúng định dạng nhưng không có trong cơ sở dữ liệu; email chứa ký tự đặc biệt; mật khẩu chứa ký tự đặc biệt; email hoặc mật khẩu bị chèn thêm khoảng trắng đầu/cuối.

4. Kịch bản kiểm thử API Đăng xuất (GET /logout) xác thực trạng thái người dùng dựa trên thành phần nào?
API Đăng xuất được xác thực dựa trên chuỗi JSON Web Token (JWT). Kịch bản kiểm thử thực hiện kiểm tra phản hồi thành công khi truyền Token hợp lệ (User logged out successfully!), đồng thời kiểm tra hệ thống trả về false khi Token bị chèn thêm ký tự lạ, chèn khoảng trắng hoặc bị xóa bớt ký tự.

5. 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 được tác giả đề cập như thế nào?
Theo số liệu tác giả trình bày trong phần bối cảnh, tại các công ty phần mềm nước ngoài trung bình 1 lập trình viên cần 4 kiểm thử viên, trong khi tại Việt Nam tỷ lệ này bị mất cân đối ngược lại: cứ 5 lập trình viên mới có 1 kiểm thử viên.

Kết luận

Đồ án môn học "Kiểm thử API Website bán hoa tươi" do nhóm sinh viên Khoa Công nghệ Thông tin, Trường Đại học Ngoại ngữ - Tin học TP.HCM thực hiện đã giải quyết bài toán đảm bảo chất lượng phần mềm ở tầng dịch vụ backend. Bằng việc áp dụng quy trình kiểm thử bài bản từ đặc tả yêu cầu, thiết kế hơn 140 Test Case chi tiết cho đến xây dựng kịch bản tự động trên công cụ Apache JMeter, đề tài đã chứng minh tính đúng đắn và khả năng kiểm soát dữ liệu của hệ thống API. Kết quả của đồ án cung cấp một tài liệu tham khảo hoàn chỉnh, có tính ứng dụng thực tiễn cao cho sinh viên và người làm công tác kiểm thử phần mềm.