CICD/CQM: Giải pháp toàn diện nâng cao chất lượng dự án

Giám đốc dự án cần đánh giá được tiến độ, chất lượng để có điều chỉnh kịp thời, nhà phát triển cần một hệ thống hỗ trợ coding, danh mục kiểm tra tự động, bộ phận kiểm định chất lượng cần một hệ thống theo dõi đủ sâu và dễ tiếp cận nhất có thể… Tất cả những vấn đề này đều có thể giải quyết triệt để với CI/CD.            

Tự động hóa sản xuất là một khái niệm không hề mới trong sản xuất công nghiệp nói chung và trong công nghệ phần mềm nói riêng, FPT Software vốn tự hào là Doanh nghiệp IT hàng đầu lại vẫn làm việc thủ công đến lạ lùng.

Hàng ngày các nhà phát tiển vẫn cần mẫn code và submit lên quản lí nguồn, khi cần thì lấy nguồn về chỉnh sửa để build được nguồn rồi cài cắm cho testers thực hiện kiểm thử. Đến khi trưởng bộ phận có hỏi về tình trạng dự án thế nào rồi, chất lượng code ra làm sao, dự  án có đảm bảo được hết danh mục của khách hàng không? Thì mọi thứ giống như một ma trận mà câu trả lời lúc nào cũng chỉ là: Tạm ổn anh, khả năng kịp tiến độ, chưa có vấn đề gì lạ. Nhưng thực chất thế nào thì thật khó nói. Trong khi người quản lí rất cần những báo cáo kịp thời (realtime) và chính xác về tình hình dự án, nhất là chất lượng dự án.

Vậy CICD/CQM là gì?

Mô hình CI/CD

CICD là viết tắt của The Continuous Integration & Continuous Deployment/ Continuous Delivery.

Continuous Integration (CI): Việc thường xuyên cập nhật kết quả mình làm được cùng với những thành viên khác sẽ thúc đẩy quá trình hoàn thành sản phẩm càng sớm càng tốt. Giúp kiểm soát tình hình thông qua các node chức năng (UT, CQM,…) khiến sản phẩm đạt sự ổn định với chất lượng tốt nhất có thể.

Continuous Deployment (CD): Là khái niệm có quan hệ rất mật thiết với Continuous Integration, Continuous Deployment giúp việc triển khai ứng dụng có thể được diễn ra trong bất cứ thời điểm nào và sau đó thậm chí là tự động cho ra một phiên bản mới trên môi trường test hoặc quá trình sản xuất nếu như bản build vượt qua được tất cả các nút trước đó. Với cách làm như vậy, nếu xảy ra lỗi trong quá trình build (Cam kết code không vượt qua các kiểm định về chất lượng (CQM) hoặc các trường hợp kiểm tra (UT, IT, ST) nhà phát triển sẽ có thể dễ dàng xác định được lỗi diễn ra ở đâu và qua đó giúp sửa lỗi một cách hiệu quả hơn.

Continuous Delivery: Tương tự như Continuous Deployment dự án có thể deploy ở bất cứ thời điểm nào. tuy nhiên điều này không có nghĩa là nó có thể đảm bảo ứng dụng có thể được deploy một cách an toàn trên môi trường production vì thông thường sẽ có sự khác biệt trong cách cấu hình ứng dụng giữa môi trường production và test do vậy nó sẽ dừng lại và không thực hiện deploy lên môi trường production.

Code Quality Management (CQM): Là một giải pháp do TQA xây dựng giúp cho việc kiểm soát chất lượng mã nguồn được tốt hơn bao gồm: phân tích code tĩnh, đo đếm nguồn, tìm kiếm lỗi bao gồm cả logic, bảo mật, vi phạm, đề xuất cải tiến chất lượng, hệ thống báo cáo chất lượng. CQM sử dụng kết hợp các công cụ mạnh mẽ và quy trình được xác định để giúp giảm chi phí bảo trì và đảm bảo rằng phần mềm có thể được sửa đổi trong khi vẫn giữ được hiệu quả lâu dài. CQM làm cho chất lượng mã nguồn có thể đo được, xác định các khu vực có nguy cơ và đề xuất các biện pháp để nâng cao chất lượng mã. Các chỉ số được lựa chọn và các phép đo dựa trên công cụ tự động hoặc bán tự động được thực hiện. Khi các chỉ số được đưa ra, cấp quản lý qua đó có cái nhìn tổng quan về chất lượng mã nguồn. Lập trình viên được cung cấp danh sách chi tiết thông tin xác định các lỗi hoặc vấn đề nguy hiểm trong mã nguồn.

Giải pháp CQM xây dựng bao gồm 3 tool :

Jenkins: Jenkins là một phần mềm tự động hóa, mã nguồn mở và viết bằng Java. Jenkins giúp tự động hóa các quy trình trong phát triển phần mềm, hiện nay được gọi theo thuật ngữ Tích hợp liên tục (CI) và còn được dùng đến trong việc Phân phối liên tục (CD). Jenkins là một phần mềm dạng máy chủ, chạy trên nền servlet với sự hỗ trợ của Apache Tomcat. Nó hỗ trợ hầu hết các phần mềm quản lý mã nguồn phổ biến hiện nay như Git, Subversion, Mercurial, ClearCase…Jenkins cũng hỗ trợ cả các mã lệnh của Shell và Windows Batch, đồng thời còn chạy được các mã lệnh của Apache Ant, Maven, Gradle… Phát hành theo giấy phép MIT nên Jenkins là phần mềm miễn phí.

Mô hình hoạt động của Jenkins

SonarQube: SonarQube là một nền tảng mã nguồn mở để kiểm tra chất lượng mã lập trình. Sonarqube giúp lập trình viên kiểm tra code của mình đã tốt chưa, nếu có bất kì lỗi nào vi phạm hay có nguy cơ vi phạm nguyên tắc (coding convention) thì nó sẽ giúp ta cảnh báo và đưa ra gợi ý để sửa trong vòng không quá 3 click chuột.

Sơ đồ kết hợp Sonar và Jenkins

Coverity: Coverity là một thương hiệu của các sản phẩm phát triển phần mềm từ Synopsys, bao gồm chủ yếu là phân tích mã lập trình. Các công cụ này cho phép các kỹ sư tìm ra lỗi và lỗ hổng bảo mật, logic code…trong mã nguồn được viết bằng C, C ++, Java, C #, JavaScript và một số ngôn ngữ khác.

Dashboard đầy đủ thông tin của CQM

CQM thống kê và báo cáo chi tiết những vấn đề sau :

  1. Thể hiện kiến trúc và thiết kế hệ thống thông qua cấp độ cây thư mục.
  2. Báo cáo số lượng code, file bị trùng lặp
  3. Báo cáo về tình hình kiểm tra đơn vị.
  4. Đánh giá độ phức tạp của hàm, lớp, file…
  5. Thể hiện những vấn đề trong code được chia theo cấp độ: blocker, critical, major…và ước lượng thời gian cần để giải quyết.
  6. Báo cáo số lượng tài liệu và bình luận trong code.
  7. Đánh giá chung chất lượng của dự án dựa vào phương pháp SQALE.
  8. Tính toán số lượng dòng code, số lượng hàm, files, thư mục…

Hiện nay giải pháp CICD/CQM đã và đang được triển khai rộng rãi trên phạm vi toàn FPT Software và nhận được sự hưởng ứng mạnh mẽ từ đơn vị sản xuất. Với những điểm mạnh như : chi phí triển khai rẻ, hỗ trợ quét mã code trong thời gian thực, báo cáo trực quan…CICD/CQM sẽ là một thành phần quan trọng giúp nâng cao toàn diện chất lượng dự án và góp phần giúp FPT Software dễ dàng hơn trên con đường chinh phục mục tiêu 1B2020.

Bùi Quang Hiếu – FPT Software

Leave a Reply

Your email address will not be published. Required fields are marked *