Giải thích đơn giản về CI – Continuous Integration (Tích hợp liên tục)

Với các bạn sinh viên, khái niệm Continuous Integration (Tích hợp liên tục) là một cái gì đó nghe rất cao siêu và hoành tráng. Mình sẽ nêu khái niệm, sau đó đưa ra một câu chuyện đơn giản để giải thích cho khái niệm này.

Tích hợp liên tục (CI) là phương pháp phát triển phần mềm đòi hỏi các thành viên trong nhóm tích hợp công việc thường xuyên. Mỗi ngày, các thành viên đều phải theo dõi và phát triển công việc của họ ít nhất một lần. Việc này sẽ được một nhóm khác kiểm tra tự động, nhóm này sẽ tiến hành kiểm thử truy hồi để phát hiện lỗi nhanh nhất có thể. Cả nhóm thấy rằng phương pháp tiếp cận này giúp giảm bớt vấn đề về tích hợp hơn và cho phép phát triển phần mềm gắn kết nhanh hơn. Trích từ: http://www.ibm.com/developerworks/vn/library/rational/201301/continuous-integration-agile-development/

Nếu không hiểu ảnh nói gì, hãy đọc câu chuyện nho nhỏ phía dưới
Nếu không hiểu ảnh nói gì, hãy đọc câu chuyện nho nhỏ phía dưới

Ngày xửa ngày xưa, Nam còn là sinh viên ngành IT của trường B. Mỗi lần code, làm bài tập nhóm đối với Nam là một cực hình. Cả team ngồi phác thảo ra từng module nho nhỏ, sau đó chia ra, mạnh ai về nhà code. Cuối tuần, cả nhóm hẹn nhau ra quán cafe để “ráp code”, cóp các phần đã làm qua USB, bỏ vào một project chung. Mỗi lần “ráp code”, chương trình không build được, một núi lỗi xuất hiện, cả nhóm phải  hì hục mất nguyên buổi chiều để sửa. “Ráp code” trở thành một cơn ác mộng đối với Nam và các bạn trong nhóm.

Ra trường rồi đi làm, Nam đi phỏng vấn xin việc, được nhận vào công ty phần mềm C. Ở đây, mọi người đã biết dùng SVN nên không còn cảnh phải copy code qua lại nữa. Từ “ráp code” cũng biến mất mà thay vào đó là từ “tích hợp”. Tuy nhiên, team của Nam vẫn còn làm việc khá ẩu. Mỗi sáng, các thành viên trong team update code từ SVN/Git về, code say sưa, sau đó commit code lên trước khi về nhà.

Đôi khi code không build được, cả team lại nháo nhào “truy tìm thủ phạm”: anh Phạm Văn A sửa code mà quên commit file mới lên, chị Lê Thị B sửa connection string, … Đời nhiều khi còn trái ngang hơn, anh A sửa code, chị B sửa code làm phần của Nam chạy bị lỗi, thế là Nam lãnh đủ. Mỗi cuối tuần, cả team lại phải OT để tích hợp và sửa lỗi.

fail

Phần mềm không bán được vì quá nhiều lỗi, release chậm, công ty cũ phá sản, Nam phải đi tìm việc mới. Với khả năng của mình, Nam được nhận vào công ty C. Công ty này khá chuyên nghiệp, có áp dụng Agile, CI – tích hợp liên tục. Nhờ có CI, team của Nam hiện tại không còn gặp những rắc rối khi tích hợp:

  • Mỗi khi có người commit code, hệ thống CI sẽ tự lấy code từ SVN, thực hiện build. Hệ thống sẽ gửi mail thông báo cho toàn bộ thành viên nếu như build bị lỗi. Cả nhóm chỉ việc đọc mail, xem ai là người commit revision đó, và “nắm đầu” thủ phạm, bắt hắn sửa lỗi.
  • Project của Nam được viết Unit Test rất cẩn thận, đầy đủ. Khi anh A, chị B sửa code, commit lên, hệ thống sẽ build và chạy lại toàn bộ các Unit Test. Nếu có case nào bị fail, cả team sẽ nhận được thông báo, và anh A, chị B phải nhanh chóng fix code để các case này pass.
  • Việc tích hợp được diễn ra hàng ngày, nhiều lần trong ngày. Mỗi khi ai đó commit code làm hư build hoặc gây lỗi, cả team có thể giải quyết vấn đề NGAY LẬP TỨC. “Tích hợp” không còn là nỗi ác mộng mà trở thành chuyện thường ngày đối với Nam.

app1

Nói tóm lại, CI – tích hợp liên tục là phương pháp mà các team Agile sử dụng để đảm bảo code của toàn dự án luôn build được, luôn chạy đúng (Pass toàn bộ các test case). Hiện tại, hầu như các công ty phần mềm đều áp dụng CI, thông qua một số framework như: TFS, TeamCity, Hudson, Jenkin, Travis, … Tự trang bị cho mình những kiến thức về CI sẽ khiến bạn có giá hơn trong mắt nhà tuyển dụng nhé.

Nếu muốn hiểu chuyên sâu về Continous Integration và áp dụng, bạn nên xem một bài viết chi tiết. cụ thể về Continous Integration của Martin Folwer: http://www.martinfowler.com/articles/continuousIntegration.html. Ở bài tiếp theo, mình sẽ hướng dẫn các bạn cách áp dụng “tích hợp liên tục” vào project, thông qua Travis-CI và github.

11 thoughts on “Giải thích đơn giản về CI – Continuous Integration (Tích hợp liên tục)”

  1. Tuyệt vời, đọc định nghĩa chả hiểu mịa gì, đọc ví dụ cái hiểu ngay, thanks nhiều nhiều!

    Like

Leave a comment