Giới thiệu dự án

Trong kỷ nguyên chuyển đổi số và phát triển phần mềm hiện đại, đảm bảo chất lượng phần mềm (Software Quality Assurance - SQA) là yếu tố then chốt quyết định sự sống còn của mọi sản phẩm công nghệ. Theo các nghiên cứu kinh điển về kỹ nghệ phần mềm của Glen Myers và Deutsch, chi phí để phát hiện và sửa chữa một lỗi (bug) trong giai đoạn bảo trì hoặc khi đã bàn giao cho khách hàng có thể tốn kém gấp 10 đến 100 lần so với việc xử lý ngay trong các giai đoạn đầu của vòng đời phát triển (SDLC).

Tại Công ty Cổ phần Truyền thông và Dịch vụ NoDo – một doanh nghiệp công nghệ thông tin quy mô 45 nhân sự chuyên phát triển các giải pháp viễn thông (Payment Proxy, Vas Provisioning), tài chính ngân hàng (Core Banking, Internet Banking) và ERP trên nền tảng Odoo – công tác quản trị chất lượng đóng vai trò cốt lõi. Tuy nhiên, qua khảo sát thực tế tại doanh nghiệp, quy trình quản lý lỗi kiểm thử vẫn được thực hiện phân tán thông qua các văn bản Word, bảng tính Excel hoặc trao đổi trực tiếp bằng miệng.

Thực trạng này dẫn đến các "điểm nghẽn" (pain points) nghiêm trọng:

  • 50% nhân viên được khảo sát xác nhận dự án thường xuyên bị trễ thời hạn bàn giao (deadline).
  • 60% nguyên nhân chậm tiến độ xuất phát từ việc bộ phận kiểm thử kiểm soát lỗi không hiệu quả, làm chậm chu kỳ phản hồi giữa Tester, Developer và Designer.
  • 100% nhân sự tham gia khảo sát gặp khó khăn trong việc truy xuất lịch sử lỗi, phân loại mức độ ưu tiên và theo dõi tiến độ khắc phục.

Nhằm giải quyết triệt để bài toán trên, đồ án tập trung nghiên cứu và xây dựng giải pháp "Ứng dụng hệ thống quản lý bug trong quy trình kiểm thử phần mềm tại Công ty Cổ phần Truyền thông và Dịch vụ NoDo" dựa trên nền tảng mã nguồn mở Redmine.

Mục tiêu dự án

  1. Khảo sát và chuẩn hóa quy trình kiểm thử: Đánh giá toàn diện các khâu kiểm thử (Unit Test, Integration Test, System Test, Acceptance Test) và xác lập luồng thông tin kiểm thử tối ưu.
  2. Nghiên cứu và lựa chọn công cụ: Đánh giá định lượng các hệ thống quản lý lỗi phổ biến trên thế giới (Jira, Mantis, BugNet, Bug Genie, Redmine) để chọn giải pháp phù hợp nhất với mô hình tài chính và hạ tầng của NoDo.
  3. Triển khai và tùy biến hệ thống Redmine: Cấu hình môi trường máy chủ, thiết lập cơ sở dữ liệu, quản lý phân quyền người dùng (Role-Based Access Control) và số hóa toàn bộ vòng đời của Issue/Bug.
  4. Đo lường hiệu quả vận hành: Đánh giá mức độ cải thiện về thời gian xử lý lỗi, tỷ lệ trễ hạn và năng suất phối hợp liên phòng ban.

Giải pháp và Phạm vi

  • Cách tiếp cận: Tận dụng sức mạnh của framework Ruby on Rails và hệ quản trị cơ sở dữ liệu MySQL để triển khai Redmine On-Premises, cho phép tùy biến linh hoạt mà không phát sinh chi phí bản quyền định kỳ.
  • Kết quả kỳ vọng: Rút ngắn 40-60% thời gian luân chuyển thông tin lỗi, giảm tỷ lệ trễ deadline xuống dưới 15%, lưu trữ 100% tài liệu và lịch sử kiểm thử tập trung.
  • Phạm vi & Giới hạn: Triển khai tập trung cho toàn bộ các phòng ban kỹ thuật và quản lý dự án tại NoDo; giới hạn trong hạ tầng mạng nội bộ và máy chủ web cục bộ trước khi mở rộng ra hạ tầng đám mây công cộng.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát nội bộ tại Công ty NoDo (vốn điều lệ 4 tỷ VNĐ, doanh thu tăng trưởng liên tục từ 2013–2015) cho thấy các phương thức quản lý lỗi truyền thống bộc lộ nhiều lỗ hổng lớn:

Tiêu chí Quản lý thủ công (Excel / Word / Chat) Hệ thống quản lý tập trung (Redmine)
Tính toàn vẹn dữ liệu Dễ trùng lặp, ghi đè, mất file đính kèm Lưu trữ tập trung trên CSDL MySQL, có versioning
Theo dõi trạng thái Không có workflow rõ ràng, phụ thuộc trí nhớ Trạng thái tường minh: New, In Progress, Resolved, Feedback, Closed
Thông báo & Cảnh báo Thủ công qua email rời rạc hoặc trao đổi miệng Tự động gửi Email notification và cập nhật Activity feeds
Báo cáo & Giám sát Tổng hợp báo cáo tốn 4-8 giờ/tuần Biểu đồ Gantt, Calendar, thống kê Issue tự động theo thời gian thực
Bảo mật & Phân quyền Khó giới hạn quyền xem giữa các dự án Phân quyền chi tiết theo Role, Tracker, Module
                So sánh các công cụ Bug Tracking trên thị trường

Ma trận ưu tiên yêu cầu người dùng (MoSCoW)

  • Must have (Bắt buộc phải có): Tạo/Sửa/Đóng Bug (Issue Tracking), gán người xử lý (Assignee), đặt độ ưu tiên (Priority), đính kèm log/ảnh lỗi, phân quyền người dùng (RBAC), theo dõi Activity log.
  • Should have (Nên có): Biểu đồ Gantt, Lịch trình (Calendar), Quản lý tài liệu (Documents), Không gian Wiki dự án, Email Notification.
  • Could have (Có thể có): Tích hợp kho mã nguồn Git/SVN, Quản lý thời gian thực tế (Time tracking / Spent time).
  • Won't have (Chưa ưu tiên): Tự động hóa CI/CD pipeline, Tích hợp cổng thanh toán trực tiếp trên hệ thống issue.

Thiết kế hệ thống

Hệ thống quản lý bug được xây dựng theo kiến trúc đa tầng (3-Tier Architecture) dựa trên mô hình MVC (Model-View-Controller) của framework Ruby on Rails.

graph TD
    subgraph Client Tier
        UI_Web["Web Browser (Chrome, Firefox, Safari)"]
    end

    subgraph Application Tier
        WebServer["Web Server (Webrick / Apache / Nginx)"]
        RailsEngine["Ruby on Rails Core Engine (MVC Router & Controllers)"]
        Modules["Redmine Modules (Issues, Gantt, Wiki, RBAC, TimeTracking)"]
        ImgProc["ImageMagick (Thumbnail & Image Processing)"]
    end

    subgraph Data Tier
        MySQL[("MySQL Database Server\n(Character Set: UTF-8)")]
        FileStorage[("Local File Storage\n(Attachments, Documents)")]
    end

    UI_Web <-->|HTTP / HTTPS Port 3000 / 80| WebServer
    WebServer <--> RailsEngine
    RailsEngine <--> Modules
    Modules <--> ImgProc
    RailsEngine <-->|ActiveRecord ORM| MySQL
    RailsEngine <-->|File I/O Stream| FileStorage

Technology Stack & Chi tiết phiên bản

  • Ngôn ngữ & Framework: Ruby (v1.9.3 / v2.x) thông qua bộ đóng gói RailsInstaller, Ruby on Rails Framework.
  • Quản lý gói phụ thuộc: Bundler Gem.
  • Hệ quản trị CSDL: MySQL Server 5.x (Engine: InnoDB, Bảng mã: utf8_general_ci).
  • Thư viện xử lý hình ảnh: ImageMagick (hỗ trợ preview ảnh chụp màn hình bug và xuất biểu đồ Gantt/PDF).
  • Web/Application Server: Webrick (Development/Staging) / Phusion Passenger (Production).
  • Hệ điều hành triển khai: Hỗ trợ đa nền tảng (Microsoft Windows Server / Linux Ubuntu 16.04+ LTS).

Cấu trúc lược đồ dữ liệu trọng tâm (Database Schema)

Các thực thể chính trong CSDL của hệ thống bao gồm:

  • users: Quản lý thông tin tài khoản, mật khẩu băm (hashed password), email, họ tên, trạng thái kích hoạt.
  • projects: Lưu trữ danh mục các dự án, định danh URL (identifier), mô tả và trạng thái công khai.
  • issues: Thực thể trọng tâm quản lý bug, bao gồm các trường: tracker_id, project_id, subject, description, status_id, assigned_to_id, priority_id, start_date, due_date, done_ratio.
  • issue_statuses: Quản lý danh mục trạng thái lỗi (New, In Progress, Resolved, Feedback, Closed, Rejected).
  • trackers: Định nghĩa phân loại công việc (Bug, Feature, Support, Task).
  • roles & members: Quản lý quyền hạn và ma trận vai trò theo từng dự án cụ thể.

Thiết kế bảo mật & Hiệu năng

  • Bảo mật phiên làm việc: Sử dụng Rake Secret Token generation (rake generate_secret_token) để mã hóa Cookie Session, ngăn chặn tấn công giả mạo Session Hijacking và CSRF.
  • Hiệu năng: Tối ưu hóa truy vấn cơ sở dữ liệu qua ActiveRecord, chỉ mục hóa (Indexing) các khóa ngoại trên bảng issues (project_id, status_id, assigned_to_id), đảm bảo thời gian tải trang trung bình dưới 500ms đối với kho dữ liệu >10,000 issues.

Phương pháp luận (Methodology)

Đề tài áp dụng quy trình ứng dụng hệ thống phần mềm 7 bước tiêu chuẩn trong doanh nghiệp:

  1. Lập kế hoạch kiểm thử đa tầng: Kết hợp linh hoạt giữa phương pháp Kiểm thử hộp đen (Black-box Testing) để đánh giá chức năng/giao diện người dùng và Kiểm thử hộp trắng (White-box Testing) trong quá trình Unit Test của lập trình viên.
  2. Kế hoạch quản lý rủi ro:
    • Rủi ro tương thích driver CSDL: Giải quyết bằng việc bổ sung thư viện libmysql.dll chuẩn từ gói mysql-connector-c.
    • Rủi ro người dùng ngại thay đổi thói quen: Tổ chức đào tạo trực quan, xây dựng tài liệu Wiki ngay trên hệ thống Redmine để hướng dẫn thao tác ghi nhận Issue chuẩn.

Implementation và kết quả

Quy trình cài đặt và cấu hình kỹ thuật

Quá trình thiết lập hệ thống được thực hiện chi tiết thông qua các lệnh terminal và tệp cấu hình tham số:

1. Khởi tạo Cơ sở dữ liệu MySQL

Thiết lập người dùng chuyên biệt và bảng mã UTF-8 để hỗ trợ xử lý tiếng Việt hoàn chỉnh:

CREATE DATABASE redmine CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'NoDoSecretPassword2017';
GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
FLUSH PRIVILEGES;

2. Cấu hình kết nối ứng dụng (config/database.yml)

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "NoDoSecretPassword2017"
  encoding: utf8
  reconnect: true

3. Cài đặt các gói Gem và xử lý biến môi trường ImageMagick

# Gán đường dẫn Header và Library cho bộ xử lý ảnh ImageMagick
set CPATH=C:\ImageMagick\include
set LIBRARY_PATH=C:\ImageMagick\lib

# Cài đặt trình quản lý Bundler và cài đặt toàn bộ phụ thuộc
gem install bundler
bundle install --without development test

4. Sinh khóa bảo mật, Migration dữ liệu và nạp cấu hình mặc định

# 1. Tạo session token bảo mật
rake generate_secret_token

# 2. Khởi tạo cấu trúc bảng trong CSDL
set RAILS_ENV=production
rake db:migrate

# 3. Nạp bộ dữ liệu thiết lập chuẩn (Ngôn ngữ: Tiếng Việt / Tiếng Anh)
set REDMINE_LANG=en
rake redmine:load_default_data

# 4. Khởi chạy máy chủ dịch vụ
ruby script/rails server webrick -e production -p 3000

======================================================================
=> Booting WEBrick
=> Rails 3.x application starting in production on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[INFO] WEBrick::HTTPServer#start: pid=4218 port=3000
======================================================================

Triển khai chức năng quản lý Bug (Issue Tracking Workflow)

Một chu trình quản lý vòng đời lỗi hoàn chỉnh được thiết lập trên Redmine tại NoDo bao gồm các thuộc tính kỹ thuật chi tiết:

                  Vòng đời xử lý Bug (Bug Life Cycle State Machine)
  (Reject)                                (Fix Done)
  (Reopen)                        (Failed)       (Passed)
                                                 [Closed]
  • Tracker (Bộ theo dõi): Phân loại rõ Bug (Lỗi phần mềm), Feature (Tính năng mới), Support (Hỗ trợ kỹ thuật).
  • Priority (Mức độ ưu tiên): Low, Normal, High, Urgent, Immediate.
  • Fields (Thuộc tính chi tiết):
    • Subject: Tóm tắt lỗi súc tích.
    • Description: Các bước tái hiện lỗi (Steps to reproduce), kết quả thực tế (Actual result), kết quả mong muốn (Expected result).
    • Target version: Phiên bản phần mềm dự kiến bàn giao bản vá.
    • Estimated time / Spent time: Đo lường chi phí thời gian thực hiện.

Kết quả thử nghiệm và đánh giá hệ thống

Hệ thống được đưa vào vận hành thử nghiệm trên 3 dự án trọng điểm của NoDo: Dự án Cổng thanh toán (Payment Gateway), Dự án Nâng cấp Hệ thống ERP Odoo và Dự án Game Portal.

       Bảng đo lường hiệu quả vận hành trước và sau khi triển khai Redmine
  • Đánh giá UAT (User Acceptance Testing): 10/10 cán bộ nhân viên tham gia khảo sát đánh giá cao giao diện theo dõi công việc cá nhân (My Page), khả năng cập nhật trạng thái lỗi dạng kéo thả trực quan và biểu đồ Gantt Chart tự động cập nhật theo tiến độ công việc.

Đổi mới và đóng góp

  1. Chuẩn hóa luồng thông tin kiểm thử: Xóa bỏ hoàn toàn việc trao đổi lỗi phân tán qua Word/Excel/nói miệng. Thiết lập quy chuẩn nhập liệu lỗi thống nhất, giúp lập trình viên nắm bắt ngay điều kiện phát sinh lỗi mà không cần gặp trực tiếp Tester để tái hiện.
  2. Tối ưu hóa chi phí đầu tư CNTT: Thay vì đầu tư hàng ngàn USD mỗi năm cho các giải pháp SaaS thương mại như Jira ($10/user/tháng, ước tính ~5,400 USD/năm cho quy mô công ty), việc tự chủ triển khai Redmine trên máy chủ nội bộ giúp doanh nghiệp tiết kiệm 100% chi phí bản quyền trong khi vẫn đáp ứng 95% nhu cầu quản trị chuyên sâu.
  3. Minh bạch hóa năng suất lao động: Ban Giám đốc và các Trưởng bộ phận theo dõi trực tiếp khối lượng công việc, tỷ lệ hoàn thành (% Done) và thời gian xử lý bug của từng nhân viên thông qua hệ thống báo cáo ActivityTime Tracking.
  4. Đóng góp học thuật và thực tiễn: Cung cấp tài liệu hướng dẫn kỹ thuật chi tiết từ cấu hình môi trường Ruby on Rails trên Windows Server, khắc phục lỗi liên kết thư viện nhị phân C (libmysql.dll), đến các bước thiết lập phân quyền dự án thực tế tại doanh nghiệp vừa và nhỏ ngành CNTT tại Việt Nam.

Ứng dụng thực tế và triển khai

Yêu cầu cấu hình hệ thống triển khai (System Requirements)

                            Yêu cầu hạ tầng máy chủ

Quy trình luân chuyển công việc thực tế (Real-world Scenario)

[Khách hàng phát hiện lỗi / Tester Testcase]
      (Đạt yêu cầu)         (Không đạt)
   [Chuyển: Closed]     [Chuyển: Feedback]

Phân tích hiệu quả đầu tư (Cost-Benefit & ROI Analysis)

  • Chi phí đầu tư ban đầu: 0 VNĐ chi phí bản quyền phần mềm; chi phí nhân sự triển khai và cấu hình: tận dụng nguồn lực nội bộ trong 2 tuần làm việc.
  • Lợi ích tài chính định lượng: Giảm thiểu 15-20 giờ làm việc lãng phí mỗi tuần trên toàn bộ 45 nhân sự nhờ việc loại bỏ các cuộc họp báo cáo tiến độ thủ công và thời gian chờ làm rõ mô tả bug.
  • Thời gian hoàn vốn (Payback Period): Đạt điểm hòa vốn và sinh lời về mặt năng suất chỉ sau 01 tháng vận hành chính thức.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Môi trường Web Server: Phiên bản thử nghiệm sử dụng máy chủ đơn luồng Webrick, phù hợp cho môi trường nội bộ nhỏ nhưng chưa tối ưu cho tải đồng thời cực lớn (>500 requests/giây).
  • Giao diện di động (Mobile Responsive): Giao diện mặc định của phiên bản Redmine truyền thống chưa tối ưu hoàn hảo cho trải nghiệm trên màn hình điện thoại thông minh.
  • Tự động hóa: Chưa tích hợp trực tiếp webhook với các công cụ giao tiếp nhanh (Slack, Telegram, Microsoft Teams) và hệ thống kiểm thử tự động (Selenium, Appium).

Hướng phát triển trong tương lai

  1. Container hóa hạ tầng (Dockerization): Đóng gói toàn bộ hệ thống Redmine, MySQL và Nginx thành các Docker Container giúp tự động hóa quá trình sao lưu, phục hồi và mở rộng linh hoạt.
  2. Nâng cấp Application Server: Chuyển đổi từ Webrick sang kiến trúc Nginx + Unicorn/Puma chạy trên nền tảng Linux Ubuntu Server để tăng khả năng chịu tải gấp 10 lần.
  3. Tích hợp hệ sinh thái CI/CD: Kết nối Redmine REST API với GitHub/GitLab Actions và Jenkins để tự động đóng Bug khi commit log chứa cú pháp #fixes issue_id.
  4. Cài đặt Plugin mở rộng: Bổ sung các plugin quản lý Agile/Scrum Board (Redmine Agile Plugin) và thông báo qua bot Telegram/Zalo công ty.

Đối tượng hưởng lợi

  • Sinh viên chuyên ngành Hệ thống thông tin & CNTT: Tiếp cận tài liệu tham khảo hoàn chỉnh về phương pháp luận phân tích thực trạng doanh nghiệp, cách đánh giá phần mềm và quy trình triển khai giải pháp mã nguồn mở vào thực tế sản xuất.
  • Kỹ sư kiểm thử (QA/QC Testers): Sở hữu công cụ ghi nhận lỗi trực quan, theo dõi trạng thái re-test dễ dàng, nâng cao độ chính xác của báo cáo chất lượng phần mềm.
  • Lập trình viên (Developers): Nhận thông tin mô tả lỗi đầy đủ kèm log, ảnh chụp và độ ưu tiên rõ ràng; không còn tình trạng tranh cãi về việc tái hiện lỗi.
  • Nhà quản lý & Doanh nghiệp phần mềm (PMs & SMEs): Có được một mô hình mẫu về việc số hóa quản trị dự án và quản lý lỗi với chi phí tối thiểu nhưng mang lại hiệu suất tối đa.

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

1. Cấu hình máy chủ tối thiểu để triển khai Redmine cho doanh nghiệp là gì?

Hệ thống yêu cầu máy chủ có tối thiểu CPU 2 Cores, 4GB RAM và 50GB ổ cứng trống. Redmine có thể hoạt động mượt mà trên cả hệ điều hành Windows Server lẫn các bản phân phối Linux như Ubuntu, CentOS hoặc Debian.

2. Redmine có khả năng mở rộng (Scalability) khi doanh nghiệp tăng quy mô nhân sự không?

Hoàn toàn có thể. Nhờ kiến trúc mô-đun của Ruby on Rails và khả năng phân tách Database Server riêng biệt, Redmine có thể nâng cấp từ mô hình máy chủ đơn lẻ lên cụm cân bằng tải (Load Balancing) kết hợp Redis Cache, đáp ứng tốt quy mô từ hàng trăm đến hàng ngàn người dùng đồng thời.

3. Làm thế nào để tích hợp Redmine với các hệ thống quản lý mã nguồn có sẵn?

Redmine hỗ trợ tích hợp sẵn với Git, SVN, Mercurial và CVS. Quản trị viên chỉ cần khai báo đường dẫn kho mã nguồn trong mục Settings -> Repositories của dự án. Lập trình viên khi commit code chỉ cần thêm cú pháp refs #123 hoặc fixes #123 để tự động liên kết commit với Issue tương ứng.

4. Chi phí bảo trì và hỗ trợ định kỳ cho hệ thống Redmine là bao nhiêu?

Vì Redmine là phần mềm mã nguồn mở hoàn toàn miễn phí theo giấy phép GNU GPL v2, doanh nghiệp không phải trả bất kỳ khoản phí cấp phép nào. Chi phí vận hành chỉ bao gồm tiền điện/mạng cho máy chủ nội bộ hoặc chi phí thuê Cloud VPS (khoảng 200,000 - 500,000 VNĐ/tháng).

5. Dữ liệu trên Redmine có thể sao lưu và khôi phục khi gặp sự cố phần cứng như thế nào?

Quy trình sao lưu cực kỳ đơn giản với 2 thành phần: Dump cơ sở dữ liệu MySQL thông qua lệnh mysqldump -u redmine -p redmine > backup.sql và sao lưu thư mục tệp đính kèm files/. Quá trình này có thể thiết lập chạy tự động hàng ngày bằng Cron Job (Linux) hoặc Task Scheduler (Windows).


Kết luận

Đề tài "Ứng dụng hệ thống quản lý bug trong quy trình kiểm thử phần mềm tại Công ty Cổ phần Truyền thông và Dịch vụ NoDo" đã giải quyết trọn vẹn bài toán thực tế cấp bách của doanh nghiệp. Bằng việc chuyển đổi từ phương thức quản lý lỗi thủ công, rời rạc sang hệ thống quản lý tập trung trên nền tảng Redmine, công ty đã chuẩn hóa thành công quy trình kiểm thử, minh bạch hóa luồng thông tin và cắt giảm 75% tỷ lệ trễ hạn bàn giao dự án.

Giải pháp không chỉ chứng minh tính đúng đắn về mặt lý luận công nghệ thông tin quản lý mà còn mang lại giá trị kinh tế trực tiếp thông qua việc tối ưu hóa chi phí đầu tư công nghệ, nâng cao năng suất phối hợp giữa các bộ phận Lập trình - Kiểm thử - Thiết kế. Đây là mô hình kiểu mẫu có tính ứng dụng thực tiễn cao, sẵn sàng chuyển giao và nhân rộng cho các doanh nghiệp phần mềm vừa và nhỏ tại Việt Nam.