Nhóm phát triển của chúng tôi đã sử dụng chiến lược phân nhánh GitFlow và nó thật tuyệt!
Gần đây, chúng tôi đã tuyển dụng một vài người thử nghiệm để cải thiện chất lượng phần mềm của chúng tôi. Ý tưởng là mọi tính năng nên được kiểm tra / QA bởi người kiểm tra.
Trước đây, các nhà phát triển làm việc trên các tính năng trên các nhánh tính năng riêng biệt và hợp nhất chúng trở lại develop
nhánh khi hoàn thành. Nhà phát triển sẽ tự kiểm tra công việc của mình trên feature
chi nhánh đó . Bây giờ với người kiểm tra, chúng tôi bắt đầu hỏi Câu hỏi này
Người kiểm tra nên thử nghiệm tính năng mới trên nhánh nào?
Rõ ràng, có hai lựa chọn:
- trên nhánh tính năng cá nhân
- trên
develop
cành
Thử nghiệm trên chi nhánh phát triển
Ban đầu, chúng tôi tin rằng đây là cách chắc chắn để đi vì:
- Tính năng này được thử nghiệm với tất cả các tính năng khác được hợp nhất với
develop
chi nhánh kể từ khi quá trình phát triển bắt đầu. - Bất kỳ xung đột có thể được phát hiện sớm hơn sau đó
- Nó làm cho công việc của người kiểm tra trở nên dễ dàng, anh ta chỉ giao dịch với một chi nhánh (
develop
) mọi lúc. Anh ta không cần hỏi nhà phát triển về chi nhánh nào dành cho tính năng nào (chi nhánh tính năng là các chi nhánh cá nhân được quản lý độc quyền và tự do bởi các nhà phát triển có liên quan)
Vấn đề lớn nhất với điều này là:
Các
develop
chi nhánh bị ô nhiễm với lỗi.Khi người kiểm tra tìm thấy lỗi hoặc xung đột, anh ta báo cáo lại cho nhà phát triển, người đã khắc phục sự cố trên nhánh phát triển (nhánh tính năng đã bị hủy bỏ sau khi sáp nhập) và sau đó có thể có nhiều sửa chữa hơn. Nhiều lần cam kết hoặc hợp nhất (nếu một nhánh được tạo lại từ
develop
nhánh một lần nữa để sửa lỗi) khiến việc khôi phục tính năng từdevelop
nhánh trở nên rất khó khăn nếu có thể. Có nhiều tính năng hợp nhất và được cố định trêndevelop
nhánh tại các thời điểm khác nhau. Điều này tạo ra một vấn đề lớn khi chúng tôi muốn tạo một bản phát hành chỉ với một số tính năng trongdevelop
nhánh
Kiểm tra trên nhánh tính năng
Vì vậy, chúng tôi đã suy nghĩ lại và quyết định chúng tôi nên thử nghiệm các tính năng trên các nhánh tính năng. Trước khi kiểm tra, chúng tôi hợp nhất các thay đổi từ develop
nhánh sang nhánh tính năng (bắt kịp với develop
nhánh). Điều này là tốt:
- Bạn vẫn kiểm tra tính năng này với các tính năng khác trong dòng chính
- Phát triển hơn nữa (ví dụ sửa lỗi, giải quyết xung đột) sẽ không gây ô nhiễm cho
develop
chi nhánh; - Bạn có thể dễ dàng quyết định không phát hành tính năng này cho đến khi nó được kiểm tra và phê duyệt đầy đủ;
Tuy nhiên, có một số nhược điểm
- Người kiểm tra phải thực hiện việc hợp nhất mã và nếu có bất kỳ xung đột nào (rất có thể), anh ta phải yêu cầu nhà phát triển giúp đỡ. Người kiểm tra của chúng tôi chuyên kiểm tra và không có khả năng mã hóa.
- một tính năng có thể được kiểm tra mà không có sự tồn tại của một tính năng mới khác. ví dụ: Tính năng A và B đều đang được thử nghiệm cùng một lúc, hai tính năng này không biết về nhau vì cả hai tính năng này chưa được hợp nhất với
develop
chi nhánh. Điều này có nghĩa là bạn sẽ phải kiểm tra lạidevelop
chi nhánh một lần nữa khi cả hai tính năng được hợp nhất với nhánh phát triển. Và bạn phải nhớ kiểm tra điều này trong tương lai. - Nếu Tính năng A và B đều được kiểm tra và phê duyệt, nhưng khi sáp nhập được xác định, cả hai nhà phát triển cho cả hai tính năng đều tin rằng đó không phải là lỗi / công việc của riêng mình vì nhánh tính năng của anh ta vượt qua thử nghiệm. Có một chi phí phụ trong giao tiếp, và đôi khi bất cứ ai giải quyết xung đột đều cảm thấy thất vọng.
Trên đây là câu chuyện của chúng tôi. Với nguồn lực hạn chế, tôi muốn tránh thử nghiệm mọi thứ ở mọi nơi. Chúng tôi vẫn đang tìm kiếm một cách tốt hơn để đối phó với điều này. Tôi rất thích nghe cách các đội khác xử lý loại tình huống này.