055.1 Bài 1
Chứng chỉ: |
Open Source Essentials |
---|---|
Phiên bản: |
1.0 |
Chủ đề: |
055 Quản lý Dự án |
Mục tiêu: |
055.1 Mô hình Phát triển Phần mềm |
Bài học: |
1 trên 1 |
Giới thiệu
Trong cuộc sống của chúng ta luôn có đầy rẫy các dự án. Một dự án có thể chỉ đơn giản là việc lên kế hoạch cho một đêm xem phim, một chuyến đi, một sự kiện gia đình, một tuần lễ dành cho trẻ em hoặc một kế hoạch cá nhân nhằm cải thiện các hoạt động vì sở thích. Không quan trọng bạn muốn thực hiện việc gì: bạn cần phải lên kế hoạch và hành động. Chúng ta thường sẽ tạo ra một số kịch bản với các kế hoạch B, kế hoạch C, v.v. Trong thế giới phát triển phần mềm cũng y như vậy.
Các Vai trò trong Phát triển Phần mềm
Để quản lý dự án thành công cần đến nhiều kỹ năng khác nhau; vì vậy, việc tìm những cá nhân có khả năng đảm nhiệm các vai trò được xác định là rất hữu ích. Các phần dưới đây sẽ trình bày một số vai trò thường thấy trong các dự án phần mềm.
Quản lý Dự án
Quản lý dự án là một nhiệm vụ cực kỳ phức tạp. Một số tình huống thoạt nhìn có vẻ rất dễ dàng — nhưng để khiến chúng đi đúng hướng thì cần có một bề dày kinh nghiệm cũng như một sự cẩn trọng đúng mực. Người thực hiện việc này chính là quản lý dự án.
Trách nhiệm của người quản lý dự án bao gồm việc đảm bảo dự án được hoàn thành đúng thời hạn trong phạm vi ngân sách và đạt được mức chất lượng cho phép. Ngay cả khi họ không viết một dòng mã nào, người quản lý dự án vẫn sẽ là người chịu trách nhiệm và trả lời về kết quả của nhóm. Họ sẽ phải thống nhất với khách hàng về thời hạn cũng như trao đổi với những người khác để đảm bảo mọi thứ đều sẽ tuân theo đúng trình tự.
Chuyên viên Phân tích Kinh doanh và Kỹ sư Phân tích Yêu cầu
Trong phát triển phần mềm không có chỗ quản lý vi mô — ít nhất là trong một môi trường làm việc lành mạnh. Các chuyên viên phân tích kinh doanh (Business analysts - BA) và các kỹ sư phân tích yêu cầu (Requirement Engineer - RE) — dù là trong nội bộ hoặc nằm ngoài nhóm dự án — là cánh tay phải đắc lực của các nhà quản lý dự án. Họ chịu trách nhiệm tạo ra nguồn tài liệu phong phú và rõ ràng về các yêu cầu. Họ cũng là cầu nối giữa khách hàng và các nhà phát triển. Khách hàng sẽ giao tiếp thông qua ngôn ngữ thông thường; BA/RE sẽ đảm bảo việc cung cấp tài liệu một cách rõ ràng và minh bạch để các nhà phát triển có thể thực hiện công việc của họ một cách hiệu quả.
Hãy tưởng tượng bạn được yêu cầu mang một chiếc “bánh lớn” đến một bữa tiệc. “Bánh lớn” có nghĩa là gì? Mười lát hay hai mươi lát? Có thể đó là bánh dùng cho một đám cưới lớn và nó phải có tới một trăm lát. BA/RE sẽ phải xác định các yêu cầu — ví dụ như về số lượng — một cách chính xác để các nhà phát triển biết được rằng một ứng dụng cần đáp ứng những nhu cầu như thế nào (ví dụ như một số lượng người dùng cụ thể).
Dù mới chỉ ở giai đoạn đầu của việc xác định các yêu cầu nhưng chúng ta đã có thể thấy được tầm quan trọng của việc giao tiếp rõ ràng. Giao tiếp là điều cần thiết đối với bất kỳ một công việc chung nào, nhưng có lẽ nó còn quan trọng hơn cả đối với một dự án mã nguồn mở vì các nhà phát triển hoạt động trên từng phần của dự án có thể có các xuất phát điểm rất khác nhau. Một số người có thể là sinh viên hoạt động trên danh nghĩa cộng tác viên, một số khác lại là phụ huynh, một người đã nghỉ hưu hoặc đang làm nhiều công việc khác nhau, v.v. Mặc dù vậy, tiến độ phải diễn ra một cách suôn sẻ trong môi trường này — vì vậy, giao tiếp không được kìm hãm tiến độ.
Nhà phát triển, Kiến trúc sư và Kiểm thử viên
Để triển khai các yêu cầu, một dự án phần mềm cần các nhà phát triển (developer) tạo ra sản phẩm dựa trên các tài liệu và quyết định thiết kế. Công việc của họ được đánh giá bởi các kiến trúc sư (architect) với lượng kiến thức chuyên môn và lĩnh vực sâu rộng nhất trong số những người tham gia dự án. Mỗi nhà phát triển — đặc biệt là các nhà phát triển cao cấp — đều sẽ chịu trách nhiệm về mã của riêng họ; tuy nhiên, các quyết định lớn sẽ được đưa ra hoặc phê duyệt bởi các kiến trúc sư.
Đôi khi, một số cá nhân sẽ được chỉ định cụ thể với danh nghĩa là kiểm thử viên (tester). Những người này sẽ chịu trách nhiệm với mọi loại thử nghiệm, việc ghi chép kết quả và tạo phiếu lỗi.
Lên kế hoạch và Lên lịch
Chúng ta đã thảo luận xong về các vai trò cơ bản. Bây giờ, hãy cùng tìm hiểu về các giai đoạn của một dự án: lập kế hoạch, lên lịch, triển khai, bảo trì/kiểm tra và phân phối. Một số giai đoạn có thể sẽ không giống nhau tuỳ theo mô hình phát triển phần mềm, nhưng việc lập kế hoạch và lên lịch là các chủ đề chung mà chúng ta sẽ thảo luận trước khi đi sâu hơn vào các mô hình khác nhau.
Việc lên kế hoạch sẽ diễn ra sau khi BA/RE cung cấp danh sách các yêu cầu. Việc lên kế hoạch sẽ bao gồm một hoặc nhiều cuộc họp về những gì nhóm muốn đạt được, cách họ tính toán để hoàn thành và thời gian thực hiện. Thông thường, một số phân tích rủi ro cũng sẽ diễn ra trong các cuộc họp này.
Sau đó, các chuyên viên hoạch định sẽ phải lên lịch cho công việc và tạo ra các mốc quan trọng. Tại mỗi mốc quan trọng, nhóm sẽ biết rằng một phần lớn và quan trọng trong dự án đã được hoàn thành. Các thành phần hoặc tính năng dài hạn có thể sẽ mất nhiều tháng để thực hiện; vì vậy, các chuyên viên hoạch định phải tính đến các kỳ nghỉ, ngày lễ và — đặc biệt là trong mùa lạnh — một số khoảng thời gian nghỉ ốm để đảm bảo thời gian được phân phối một cách chính xác và tránh việc vội vã hoặc rối loạn khi thời hạn đến gần. Với một lịch trình tốt, các nhà phát triển sẽ cảm thấy thoải mái hơn và có thể cung cấp các giải pháp chất lượng cao đúng hạn mà không có sự cố.
Các Công cụ phổ biến
Hai công cụ có lợi cho tất cả các mô hình và việc quản lý dự án nói chung là hệ thống kiểm soát phiên bản (Version Control System - VCS) và nền tảng quản lý vòng đời ứng dụng (Application Lifecycle Management - ALM). Công cụ kiểm soát phiên bản sẽ được thảo luận sâu hơn trong một bài học khác; ở đây, chúng ta sẽ cùng tìm hiểu một chút về ALM.
ALM là một khuôn khổ toàn diện quản lý vòng đời của một ứng dụng phần mềm từ giai đoạn phát triển ban đầu cho đến giai đoạn bảo trì và cuối cùng là ngừng hoạt động. ALM tích hợp con người, tiến trình và công cụ để tăng cường sự cộng tác cũng như hiệu quả nhằm đảm bảo tất cả các giai đoạn của vòng đời phần mềm đều được phối hợp tốt và phù hợp với các mục tiêu kinh doanh. Cách tiếp cận này giúp duy trì chất lượng, hiệu suất và độ tin cậy của các ứng dụng trong suốt vòng đời của chúng.
Sau khi đã có một cái nhìn tổng quan về các vai trò và giai đoạn vòng đời phần mềm, hãy cùng tìm hiểu sâu hơn về các mô hình.
Mô hình Thác nước (Waterfall)
Đây là một trong những phương pháp luận sớm nhất và đơn giản nhất trong phát triển phần mềm. Chúng ta có thể hình dung nó như một chiếc cầu thang; một bậc mới cần phải được hoàn thành trước khi ta có thể tiến lên phía trước một bước. Tuy nhiên, mô hình này chỉ đi theo một hướng nên nó chỉ phù hợp với các dự án có yêu cầu rõ ràng và ít hoặc không có thay đổi dự kiến.
Tính đơn giản của mô hình này có thể là một lợi thế; tuy nhiên, phương pháp luận cứng nhắc lại có thể là một nhược điểm khi dự án cần đến sự linh hoạt và khả năng thích ứng. Và ngày nay, trong khi chúng ta đang làm việc trên dự án của mình thì mọi thứ xung quanh thường có xu hướng liên tục thay đổi.
Như đã giải thích ở các phần trước, để bắt đầu phát triển, một dự án cần chuẩn bị tốt các yêu cầu cùng với một kế hoạch hoàn chỉnh và một lịch trình thống nhất cho công việc với các mốc quan trọng. Trong mô hình thác nước, những yếu tố trên là kết quả của việc phân tích yêu cầu và phân tích kinh doanh.
Phân tích Yêu cầu
Trong giai đoạn đầu này, tất cả các yêu cầu của dự án sẽ được thu thập và ghi chép lại. Công việc này bao gồm các cuộc thảo luận sâu rộng giữa quản lý dự án và các bên liên quan để hiểu được nhu cầu và kỳ vọng của họ. Kết quả của quá trình này sẽ là một tài liệu đặc tả yêu cầu toàn diện phác thảo những gì hệ thống nên làm.
Phân tích kinh doanh
Các chuyên gia phân tích kinh doanh sẽ xem xét các yêu cầu từ góc độ kinh doanh để đảm bảo chúng phù hợp với các mục tiêu của tổ chức. Các BA sẽ thực hiện các nghiên cứu khả thi, đánh giá rủi ro và phân tích chi phí-lợi ích để xác định xem dự án có khả thi và đáng giá hay không. Những hiểu biết thu được sẽ được sử dụng để tinh chỉnh phạm vi và mục tiêu của dự án.
Thiết kế Phần mềm
Thiết kế phần mềm là bước mà kiến trúc sư tạo ra bản thông số kỹ thuật thiết kế chi tiết để các nhà phát triển tuân theo. Với thông số kỹ thuật này, nhóm có thể bắt đầu triển khai các yêu cầu — nói cách khác là bắt đầu giai đoạn tiếp theo: phát triển dự án.
Phát triển
Giai đoạn phát triển là nơi phép thuật xảy ra — chính là thời điểm mã được viết. Thực hiện theo tài liệu và các quyết định thiết kế một cách cần mẫn, các nhà phát triển sẽ xây dựng nên công trình của họ. Sau khi các nhà phát triển rà soát và kiểm tra mã của họ cùng với các nhà phát triển hoặc kiến trúc sư khác, giai đoạn này có thể được coi là đã hoàn thành.
Kiểm thử
Theo sau giai đoạn Phát triển sẽ là giai đoạn kiểm thử/thử nghiệm do kiểm thử viên quản lý. Có nhiều loại kiểm thử nghiệm khác nhau (được mô tả trong bài học khác) như kiểm thử đơn vị, kiểm thử tích hợp, kiểm thử hệ thống và kiểm thử chấp nhận.
Mục tiêu của những cuộc kiểm thử này là phát hiện ra các vấn đề trước khi phát hành và cho phép các nhà phát triển khắc phục chúng kịp thời — để tránh việc phát hiện sau khi dự án được triển khai và công bố và khiến cho người dùng cảm thấy khó chịu và thất vọng vì lỗi.
Vận hành
Sau khi các cuộc kiểm thử được thông qua và lỗi đã được sửa, dự án có thể được phát hành — tức là triển khai vào môi trường sản xuất. Giai đoạn này có thể bao gồm việc cài đặt, cấu hình và đôi khi thậm chí là đào tạo người dùng. Sau khi dự án đã sẵn sàng sử dụng, nó sẽ tiến vào giai đoạn bảo trì nơi nhóm có thể xử lý các vấn đề từ người dùng và cung cấp các bản cập nhật nếu cần.
Đánh giá Mô hình Thác nước
Chúng ta có thể nhận thấy điều gì khi đọc về mô hình này? Liệu nó có hiệu quả hoặc có thiếu sót gì không? Hãy cùng tìm hiểu về các ưu và nhược điểm của mô hình này.
Mô hình thác nước có những lợi ích sau:
Cấu trúc rõ ràng: Quy trình tuyến tính dễ hiểu, dễ quản lý và dễ theo dõi.
- Hồ sơ chi tiết
-
việc ghi lại một cách chi tiết và đầy đủ ở mỗi giai đoạn sẽ giúp nhóm hiểu được điều gì là cần thiết trong quá trình phát triển và bảo trì trong tương lai.
- Khả năng dự đoán
-
Các mốc thời gian rõ ràng và được xác định sẽ giúp cung cấp một dòng thời gian và ngân sách chính xác.
- Quản lý dự án đơn giản hơn
-
Nhờ luồng tuyến tính và trực tiếp, mô hình này tương đối dễ quản lý.
Mô hình thác nước có những nhược điểm sau:
- Sự cứng nhắc
-
Tính không linh hoạt tuyến tính của mô hình khiến việc triển khai bất kỳ thay đổi nào sau khi giai đoạn yêu cầu hoàn tất đều sẽ trở nên khó khăn.
- Kiểm thử muộn
-
Trong giai đoạn phát triển, việc kiểm thử diễn ra một cách tùy tiện hoặc bị thiếu; điều này có thể dẫn đến việc phát hiện muộn các vấn đề quan trọng.
- Giả định về các yêu cầu hoàn hảo
-
Mô hình này đổi hỏi và giả định rằng mọi yêu cầu đều phải chính xác và rõ ràng; điều này có thể nói là rất không thực tế. Mô hình này không tạo ra điều kiện để kiểm thử trong quá trình phát triển để đảm bảo rằng các yêu cầu đều chính xác và được các nhà phát triển hiểu rõ.
- Thiếu phản hồi
-
Khách hàng chỉ có thể đưa ra nhận xét về sản phẩm trong giai đoạn cuối cùng. Vì vậy, nếu có một (hoặc rất nhiều) khía cạnh nào đó không đáp ứng được kỳ vọng của họ, vấn đề sẽ chỉ xuất hiện ở giai đoạn cuối cùng.
Phát triển phần mềm Linh hoạt, Scrum và Kanban
Để khám phá tập hợp mô hình phát triển phần mềm hiện đại này, chúng ta hãy bắt đầu với từ linh hoạt (agile): nó có nghĩa là gì? Tính linh hoạt (agility) thể hiện khả năng phản ứng và di chuyển nhanh chóng, trong cả thế giới vật lý lẫn phi vật lý. Tính chất của mục tiêu này cũng tương tự trong phát triển phần mềm.
Phát triển phần mềm linh hoạt là một phương pháp luận xây dựng dựa trên sự phát triển lặp, tính linh hoạt và sự cộng tác. Nó tập trung vào việc cung cấp những cải tiến nhỏ trong khi luôn thu thập phản hồi và triển khai chúng trong quá trình phát triển. Phương pháp này cho phép nhà phát triển phản ứng, điều chỉnh và phản hồi một cách nhanh chóng, tiết kiệm thời gian và đảm bảo rằng dự án có thể đáp ứng được kỳ vọng của người dùng và khách hàng.
Phong trào linh hoạt được phát động vào năm 2001 thông qua Tuyên ngôn về Phát triển phần mềm Linh hoạt trực tuyến, trong đó đã liệt kê các nguyên tắc như sau:
Chúng tôi đang khám phá những cách tốt hơn để phát triển phần mềm thông qua chính việc thực hiện và giúp đỡ những người khác thực hiện nó.
Thông qua công việc này, chúng tôi đánh giá cao:
Các cá nhân và việc tương tác hơn là quy trình và công cụ
Phần mềm hoạt động tốt hơn là tài liệu toàn diện
Sự hợp tác của khách hàng hơn việc đàm phán hợp đồng
Phản hồi với những thay đổi hơn là tuân theo một kế hoạch
Nghĩa là trong khi các mục bên phải cũng có giá trị, chúng tôi coi trọng các mục ở bên trái hơn.
Scrum
Scrum là một trong những khuôn khổ phổ biến nhất — cũng có thể là phổ biến nhất — trong phát triển phần mềm linh hoạt. Scrum được xây dựng dựa trên các khối sau:
Nói một cách ngắn gọn, Scrum sẽ cần một Chuyên gia Scrum (Scrum Master) tạo ra một môi trường nơi:
Chủ sở hữu sản phẩm ra lệnh công việc cho một vấn đề phức tạp vào Danh mục Công việc.
Nhóm Scrum biến một phần công việc thành một Giá trị gia tăng trong một Phiên tăng tốc.
Nhóm Scrum và các bên liên quan kiểm tra kết quả và điều chỉnh cho phiên tăng tốc tiếp theo.
Lặp lại
Nhưng ai là chuyên gia scrum và ai là chủ sở hữu sản phẩm? Danh mục Công việc và Phiên tăng tốc là gì? Hãy cùng tìm hiểu sâu hơn.
Phiên tăng tốc và Lên Kế hoạch Tăng tốc
Phiên tăng tốc (Sprint) là một giai đoạn phát triển thường kéo dài từ hai đến bốn tuần; trong đó, một số nhiệm vụ và/hoặc tính năng đã được thống nhất trước đó sẽ được hoàn thành. Để đạt được sự đồng thuận về các nhiệm vụ, kế hoạch tăng tốc sẽ được đưa vào. Quá trình này là nơi nhóm đưa ra quyết định về những nhiệm vụ nào có thể được hoàn thành trong phiên tăng tốc sắp tới.
Những lựa chọn này được dựa trên các ưu tiên do chủ sở hữu sản phẩm (Product Owner - PO) đặt ra. Chủ sở hữu sản phẩm là người kiểm soát dự án và thường cũng là người cung cấp kinh phí cho dự án.
Danh mục Công việc và Dang mục Công việc Phiên Tăng tốc
Như vừa giải thích, PO sẽ quản lý danh sách các ưu tiên, trong đó có tất cả các công việc được mong muốn trong dự án. Trong Scrum, danh sách này được gọi là Danh mục Công việc (Product Backlog). Mỗi Danh mục Công việc Phiên Tăng tốc (Sprint Backlog) sẽ chứa các tác vụ đã được chọn cho phiên tăng tốc hiện tại từ danh mục công việc. Hồ sơ phiên tăng tốc sẽ chứa các yếu tố mà nhóm đã chọn trong quá trình lập kế hoạch tăng tốc.
Scrum hàng ngày hay Họp ngắn
Các cuộc họp Scrum hàng ngày (daily Scrum) hoặc họp ngắn (stand-up) là những cuộc họp ngắn và hiệu quả nơi các nhóm phát triển sẽ thảo luận về tiến độ của mình, nêu bật các vấn đề và trở ngại cũng như chia sẻ về kế hoạch trong ngày. Một cuộc họp scrum thường được tổ chức vào đầu ngày làm việc.
Giá trị gia tăng
Giá trị gia tăng (Increment) là mục tiêu cần đạt được trong một phiên tăng tốc. Mỗi phiên tăng tốc sẽ phải tạo ra một hoặc nhiều giá trị gia tăng. Tính chính xác của nhiệm vụ hoặc các tính năng đạt được bằng giá trị gia tăng phải được xác minh thông qua việc kiểm thử.
Đánh giá Phiên Tăng tốc
Đánh giá phiên tăng tốc là một cuộc họp để kiểm tra kết quả của phiên tăng tốc. Những cuộc họp này thường không chỉ nói về các bản demo — mục tiêu chính là để nhận được phản hồi dựa trên kết quả của nhóm Scrum. Nhằm mục đích đạt được mục tiêu của sản phẩm, các bên liên quan sẽ đưa ra ý kiến và đề xuất về các điều chỉnh trong tương lai. Kết quả của những cuộc họp này có thể là những thay đổi hoặc bổ sung vào danh mục công việc.
Họp khái quát về Phiên tăng tốc
Mục tiêu của việc họp khái quát về Phiên tăng tốc là nâng cao chất lượng và hiệu quả (không chỉ là cho sản phẩm hiện tại). Cuộc họp khái quát nên trình bày những căng thẳng tiềm ẩn trong nhóm phát triển, bất kỳ sự thiếu thông tin nào dẫn đến chậm trễ quá trình, các mối phụ thuộc bên ngoài cần được xử lý để giảm bớt gánh nặng cho nhóm phát triển, v.v. Nhóm phát triển cũng sẽ thảo luận về những gì đã và đang diễn ra tốt đẹp, những vấn đề họ gặp phải và những giải pháp nào đã (hoặc chưa) được đưa ra để giải quyết những vấn đề đó.
Kết quả của cuộc họp sẽ là một danh sách các vấn đề kèm theo các giải pháp khả thi được giao cho những người chịu trách nhiệm.
Chuyên gia Scrum
Tất cả các cuộc họp này đều do chuyên gia Scrum (Scrum master) chủ trì. Mỗi nhóm Scrum đều cần có một Chuyên gia Scrum. Họ sẽ chịu trách nhiệm tạo điều kiện cho các quy trình Scrum và giúp nhóm phát triển tiếp tục tiến tới mục tiêu sản phẩm trong khi đối mặt những vấn đề trong các phiên tăng tốc. Chuyên gia Scrum không chỉ dẫn dắt các quy trình mà còn đóng vai trò là người hướng dẫn để đảm bảo việc giao tiếp hiệu quả trong nhóm.
Chủ sở hữu Sản phẩm
Chủ sở hữu sản phẩm (Product Owner - PO) sẽ chịu trách nhiệm tối đa hóa giá trị của sản phẩm do nhóm Scrum tạo ra. Vai trò này trong các tổ chức và nhóm khác nhau có thể sẽ khác nhau. Ngay cả khi phân công nhiệm vụ, chủ sở hữu sản phẩm vẫn sẽ chịu trách nhiệm về các kết quả.
Sự thành công của sản phẩm đòi hỏi sự tôn trọng của toàn bộ tổ chức đối với các quyết định của chủ sở hữu sản phẩm được phản ánh trong danh mục công việc và cuộc họp đánh giá giá trị gia tăng của phiên tăng tốc. Chủ sở hữu sản phẩm là người duy nhất đại diện cho nhu cầu của nhiều bên liên quan khác nhau trong danh mục công việc. Bất kỳ ai muốn thay đổi danh mục công việc cũng phải thuyết phục được chủ sở hữu sản phẩm. Chủ sở hữu sản phẩm sẽ xác định và ưu tiên tầm nhìn và hồ sơ của sản phẩm cũng như đảm bảo tính minh bạch, tính rõ ràng và dễ hiểu của danh mục công việc.
Chuyên gia Scrum và chủ sở hữu sản phầm sẽ hợp tác để thúc đẩy thành công của dự án. Quan hệ đối tác của họ sẽ giúp nhóm phát triển cung cấp các tính năng có giá trị cao một cách hiệu quả.
Nhà phát triển
Các nhà phát triển sẽ triển khai các yêu cầu theo danh mục công việc phiên tăng tốc đã được thống nhất. Họ có thể làm việc độc lập hoặc cộng tác trong một số trường hợp như lập trình theo cặp hoặc đánh giá mã của các nhà phát triển khác.
Đánh giá Mô hình Scrum
Scrum rất được ưa chuộng trong các nhóm phần mềm nhưng nó cũng có cả ưu lẫn nhược điểm.
Mô hình Scrum có các điểm lợi về:
- Tính linh hoạt
-
Các quy trình linh hoạt và có tính lặp lại cho phép các thay đổi dựa trên phản hồi.
- Sự tham gia của khách hàng
-
Phản hồi thường xuyên từ các bên liên quan sẽ đảm bảo sản phẩm có thể phù hợp với nhu cầu của khách hàng.
- Chất lượng được cải thiện
-
Việc thử nghiệm và đánh giá thường xuyên sẽ giúp cải thiện chất lượng sản phẩm.
- Hợp tác nhóm
-
Mô hình này nhấn mạnh vào tinh thần làm việc nhóm và việc giao tiếp thông qua các cuộc họp thường kỳ và hàng ngày.
Mô hình Scrum gặp phải những vấn đề sau:
- Tính kỷ luật bắt buộc
-
Scrum đòi hỏi sự tuân thủ nghiêm ngặt đối với các thông lệ của nó; điều này có thể là một thách thức lớn.
- Phạm vi phát triển
-
Có nguy cơ ngày càng có nhiều yêu cầu của khách hàng được thêm vào và làm chậm tiến độ phát hành nếu danh mục công việc không được quản lý tốt.
- Nhầm lẫn về vai trò
-
Các vai trò tiêu chuẩn như Chuyên gia Scrum và chủ sở hữu sản phẩm dễ bị nhầm lẫn hoặc triển khai kém.
- Cường độ nguồn lực
-
Các cuộc họp hàng ngày và các đợt đánh giá thường xuyên có thể sẽ tốn rất nhiều thời gian.
Kanban
Kanban là một khuôn khổ linh hoạt phổ biến khác nhấn mạnh vào việc trực quan hóa công việc, quản lý luồng và cải tiến quy trình. Một trong những điểm khác biệt lớn giữa Scrum và Kanban là Kanban không yêu cầu các phiên lặp có độ dài cố định. Do đó, nó khiến cho việc phân phối liên tục trở nên linh hoạt hơn, việc cân bằng các ưu tiên công việc khác trở nên dễ dàng hơn.
Hãy cùng xem các nhóm phát triển sẽ cần phải chuẩn bị những gì cho một dự án Kanban trong các tiểu mục sau đây.
Bảng Kanban
Bảng Kanban là một công cụ trực quan dùng để theo dõi luồng công việc qua các giai đoạn. Các cột chính và quan trọng nhất là “Cần làm” (To Do), “Đang tiến hành” (In Progress) và “Hoàn thành” (Done). Có thể sẽ có thêm nhiều cột nữa, nhưng trên đây là ba cột chính bắt buộc phải có trong bảng. Hình ảnh trực quan này sẽ giúp các nhóm phát triển nắm bắt được các nút thắt và xem trạng thái của các nhiệm vụ chỉ trong chớp mắt.
Giới hạn Công việc đang tiến hành
Giới hạn công việc đang tiến hành (WIP limit) sẽ giúp nhóm phát triển tránh đa nhiệm và cải thiện sự tập trung. Với giới hạn này, sẽ có một thời điểm mà nhóm phát triển không thể thêm bất kỳ một nhiệm vụ nào vào cột “Đang tiến hành” nữa. Bằng cách này, các nhà phát triển sẽ không bị quá tải bởi các nhiệm vụ và có thể tập trung tốt hơn vào các nhiệm vụ mà họ đang thực hiện.
Thành viên Nhóm phát triển
Các thành viên trong nhóm có trách nhiệm hoàn thành nhiệm vụ và thiết lập một luồng thông suốt thông qua hệ thống Kanban. Họ sẽ hợp tác với nhau để thống nhất ưu tiên công việc, nêu bật và giải quyết mọi vấn đề phát sinh.
Quản lý Kanban
Quản lý Kanban sẽ giám sát quy trình Kanban để đảm bảo việc nhóm phát triển tuân thủ các nguyên tắc và thông lệ của Kanban. Người quản lý này sẽ tạo điều kiện cho các cuộc họp, theo dõi quy trình làm việc và giúp giải quyết mọi vấn đề có khả năng phát sinh.
Đánh giá Mô hình Kanban
Cốt lõi của mô hình này rất đơn giản. Chúng ta hãy cùng đánh giá ưu nhược của nó.
Mô hình Kanban có các điểm lợi sau:
- Quy trình làm việc trực quan
-
Bảng Kanban cung cấp khả năng hiển thị rõ ràng về trạng thái và tiến độ của công việc.
- Tính linh hoạt
-
Do không có các phiên lặp cố định, mô hình này hỗ trợ tính năng phân phối liên tục với khả năng thích ứng đáng nể.
- Giới hạn nhiệm vụ
-
Giới hạn công việc đang tiến hành sẽ giúp các thành viên trong nhóm phát triển không bị quá tải và từ đó cải thiện sự tập trung và hiệu quả của họ.
- Cải tiến liên tục
-
Mô hình này khuyến khích đánh giá và cải tiến quy trình thường xuyên.
Mô hình Kanban gặp phải những vấn đề sau:
- Thiếu khung thời gian
-
Nếu không có thời hạn cụ thể, việc quản lý thời gian sẽ trở nên khó khăn.
- Ít cấu trúc hơn
-
Mô hình có thể bị thiếu cấu trúc mà một số nhóm cần để duy trì tính tổ chức.
- Tính kỷ luật bắt buộc
-
Việc quản lý bảng và giới hạn công việc đang tiến hành hiệu quả đòi hỏi sự chú ý cao.
- Tiềm ẩn việc đơn giản hóa một cách quá mức
-
Phần mô tả tác vụ có thể sẽ đơn giản hóa quá mức các dự án phức tạp nếu không được triển khai cẩn thận.
DevOps
DevOps là một phương pháp phát triển phần mềm tích hợp các nhóm phát triển (Dev) và nhóm vận hành (Ops) để tăng cường tính cộng tác, hiệu quả và tốc độ phân phối. Mục tiêu chính của DevOps là rút ngắn vòng đời phát triển phần mềm và cung cấp dịch vụ phân phối liên tục với chất lượng phần mềm cao. DevOps nhấn mạnh vào tự động hóa, tích hợp và phân phối liên tục (Continuous Integration/ Continuous Delivery - CI/CD) cũng như sự cộng tác chặt chẽ giữa các nhóm (theo truyền thống là) bị cô lập.
Tự động hóa rất quan trọng trong DevOps đối với các tác vụ như tích hợp mã, kiểm thử, triển khai và quản lý cơ sở hạ tầng. Tự động hóa các tác vụ lặp đi lặp lại sẽ giúp giảm lỗi, tăng tốc quy trình và cho phép các nhóm phát triển tập trung vào các công việc mang tính chiến lược hơn.
Việc giám sát và ghi nhật ký liên tục là điều cần thiết để duy trì tình trạng và hiệu suất của hệ thống. Các hoạt động thường thấy của DevOps gồm có thiết lập hệ thống giám sát và ghi nhật ký toàn diện để phát hiện sự cố, phân tích xu hướng và cải thiện độ tin cậy của hệ thống.
Đánh giá Mô hình DevOps
Mặc dù DevOps được khuyến khích sử dụng cho nhiều loại dự án phần mềm hiện đại nhưng chúng ta vẫn cần phải cân nhắc đến các ưu và nhược điểm của nó.
Mô hình DevOps có các điểm lợi sau:
- Tốc độ và hiệu suất
-
Mô hình này đẩy nhanh chu kỳ phát triển và triển khai thông qua tự động hóa.
- Cải thiện sự cộng tác
-
Mô hình này thu hẹp khoảng cách giữa nhóm phát triển và nhóm vận hành.
- Phân phối liên tục
-
Mô hình này đảm bảo phần mềm luôn ở trạng thái có thể triển khai, từ đó dẫn đến việc phát hành thường xuyên hơn.
- Độ tin cậy cao
-
Việc kiểm thử và giám sát tự động sẽ giúp tăng cường độ tin cậy và giảm lỗi.
Mô hình DevOps gặp phải những vấn đề sau:
- Sự thay đổi về văn hóa
-
Mô hình này đòi hỏi một sự thay đổi đáng kể về khía cạnh văn hóa và sự đồng thuận trong toàn tổ chức.
- Độ phức tạp
-
Việc quản lý các quy trình CI/CD và cơ sở hạ tầng tự động có thể trở nên rất phức tạp.
- Rủi ro bảo mật
-
Việc triển khai liên tục có thể gây ra lỗ hổng bảo mật nếu không được quản lý cẩn thận.
- Quá tải công cụ
-
DevOps có thể trở nên quá tải do có quá nhiều công cụ và công nghệ liên quan.
Bài tập Hướng dẫn
-
Tính linh hoạt có nghĩa là gì?
-
Theo Scrum Guide, Scrum được định nghĩa như thế nào?
-
Tại sao Scrum có thể hoạt động tốt hơn mô hình thác nước về mặt phản hồi của khách hàng?
-
Những khía cạnh tích cực của DevOps là gì?
Bài tập Mở rộng
-
Tại sao mô hình thác nước không phải là mô hình tốt nhất để sử dụng trong một môi trường thay đổi nhanh chóng?
Điều gì có thể xảy ra khi vai trò của chuyên gia Scrum được triển khai kém hiệu quả?
+
Tóm tắt
Tầm quan trọng của việc quản lý dự án trong phát triển phần mềm, đặc biệt là trong các dự án mã nguồn mở, nằm ở khả năng cung cấp cấu trúc, tăng cường giao tiếp, xác định vai trò, quản lý rủi ro và đảm bảo chất lượng. Các yếu tố này rất quan trọng đối với việc hoàn thành thành công các dự án và thúc đẩy một môi trường phát triển hợp tác và hiệu quả.
Trong bài học này, chúng ta đã tìm hiểu về mô hình thác nước, phương pháp luận linh hoạt và DevOps. Kiến thức về các mô hình này là điều cần thiết để hiểu về việc quản lý dự án trong phát triển phần mềm. Không có bất cứ một phương thức đúng đắn duy nhất nào cả — mỗi dự án đều sẽ khác nhau. Trong bài học này, chúng ta đã tìm hiểu về các vai trò, quy trình, ưu và nhược điểm của nhiều phương pháp tiếp cận khác nhau. Những kiến thức này có thể sẽ có ích trong việc giúp người đọc hiểu và đưa ra một lựa chọn mô hình đúng đắn cho các dự án trong tương lai.
Đáp án Bài tập Hướng dẫn
-
Tính linh hoạt có nghĩa là gì?
Tính linh hoạt thể hiện khả năng phản ứng và di chuyển nhanh chóng ở trong cả thế giới vật lý lẫn phi vật lý.
-
Theo Scrum Guide, Scrum được định nghĩa như thế nào?
-
Chủ sở hữu sản phẩm sắp xếp công việc cho một vấn đề phức tạp vào Danh mục Công việc (Product Backlog).
-
Nhóm Scrum biến một phần công việc thành một Giá trị gia tăng trong một Phiên tăng tốc.
-
Nhóm Scrum và các bên liên quan kiểm tra kết quả và điều chỉnh cho phiên tăng tốc tiếp theo.
-
Lặp lại
-
-
Tại sao Scrum có thể hoạt động tốt hơn mô hình thác nước về mặt phản hồi của khách hàng?
Do phản hồi được thu thập trong quá trình phát triển nên sản phẩm cuối cùng có thể đáp ứng được mong đợi của khách hàng một cách tốt hơn.
-
Những khía cạnh tích cực của DevOps là gì?
Tốc độ và hiệu quả — Cải thiện sự cộng tác — Phân phối liên tục — Độ tin cậy cao
Đáp án Bài tập Mở rộng
-
Tại sao mô hình thác nước không phải là mô hình tốt nhất để sử dụng trong một môi trường thay đổi nhanh chóng?
Mô hình thác nước chỉ thu thập phản hồi vào cuối quy trình phát triển. Do đó, bất kỳ yêu cầu nào bị các nhà phát triển hiểu sai đều chỉ có thể được sửa vào giai đoạn cuối. Nếu môi trường thay đổi quá nhanh, chúng ta không nên sử dụng mô hình này vì nó không có quy định về phản hồi vào giữa chu kỳ phát triển.
Điều gì có thể xảy ra khi vai trò của chuyên gia Scrum được triển khai kém hiệu quả?
+ Một Chuyên gia Scrum được triển khai kém có thể gây cản trở khả năng cung cấp các sản phẩm chất lượng cao một cách hiệu quả của nhóm phát triển và có thể làm giảm lợi ích của việc áp dụng mô hình Scrum. Nhóm phát triển có thể sẽ không có được các hướng dẫn phù hợp về các nguyên tắc và thông lệ thực hành của Scrum dẫn đến việc áp dụng khuôn khổ này sai cách hoặc không nhất quán.
+ Nếu không có một Chuyên gia Scrum hiệu quả để loại bỏ các trở ngại, chúng có thể làm chậm tiến độ và giảm năng suất của nhóm phát triển. Tình trạng giao tiếp không hiệu quả giữa các thành viên trong nhóm phát triển và các bên liên quan có thể xảy ra dẫn đến các hiểu lầm và kỳ vọng không thống nhất. Nhóm phát triển có thể bị giảm tinh thần và động lực do các vấn đề chưa được giải quyết, thiếu sự hỗ trợ và việc tạo điều kiện không hiệu quả từ các sự kiện Scrum. Sự kém hiệu quả có thể phát sinh từ các cuộc họp được tiến hành kém, thiếu tập trung và việc lập kế hoạch và đánh giá phiên tăng tốc không hiệu quả.