1. Thực trạng
Các Công Ty outsource ở việt nam khách hàng
chủ yếu là Nhật bản, xu thế các dự án ngắn hạn, thời gian triển khai dự án gấp
rút, khách hàng thực hiện việc thiết kế và code đồng thời dẫn đến việc spec
luôn thay đổi.
Làm oursource có lẽ Coder luôn bị ám ảnh
về việc Spec thay đổi, là Coder bản thân tôi cũng thường đau đầu với việc khách
hàng thay đổi spec nhưng ngược tiến độ lại không
được co dãn, có khi vừa hoàn thành xong thì khách hàng bỏ đi, thêm mới, thay đổi CSDL
... bla bla, tất cả điều này đều làm ảnh hưởng tới tâm lý của Coder, Teamleader. Lãnh đạo
thì không kịp trở tay để update plan theo những thay đổi mới, nếu quản lý thay
đổi không tốt dự án có NGUY CƠ bị failure là điều hoàn toàn có thể xảy ra.
2. Đối mặt
Để đối mặt với thực trạng nêu trên thì
Agile
software development là lựa chọn
hoàn hảo để đề xuất vào lúc này.
Thuật ngữ
"Agile" chính thức được sử dụng rộng rãi theo cách thống nhất kể từ
khi “Tuyên ngôn Agile” được giới thiệu ra công chúng năm 2001. Nhờ tính linh hoạt,
đa dạng và hiệu quả cao, các phương pháp Agile ngày càng trở thành sự lựa chọn
hàng đầu của các khách hàng, nhà phát triển, các công ty phát triển phần mềm.
Theo khảo sát của hãng nghiên cứu thị trường Forrester, mức độ phổ biến của
Agile hiện đang ở mức cao nhất nhờ việc đem lại hiệu quả cao gấp nhiều lần so với
các phương phán truyền thống.
Tuyên ngôn của Agile
Cá
nhân và tương tác hơn là Quy trình và công cụ.
Phần
mềm chạy tốt hơn là Tài Liệu đầy đủ.
Cộng
tác với khách hàng hơn là Đàm phán hợp đồng.
Phản
hồi với thay đổi hơn là Bám sát kế hoạch.
A. Giới thiệu - Agile software development
“Agile software development is a group of software development methods based on iterative and incremental development, in which
requirements and solutions evolve through collaboration between
self-organizing, cross-functional teams. It promotes
adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid
and flexible response to change. It is a conceptual framework that promotes
foreseen tight iterations throughout the development cycle.” http://en.wikipedia.org/wiki/Agile_software_development
Về
cơ bản thì phát triển phần mềm Linh Hoạt dựa trên nguyên lý Tiến Hóa và Lặp,
luôn thay đổi để tốt hơn, công việc chia theo chu kỳ, mỗi chu kỳ cho ra một
sản phẩm hoàn chỉnh, chu kỳ sau cho ra sản phẩm tốt hơn, hoàn chỉnh hơn chu kỳ trước đó, khuyến
khích sự phản ứng nhanh, thay đổi kế hoạch linh hoạt để đáp ứng thay đổi và các chu kỳ vẫn cứ được lặp đi lặp lại, cứ tiến
hóa cho đến khi kết thúc dự án.
B.
Đặc trưng Agile
Tính lặp (Iterative)
Dự
án sẽ được thực hiện trong các phân đoạn lặp đi lặp lại. Các phân đoạn (được
gọi là Iteration hoặc Sprint) này thường có khung thời gian ngắn (từ một đến
bốn tuần). Trong mỗi phân đoạn này, nhóm phát triển thực hiện đầy đủ các công
việc cần thiết như lập kế hoạch, phân tích yêu cầu, thiết kế, triển khai, kiểm
thử (với các mức độ khác nhau) để cho ra các phần nhỏ của sản phẩm. Các phương
pháp agile thường phân rã mục tiêu thành các phần nhỏ với quá trình lập kế
hoạch đơn giản và gọn nhẹ nhất có thể, và không thực hiện việc lập kế hoạch dài
hạn.
Tính tiệm tiến (Incremental) và tiến hóa (Evolutionary)
Cuối
các phân đoạn, nhóm phát triển thường cho ra các phần nhỏ của sản phẩm cuối
cùng. Các phần nhỏ này thường là đầy đủ, có khả năng chạy tốt, được kiểm thử
cẩn thận và có thể sử dụng ngay (gọi là potentially shippable product increment
of functionality). Theo thời gian, phân đoạn này tiếp nối phân đoạn kia, các
phần chạy được này sẽ được tích lũy, lớn dần lên cho tới khi toàn bộ yêu cầu
của khách hàng được thỏa mãn.
Xem việc
thay đổi Spec chỉ là tất yếu (thích nghi –
adaptive)
Do
các phân đoạn chỉ kéo dài trong một khoảng thời gian ngắn, và việc lập kế hoạch
cũng được điều chỉnh liên tục, nên các thay đổi trong quá trình phát triển (yêu
cầu thay đổi, thay đổi công nghệ, thay đổi định hướng về mục tiêu v.v.) đều có
thể được đáp ứng theo cách thích hợp . Ví dụ, trong Scrum – phương pháp phổ
biến nhất hiện nay – trong khi nhóm phát triển sản xuất ra các gói phần mềm,
khách hàng có thể đưa thêm các yêu cầu mới, chủ sản phẩm (Product Owner) có thể
đánh giá các yêu cầu này và có thể đưa vào làm việc trong phân đoạn (được gọi
là Sprint trong Scrum) tiếp theo. Theo đó, các quy trình agile thường thích ứng
rất tốt với các thay đổi.
Nhóm tự tổ chức và liên chức năng
Cấu
trúc nhóm agile thường là liên chức
năng(cross-functionality) và tự tổ chức(self-organizing). Theo đó,
các nhóm này tự thực hiện lấy việc phân công công việc mà không dựa trên các mô
tả cứng về chức danh (title) hay làm việc dựa trên một sự phân cấp rõ ràng
trong tổ chức. Các nhóm này cộng tác với nhau để ra quyết định, theo dõi tiến
độ, giải quyết các vấn đề mà không chờ mệnh lệnh của các cấp quản lý. Họ không
làm việc theo cơ chế “mệnh lệnh và kiểm soát” (command and control). Nhóm tự tổ
chức có nghĩa là nó đã đủ các kĩ năng (competency) cần thiết cho việc phát
triển phần mềm, do vậy nó có thể được trao quyền để tự ra quyết định, tự quản
lí và tổ chức lấy công việc của chính mình để đạt được hiệu quả cao nhất.
3. Kinh nghiệm bản thân
Công nghệ Agile cung
cấp rất nhiều phương pháp luận, quy trình và các thực nghiệm để cho việc phát
triển phần mềm trở nên nhanh chóng và dễ dàng. Hiện nay tại Việt Nam, quy trình
này đang được thử nghiệm tại các đội phát triển phần mềm của một số công ty lớn.
Có nhiều phương pháp
Agile, nhưng phổ biến nhất là Scrum cho hiệu quả cao nếu áp dụng đúng, điều mà mình thấy tâm đắc
nhất ở đây đó là kế hoạch, Linh Hoạt nhưng vẫn đảm bảo rõ ràng.
Hàng ngày mỗi nhóm sẽ
có một buổi họp nhanh khoảng 15 phút và mọi người sẽ trả lời 3 câu hỏi:
Hôm qua bạn làm gì?
Hôm này bạn sẽ làm gì?
Bạn gặp trở ngại gì?
Nhóm trưởng ghi và cập
nhật vào bản kế hoạch để theo dõi tiến độ công việc của đội và chia sẻ kế hoạch
đó cho toàn đội.
Việc
quản lý nhóm + kết hợp lập trình cặp + clearn code sẽ cho kết quả cao, đẩy
nhanh tiến độ và chất lượng sản phẩm được cải thiện rõ.
Mình xin chia sẻ thêm một số kinh nghiệm
mình note lại trong quá trình làm việc xin chia sẻ và rất mong nhận được sự đóng góp chia sẻ ý kiến của mọi người để cùng nhau phát triển.
Hỏi ngay
nếu tồn tại vấn đề bạn chưa rõ, còn băn khoăn.
Tái cấu
trúc lại mã bẩn ngay khi có thể.
Lập
trình cặp, bug đơn giản bạn tìm không ra nhưng đồng nghiệp của bạn thì có.
Tối ưu
sự tương tác trong nhóm.
Thực hiện
đúng chuẩn viết mã.
Mỗi lần commit code cần tìm thứ gì đó để thay
đổi, tìm ra một tên biến đặt sai chuẩn, xắp xếp lại các logic cho gọn gàng, xóa
các dòng code vô ích hoặc căn chỉnh lại format code trước khi commit sẽ giúp
code của bạn tinh gọn hơn.
source: sưu tầm, tổng hợp, kinh nghiệm bản thân .
No comments:
Post a Comment