• Tidak ada hasil yang ditemukan

CHƯƠNG 3: HỆ THỐNG TÍCH HỢP LIÊN TỤC

3.1. Hệ thống tích hợp liên tục (CI)

CHƯƠNG 3: HỆ THỐNG TÍCH HỢP LIÊN TỤC

Hiểu đơn giản, tích hợp liên tục gồm 4 bước

 Quản lý Mã nguồn

 Biên dịch mỗi khi có thay đổi

 Kiểm thử bản build mới

 Thông báo kết quả đến cho các lập trình viên

Hình 3.2. Quá trình tích hợp liên tục CI Dưới đây là một hệ thống tích hợp liên tục

Hình 3.3. Hệ thống tích hợp liên tục

 Các lập trình viên thực hiện các ticket và đẩy mã nguồn lên thư mục nơi sẽ lưu giữ mã nguồn của dự án.

 Hệ thống CI sẽ lắng nghe và thực hiện kéo mã nguồn về (server CI), build rồi kiểm thử mã nguồn.

 Trong trường hợp build, kiểm thử thất bại, các thành viên trong đội sẽ nhìn thấy ngay được lỗi phát sinh và các lập trình viên sẽ chịu trách nhiệm sửa lỗi và đẩy mã nguồn sửa lỗi đó lên nơi lưu trữ.

3.1.2. Áp dụng hệ thống tích hợp liên tục

 Quản lý Mã nguồn

 Tự động hóa quy trình build

 Quá trình build được thực hiện tự động bằng các đoạn script cài sẵn

 Thực hiện thường xuyên

 Tạo ra các script khác nhau để có thể chạy trên nhiều môi trường khác nhau

 Công cụ: Ant, Maven...

 Tạo bản build bao gồm kiểm thử

 Chèn các kiểm thử vào chương trình

 Nhận dạng Mã nguồn có khả năng phát sinh lỗi (kiểm thử mã nguồn)

 Công cụ: JUnit, HtmlUnit

 Cam kết những thay đổi mỗi ngày

 Lấy Mã nguồn về nơi lưu trữ (mainline)

 Mỗi khi mã nguồn có thay đổi sẽ build lại (mainline) thông qua build server

 Kiểm thử tự động

 Được thực hiện bằng các đoạn script viết sẵn

 Thực hiện sau khi build xong

 Thực hiện trong quá trình lập trình viên build trên máy của họ hoặc vào lúc CI server build mainline

 Báo cáo kết quả cho lập trình viên hoặc những thành viên liên quan 3.1.3. Lợi ích của việc tích hợp liên tục

 Giảm rủi ro tích hợp: làm việc trên các dự án có nghĩa là nhiều người đang làm việc trên các task riêng biệt hoặc các phần của mã nguồn. Càng nhiều người, sự tích hợp càng nguy hiểm. Tùy thuộc vào vấn đề thực sự tồi tệ như thế nào, việc sửa lỗi và giải quyết vấn đề có thể gây ra phiền phức và có nghĩa là có nhiều thay đổi đối với mã nguồn. Thực hiện tích hợp hàng ngày hoặc thậm chí thường xuyên hơn có thể giúp giảm thiểu các loại vấn đề này ở mức tối thiểu.

 Chất lượng mã nguồn cao hơn: Không cần phải lo lắng về các vấn đề xảy ra và tập trung nhiều hơn vào các tính năng của hệ thống giúp viết ra sản phẩm có chất lượng cao hơn.

 Mã nguồn trên version control luôn hoạt động: Nếu cam kết phần nào đó làm hỏng việc build, đội phát triển sản phẩm sẽ nhận ra điều này ngay lập tức, và vấn đề sẽ được giải quyết trước khi mã nguồn bị kéo lỗi về

 Giảm tranh luận gay gắt trong đội ngũ phát triển sản phẩm: Có một hệ thống khách quan tại chỗ giúp giảm tần suất cãi nhau giữa các thành viên

 Giúp thành viên kiểm thử giảm phiền phức: Có nhiều phiên bản và build của mã nguồn giúp chia cắt và tìm kiếm lỗi một cách hiệu quả, giúp công việc của đội kiểm thử dễ dàng hơn.

 Giảm thời gian triển khai: Triển khai dự án là một công việc rất nhàm chán và tốn thời gian, và việc tự động hoá quá trình này là rất cần thiết

 Tăng sự tự tin và tinh thần: công việc không hiệu quả nếu luôn thường trực nỗi sợ làm hỏng cái gì đó, và họ có xu hướng tạo ra kết quả tốt hơn và có thể tập trung năng lượng làm việc hơn nếu không phải lo lắng về những hậu quả có thể xảy ra từ hành động của họ.

Trên Github đã có rất nhiều công cụ CI như:

Circle CI

Jenkins

AppVeyor

CodeShip

Drone

Semaphore CI

Buildkite

Wercker

TeamCity

Hình 3.4. 10 hệ thống CI sử dụng với GitHub 3.1.4. Jenkins

Jenkins là một công cụ đại diện cho khái niệm CI (continuous integration).

Jenkins giúp việc tự động chạy các script. Nó xây dựng và kiểm tra phần mềm liên tục theo dõi việc thực hiện và tình trạng của các công việc từ xa, làm cho các thành viên và người dùng dễ dàng hơn để có được mã nguồn ổn định mới nhất.

Ta muốn cả bộ UT/test chạy mỗi ngày vào 9h sáng. Mỗi ngày nhóm trưởng đến kiểm tra dữ liệu lịch sử để biết có bao nhiêu kịch bản đang sai, bao nhiêu lỗi, quản lý theo từng ngày, ta hoàn toàn có thể dùng test framework + cronjob. Tuy nhiên Jenkins cung cấp 1 giao diện trực quan hơn, biểu đồ, báo cáo phần trăm, mã nguồn đang kiểm tra, v.v ... hoàn toàn tự động, có thể kết nối theo svn hoặc git. Jenkins cũng có rất nhiều plugin và hỗ trợ hầu hết các test framework.

Hình 3.5. Giao diện Jenkins

Trên đây là phần giới thiệu về kiểm thử phần mềm cũng nhưng tổng quan về các công cụ đã sử dụng trong luận văn. Tuy nhiên từ lý thuyết đi đến thực hành tác giả gặp nhiều khó khăn và thách thức trong phần cài đặt. Phần tiếp theo tác giả trình bày chi tiết về cách xây dựng framework cũng như đánh giá phần thực nghiệm tại công ty VIVAS.

CHƯƠNG 4: THỰC NGHIỆM KIỂM THỬ TỰ ĐỘNG TẠI CÔNG TY