CI – Continuous Integration

Trong bài tìm hiểu này tôi muốn giới thiệu phương pháp để làm việc nhóm hiệu quả cho cả nhóm phát triển và nhóm kiểm thử. Phương pháp này cũng làm tăng hiệu quả làm việc của dự án chạy theo mô hình agile

I. Định nghĩa

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 1 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

Khi nhìn thấy một dự án phần mềm lớn bạn sẽ thấy rằng việc tích hợp là một quá trình lâu dài và khó lường. Nhưng lỗi tích hợp được tìm thấy nhanh chóng và được fix nhanh chóng.

Sự tương phản này không phải là kết quả của tool phức tạp và đắt tiền. Bản chất của nó ở chỗ tất cả mọi người trong team tích hợp thường xuyên, hàng ngày, điều khiển kho lưu trữ mã nguồn. Thực tế thường sẽ có những suy nghĩ “Không thể làm” hoặc “Làm nó cũng sẽ không tạo ra nhiều sự khác biêt”. Nhưng nếu bạn thử làm thì nó dễ dàng hơn rất nhiều, và có một sự khác biết rất lớn khi phát triển, bạn nên nghĩ “Chúng tôi có thể làm được – làm thế nào mà bạn có thể sống mà không có nó?”.

Mặc dù tích hợp liên tục là một thực tế mà không cần tool đặc biệt nào để deploy, nhưng nó thật sự hữu ích để sử dụng một máy chủ tích hợp liên tục.

Continuous integration testing

enabling-agility-with-continuous-integration-testing-16-638.jpg

Continuous integration process

Capture_1.PNG

Continuous testing

  • Bằng cách dựa vào quy trình, kiểm thử liên tục có thể được thực hiện
  • Nó là tốt nhất để lựa chọn tool kiểm thử liên tục dựa theo ngôn ngữ phát triển và ứng dụng
  • Tool sẽ dó lại sự thay đổi của code và tự động chạy kiểm thử sau khi biên dịch. Sau đó tool sẽ đưa ra feedback .

Why continuous testing

Capture_2.PNG

  • Tìm kiếm lỗi nhanh chóng
  • Tầm nhìn dự án tốt hơn
  • Giảm thiểu rủi ro
  • Phần mềm chức năng có giá trị mọi thời điểm
  • Dễ dàng theo dõi thuộc tính của ứng dụng

II. Tích hợp liên tục kết hợp với phát triển theo hướng kiểm thử phù hợp với phương pháp agile

image001.gif

Hầu hết chúng ta đã nghe qua về phương pháp agile. Chúng mang đến cho việc phát triển phần mềm như thay đổi cách thức tổ chức công việc, thích ứng với các yêu cầu luôn thay đổi và cách thức phát hành phần mềm.

Tích hợp liên tục được tạo ra cho quy trình phát triển agile, vì vậy các tiếp cần phương pháp này là chủ đề cho bất kỳ cuộc thảo luận nào về tích hợp liên tục. Nó tổ chức việc phát triển theocacs nhóm chức năng của người dùng. Những nhóm chức năng này được chia thành các nhóm hay các phần công việc nhỏ.

Ý tưởng là không cố gắng giải quyết tất cả các vấn đề ngay từ đầu, mà tập trung vào những gì bạn đã biết. Nhóm phát triển DEV, Desgin, Tester sẽ thực hiện những gì họ viết về các chức năng mong muốn. Điều này tạo ra một sản phẩm làm việc dựa trên tập hợp con các yêu cầu của sản phẩm hoàn chỉnh. Sau đó nhóm sẽ làm việc tiếp với các yêu cầu có độ ưu tiên cao tiếp theo và cứ thế quá trình được lặp lại.

Tuy nhìn thì đơn giản và quy trình này cũng có nhiều biến thể khác nhai, nhưng có một điều cốt lõi là: Từng bước xây dựng sản phẩm và dần dần cải thiện trong quá trình xây dựng

Điều này dẫn đến thành công của quá trình tích hợp liên tục. Ý tưởng tích hợp liên tục là để tìm ra các vấn đề một cách nhanh chóng. Với phương pháp phát triển theo hướng kiểm thử,bạn xây dựng bài kiểm thử và sau đó phát triển chức năng cho đến khi code vượt qua được bài kiểm thử đó. Khi có những bổ sung, bạn có thể thêm đoạn kiểm thử mới vào.

Quản lý chất lượng

Quản lý chất lượng là phương pháp phát triển vòng đời để đảm bảo rằng tất cả các yêu cầu cho sản phẩm của bạn đã được kiểm tra. Nỗ lực này cần được tổ chức và hiểu đúng để các bài kiểm tra chính xác có thể được cập nhật khi các yêu cầu thay đổi. Quản lý chất lượng giúp các nhà quản lý trả lời những câu hỏi sau:

  • Nếu sản phẩm được phát hành vào tuần tới, phần nào sẽ có nguy cơ cao nhất?
  • Chúng ta có thể phát hành mà không có yêu cầu ở mức thấp hơn?
  • Đây có phải là bản phát hành có chất lượng cao hay không?

Với phương pháp phát triển theo hướng kiểm thử, việc kiểm thử trở thành vấn đề với nỗ lực phát triển. Theo phương pháp phát triển theo hương kiểm thử, bạn viết bài kiểm thử dựa trên yêu cầu, sau đó code vượt qua bài kiểm thử đó. Điều đó đảm bảo rằng chức năng hoạt động đúng và không có chức năng bổ sung nào được tạo ra, dù chức năng bổ sung là một ý tưởng hay nhưng ý tưởng đó không có trong yêu cầu thì việc thêm vào sẽ làm mất thời gian và có thể bị trễ dự án, có thể khiến khách hàng không hài lòng.

Tự động hóa kiểm thử

Khi bạn thực hiện quá trình build nhiều lần, hay add thêm chức năng mới, hoặc thay đổi chức năng cũ mà có liên quan tới nhiều phần khác, thì sẽ có yêu cầu kiểm thử lại các chức năng đã và đang làm việc. Đó là regression testing – kiểm thử truy hồi. Nó đảm bảo các đoạn code kiểm thử trước không bị lỗi khi thêm chức năng mới vào.

Với phương pháp tich hợp liên tục, kiểm thử truy hồi tự động được viết thành kịch bản lệnh để chạy ở bước cuối cùng của mỗi lần build. Điều này cho pháp các nhà phát triển có được các thông tin phản hồi ngay lập tức về các lỗi được tìm thấy trong lần build mới. Đội phát triển sẽ biết được rằng chức năng hộ mới tạo ra có làm việc đúng với yêu cầu hay không, có ảnh hưởng nghiêm trọng tới các chức năng khác hay không.

Dự án phát triển theo quy trình nước truyển thống có thể pass mà không thực hiện bất kỳ việc kiểm thử tự động nào. Dự án có thể được mô tả xây dựng và sau đó được kiểm thử không ngứng bởi rất nhiều người. Nhưng khi sản phẩm phát hành một cách thường xuyên thì lúc này vấn đề sẽ phát sinh vì bạn không thể kiểm thử thủ công các hệ thống đang được build nhiều lần trong một ngày.

III. Các loại dự án hưởng lợi từ tích hợp liên tục

  • Nhóm phát triển có ít hơn 50 người làm việc trên các dự án có độ phức tạp không cao
  • Sản phẩm có sử dụng phầm mềm nhúng. Ex: Chiếc xe mới tự vào chỗ đỗ xe, cảnh báo an toàn,…

Với nhu cầu gia tăng độ phức tạp đồng thời các sản phẩm phải được sản xuất nhanh để đáp ứng cho thị trường. Và việc phát triển của phần mềm nhúng kết hợp với yêu cầu thời gian chặt chẽ hơn đã mang lại sự lựa chọn cho các nhà phát triển về tích hợp liên tục và phương pháp agile

IV. Kết luận

CI giúp các nhóm làm việc hiệu quả hơn. Các nhóm này có thể có chức năng liên quan làm việc cùng nhau. Họ có thể làm việc ở những nơi khác nhau, bởi vì công việc tích hợp không ngừng sẽ đảm bảo rằng bạn không đi lệch các thiết kế. Nó giải quyết vấn đề sớm mà các nhóm phát triển theo phương pháp agile có thể đã trải qua nếu không tích hợp liên tục.

Nguồn tham khảo http://www.martinfowler.com/articles/continuousIntegration.html
https://www.ibm.com/developerworks/vn/library/rational/201301/continuous-integration-agile-development/
http://www.slideshare.net/cygnetinfotech/continous-integration-testing-fundamentals