T?I SAO NêN áP D?NG TRUNK BASED DEVELOPMENT THAY Vì FEATURE BRANCHING?

T?I SAO NêN áP D?NG TRUNK BASED DEVELOPMENT THAY Vì FEATURE BRANCHING?

Trong quy trình phát tri?n ph?n m?m, vi?c gi?m thi?u th?i gian phát tri?n s?n ph?m và tri?n khai theo t?ng module nh? là r?t quan tr?ng và giúp ti?t ki?m chi phí ?áng k?. Theo m? hình Pyramid, chúng ta có th? vi?t Unit test và Integration test nhi?u h?n thay vì ch? d?a vào Manual test ?? ti?t ki?m chi phí. Vi?c tích h?p CI/CD vào quy trình phát tri?n c?ng giúp gi?m ?áng k? th?i gian tri?n khai s?n ph?m. Tuy nhiên, còn nh?ng cách nào khác có th? giúp ti?t ki?m th?i gian trong quá trình phát tri?n ph?n m?m?

H?m nay, mình s? th?o lu?n v? h??ng phát tri?n ph?n m?m là Trunk Based Development. V?y Trunk Based Development là gì? Cách th?c ho?t ??ng c?a nó ra sao? Nó giúp gi?m th?i gian phát tri?n s?n ph?m nh? th? nào? Và quan tr?ng nh?t, làm th? nào ?? gi?m thi?u r?i ro khi áp d?ng ph??ng pháp này? Chúng ta s? cùng tìm hi?u nh?ng v?n ?? này trong bài vi?t này nhé.

1. Feature Branching và nh?ng h?n ch?


Feature Branching

Trong quá trình làm vi?c t?i nhi?u c?ng ty, mình ?? th?y h?u h?t ??u áp d?ng ph??ng pháp "Feature Branching". Theo ph??ng pháp này, chúng ta b?t ??u v?i nhánh chính là "master" và t? ?ó t?o ra nhánh "develop". T? nhánh develop, chúng ta ti?p t?c t?o ra các nhánh feature ?? phát tri?n các ch?c n?ng c? th?. M?i nhánh feature có th? ???c chia thành các nhánh nh? h?n ?? x? ly t?ng ph?n c?ng vi?c. Khi các ch?c n?ng hoàn t?t, m? ngu?n t? các nhánh feature s? ???c g?p vào nhánh release, r?i t? ?ó g?p vào nhánh master.

Chúng ta có th? hình dung nh? m?t tán cay, n?u m?t d? án ?? l?n ví d? nh? t?m kho?ng 10 team, m?i team có t?m 5 feature ?? develop thì tán cay này s? nh? th? nào?


áp d?ng feature branching v?i d? án th?c t?

Khi m?t developer hoàn thành m?t tính n?ng và mu?n g?p vào nhánh chính, h? s? ph?i t?o m?t pull request. Pull request này s? ???c các developer khác xem xét và ?ánh giá tr??c khi có th? ???c h?p nh?t vào nhánh chính. Quá trình này có th? m?t t? 1 ??n 2 ngày, vì th??ng c?n có nh?ng ng??i hi?u r? v? nghi?p v? ho?c có trình ?? cao h?n ?? phê duy?t. H?n n?a, developer ph? trách tính n?ng có th? ph?i th?c hi?n ch?nh s?a theo ph?n h?i và ??i thêm th?i gian ?? pull request ???c xem xét l?i. T?t c? nh?ng y?u t? này có th? kéo dài ?áng k? th?i gian hoàn thành m?t tính n?ng.

Vi?c merge nhánh release vào master, ??c bi?t khi ?? ch?a hàng tr?m tính n?ng m?i, có th? t?o ra r?i ro r?t l?n. Khi hàng lo?t m? ngu?n t? các nhánh feature khác nhau ???c k?t h?p, nguy c? x?y ra xung ??t m? là r?t cao, khi?n cho vi?c x? ly tr? nên ph?c t?p h?n. Tình tr?ng này có th? d?n ??n hàng tr?m l?i và các l?i ti?m ?n, ?nh h??ng ??n các ch?c n?ng hi?n có và gay thi?t h?i nghiêm tr?ng cho khách hàng. Nh?ng r?i ro này kh?ng ch? làm t?ng kh?i l??ng c?ng vi?c c?n ph?i x? ly mà còn có th? ?nh h??ng l?n ??n ch?t l??ng s?n ph?m.

V?y làm sao ?? gi?i quy?t v?n ?? này? Trunk based development có th? xem là m?t gi?i pháp trong tr??ng h?p này.

2. Trunk based development là gì?


Trunk Based Development (TBD) là m?t ph??ng pháp phát tri?n ph?n m?m trong ?ó t?t c? các nhà phát tri?n liên t?c tích h?p m? ngu?n c?a h? vào m?t nhánh chính duy nh?t, th??ng ???c g?i là "trunk" ho?c "main". ?ay là m?t cách ti?p c?n ?? gi?m thi?u s? ph?c t?p và t?ng c??ng tính ?n ??nh c?a h? th?ng b?ng cách h?n ch? s? l??ng nhánh và th??ng xuyên tích h?p các thay ??i nh?.

Theo https://trunkbaseddevelopment.com/, v?i nh?ng d? án l?n, chúng ta s? t?o ra nh?ng short-lived feature branches, m?t ng??i làm tên m?t nhánh trong m?t vài ngày tr??c khi merge vào nhánh Trunk hay master.

V?i nh?ng d? án nh? h?n, m?i commiter s? commit tr?c ti?p vào nhánh Trunk hay master. V?i cách này, chúng ta s? commit nh?ng m?nh nh? t?ng ít m?t, h?n ch? merge m?t nhánh l?n s? gi?m thi?u r?i ro xung ??t m? ngu?n, ??ng th?i ti?t ki?m th?i gian h?n cho vi?c review pull request hay x? ly các xung ??t và bug.

3. Gi?m thi?u r?i ro c?a Trunk based development

Trunk Based Development (TBD) có v? nh? là m?t ph??ng pháp m?o hi?m, nh?ng th?c t?, vi?c commit m? ngu?n tr?c ti?p vào nhánh chính mà kh?ng có bi?n pháp ki?m tra ??y ?? có th? d?n ??n các v?n ?? nghiêm tr?ng. ?? gi?m thi?u các r?i ro này, c?n ph?i áp d?ng nh?ng bi?n pháp ki?m tra và ??m b?o ch?t l??ng m? ngu?n.

V?y các ph??ng pháp ???c áp d?ng là gì?

1. T? ??ng Ki?m Tra (Automated Testing):

- Unit Tests: Vi?t và duy trì các bài ki?m tra ??n v? ?? ??m b?o r?ng t?ng ph?n c?a m? ngu?n ho?t ??ng chính xác.

- Integration Tests: Ki?m tra tích h?p ?? ??m b?o r?ng các thành ph?n c?a h? th?ng ho?t ??ng t?t khi k?t h?p l?i v?i nhau.

- End-to-End Tests: Th?c hi?n các bài ki?m tra toàn di?n ?? xác minh r?ng h? th?ng ho?t ??ng ?úng theo các yêu c?u ng??i dùng.

2. Tích H?p Liên T?c (Continuous Integration):

S? d?ng các c?ng c? CI ?? t? ??ng xay d?ng và ki?m tra m? ngu?n m?i khi có thay ??i ???c commit vào nhánh chính. ?i?u này giúp phát hi?n l?i s?m và gi?m thi?u r?i ro.

3. Code Review:

??m b?o r?ng t?t c? các thay ??i ??u ???c xem xét b?i các thành viên khác trong nhóm tr??c khi ???c g?p vào nhánh chính. Vi?c review code có th? trong quá trình Pair Programming, Desk Check... ?i?u này giúp phát hi?n các v?n ?? ti?m ?n và c?i thi?n ch?t l??ng m? ngu?n.

4. Feature Flags:

- S? d?ng các feature flags ?? b?t ho?c t?t các tính n?ng m?i mà kh?ng c?n ph?i g?p chúng vào nhánh chính ngay l?p t?c. ?i?u này cho phép các tính n?ng ???c ki?m tra và tri?n khai m?t cách an toàn h?n.

Ngoài nh?ng ph??ng pháp ?? ?? c?p, vi?c áp d?ng Pair Programming c?ng có th? nang cao ch?t l??ng m? ngu?n và ??m b?o tính t?i ?u c?a nó. Ph??ng pháp này kh?ng ch? giúp phát hi?n l?i s?m mà còn c?i thi?n ch?t l??ng m? nh? vào s? c?ng tác và ?ánh giá liên t?c.

Test Driven Development (TDD) c?ng là m?t ph??ng pháp hi?u qu? ?? nang cao ch?t l??ng m? ngu?n. Trong TDD, các bài ki?m tra ???c vi?t tr??c khi m? ngu?n ???c phát tri?n. Ph??ng pháp này giúp developer nang cao t? duy v? ch?t l??ng m? ngu?n.

Trong quá trình phát tri?n, vi?t tham gia c?a QA có th? gi?m r?i ro c?a Trunk Based Development nh?:

  • Phan tích và ?? xu?t các c?i ti?n cho các bài ki?m tra ??n v? ?? ??m b?o r?ng t?t c? các tr??ng h?p có th? x?y ra ??u ???c ki?m tra.
  • Phát tri?n các bài ki?m tra end-to-end t? ??ng ?? ki?m tra toàn b? ch?c n?ng c?a h? th?ng t? ??u ??n cu?i, giúp ??m b?o r?ng các tính n?ng ho?t ??ng ?úng nh? yêu c?u.
  • ??m b?o r?ng các ch?c n?ng ph?n m?m ?áp ?ng ?úng các yêu c?u nghi?p v? và phát hi?n các v?n ?? ti?m ?n t? s?m.

K?t h?p các ph??ng pháp này v?i Trunk Based Development giúp t?o ra m?t quy trình phát tri?n ph?n m?m m?nh m?, nang cao ch?t l??ng m? ngu?n, gi?m thi?u r?i ro và ??m b?o r?ng các tính n?ng ???c tri?n khai m?t cách an toàn và hi?u qu?.


Long Nguyen Xuan

Full-time Software Project manager, Part-time Lecturer, Life-time learner.

5 个月

""" Vi?c merge nhánh release vào master, ??c bi?t khi ?? ch?a hàng tr?m tính n?ng m?i, có th? t?o ra r?i ro r?t l?n. """ ?a b?n ?i cho mình h?i b?n ch?y git flow là b?n merge hàng tr?m tính n?ng 1 lúc ? ?

赞
回复
Nguyen Do

Solution Architect at FPT Software

6 个月

hay và d? hi?u

赞
回复
Song Pham

C++ Developer at Vietbando

7 个月

Amazing knowledge!

赞
回复
Xuan Thinh Hoang

Business Analyst & Scrum Master

7 个月

Thanks for your sharing! This is very helpful info

赞
回复

要查看或添加评论,请登录

Thuc Hoang的更多文ç«