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?
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?
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?.
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 ? ?
Solution Architect at FPT Software
6 个月hay và d? hi?u
C++ Developer at Vietbando
7 个月Amazing knowledge!
Business Analyst & Scrum Master
7 个月Thanks for your sharing! This is very helpful info