Quy trình phát triển phần mềm
I. Tổng quan về quy trình phát triển phần mềm
- Một quy trình tốt và hợp lí luôn tạo ra những sản phẩm đạt tiêu chuẩn. Nó giúp tương tác hóa các hoạt động và yếu tố với nhau một các nhịp nhàng, đem lại hiệu quả.
- Có thể cho rằng quy trình phần mềm đem lại chất lượng, năng suất, giá thành phần phềm, từ đó tăng tính cạnh tranh và đem lại lợi nhuận cao cho doanh nghiệp.
1. Khái niệm Quy trình phát triển phần mềm
Quy trình phát triển phần mềm là một tập hợp các hoạt động tổ chức mà mục đích của chúng là xây dựng và phát triển phần mềm.
- Những câu hỏi được đặt ra ở đâu là:
- Nhân sự: Ai sẽ làm? Ai làm gì?
- Thời gian: Khi nào làm? Làm mất bao nhiêu thời gian?
- Phương pháp: Làm như thế nào?
- Công cụ: Dùng công cụ gì để làm công việc này?
- Chi phí: Chi phí bỏ ra bao nhiêu? Thu về bao nhiêu? (ước tính)
- Mục tiêu: Mục tiêu hướng đến là gì?
- Mỗi loại hệ thống khác nhau thì cần những quy trình phát triển khác nhau.
2. Các hoạt động cơ bản của quy trình phát triển phần mềm
Có 4 thao tác là nền tảng của hầu hết các quy trình phát triển phần mềm:
- Đặc tả phần mềm: Định nghĩa được các chức năng, điều kiện hoạt động của phần mềm.
- Quy trình phát triển phần mềm: Là quá trình xây dựng các đặc tả.
- Đánh giá phần mềm: Phầm mềm phải được đánh giá để chắc chắn rằng ít nhất có thể thực hiện những gì mà tài liệu đặc tả yêu cầu.
- Tiến hóa phần mềm: Đây là quá trình hoàn thiện các chức năng cũng như giao diện để ngày càng hoàn thiện phần mềm cũng như các yêu cầu đưa ra từ phía khách hàng.
II. Các mô hình phát triển phần mềm
1. Waterfall model – Mô hình thác nước
- Mô tả
- Mô hình thác nước là mô hình áp dụng theo tính tuần tự của các giai đoạn phát triển phần mềm
- Có nghĩa là: giai đoạn sau chỉ được thực hiện tiếp khi giai đoạn trước đã kết thúc
- Không được quay lại giai đoạn trước để xử lí các thay đổi trong yêu cầu
- Đây được coi là mô hình phát triển phần mềm đầu tiên.
- Áp dụng
- Thường được áp dụng cho các dự án không thường xuyên bị thay đổi về yêu cầu.
- Đặc điểm
- Ưu điểm:
- Dễ sử dụng, dễ tiếp cận
- Các giai đoạn và hoạt động được xác định rõ ràng
- Xác nhận ở từng giai đoạn, đảm bảo phát hiện sớm các lỗi
- Nhược điểm:
- Rất khó để quay lại giai đoạn nào khi nó đã kết thúc
- Ít tính linh hoạt và phạm vi điều chỉnh của nó khá là khó khăn, tốn kém.
- Ưu điểm:
Tham khảo thêm: https://melsatar.wordpress.com/2012/03/15/software-development-life-cycle-models-and-methodologies/
2. V- Shaped Model- Mô hình chữ V
- Mô tả
- Đây là mô hình mở rộng từ mô hình thác nước
- Thay vì di chuyển xuống theo tuần tự các bước thì quy trình sẽ đi theo hình chữ V
- Áp dụng
- Yêu cầu phần mềm phải xác định rõ ràng
- Công nghệ phần mềm và các công cụ phải được tìm hiểu kĩ
- Đặc điểm
- Ưu điểm:
- Đơn giản dễ sử dụng
- Phấn phối cụ thể theo mỗi giai đoạn
- Thực hiện verification và validation sớm trong mỗi giai đoạn phát triển
- Nhược điểm:
- Phạm vi điều chỉnh khá là khó khăn và tốn kém.
- Ưu điểm:
Tham khảo thêm: https://melsatar.wordpress.com/2012/03/15/software-development-life-cycle-models-and-methodologies/
3. Spiral Model – Mô hình xoắn ốc
- Mô tả
- Là mô hình kết hợp giữa các tính năng của mô hình prototyping và mô hình thác nước.
- Mô hình xoắn ốc được ưa chuộng cho các dự án lớn, đắt tiền và phức tạp.
- Mô hình này sử dụng nhiều những giai đoạn tương tự như mô hình thác nước, về thứ tự, plan, đánh giá rủi ro, …
- Áp dụng
- Thường được sử dụng cho các ứng dụng lớn và các hệ thống được xây dựng theo các giai đoạn nhỏ hoặc theo các phân đoạn
- Đặc điểm
- Ưu điểm:
- Estimates (i.e. budget, schedule, etc.) trở nên thực tế hơn như là một quy trình làm việc, bởi vì những vấn đề quan trọng đã được phát hiện sớm hơn.
- Có sự tham gia sớm của deverlopers
- Quản lý rủi ro và phát triển hệ thống theo phase
- Nhược điểm:
- Chi phí cao và thời gian dài để có sản phẩm cuối cùng
- Phải có kỹ năng tốt để đánh giá rủi ro và giả định.
- Ưu điểm:
Tham khảo thêm: https://melsatar.wordpress.com/2012/03/15/software-development-life-cycle-models-and-methodologies/
4. Iterative Model- Mô hình tiếp cận lặp
Example:
Diagram:
- Mô tả
- Một mô hình được lặp đi lặp lại từ khi start cho đến khi làm đầy đủ spec
- Thay vì phát triển phần mềm từ spec đặc tả rồi mới bắt đầu thực thi thì mô hình này có thể review dần dần để đi đến yêu cầu cuối cùng.
- Quy trình phát triển được lặp đi lặp lại cho mỗi một version của sản phẩm trong mỗi chu kỳ.
- Áp dụng
- Yêu cầu của hề thống đã hoàn chỉnh, được xác định rõ ràng và dễ hiểu
- Yêu cầu chính cần được xác định, và một số chi tiết có thể được đổi mới theo thời gian
- Đặc điểm
- Ưu điểm:
- Xây dựng và hoàn thiện các bước sản phẩm theo từng bước
- Nhận được phản hồi của người sử dụng từ những bản phác thảo
- Thời gian làm tài liệu sẽ ít hơn so với thời gian thiết kế
- Nhược điểm:
- Mỗi giai đoạn lặp lại thì cứng nhắc
- Tốn kiến trúc hệ thống hoặc thiết kế các vấn đề có thể phát sinh nhưng không phải tất cả đều xảy ra trong toàn bộ vòng đời.
- Ưu điểm:
Tham khảo thêm: http://istqbexamcertification.com/what-is-incremental-model-advantages-disadvantages-and-when-to-use-it/https://melsatar.wordpress.com/2012/03/15/software-development-life-cycle-models-and-methodologies/
5. Incremental Model – Mô hình tăng trưởng
Example:
Diagram:
- Mô tả
- Trong mô hình này thì spec được chia thành nhiều phần.
- Chu kỳ được chia thành các module nhỏ, dễ quản lý.
- Mỗi module sẽ đi qua các yêu cầu về thiết kế, thực hiện, … như 1 vòng đời phát triển thông thường.
- Áp dụng
- Áp dụng cho những dự án có yêu cầu đã được mô tả, định nghĩa và hiểu một cách rõ ràng
- Có nhu cầu về sản phẩm sớm
- Đặc điểm
- Ưu điềm:
- Phần mềm làm việc một cách nhanh chóng trong suốt vòng đời phát triền
- Mô hình này linh hoạt hơn, ít tốn kém hơn để thay đổi phạm vi và yêu cầu
- Dễ dàng hơn trong việc kiểm tra và sửa lỗi với sự lặp lại nhỏ hơn
- Nhược điểm:
- Cần lập plan và thiết kế tốt
- Cần một định nghĩa rõ ràng và đầy đủ của toàn bộ hệ thống trước khi nó có thể được chia nhỏ và được xây dựng từng bước
- Tổng chi phí là cao hơn so với thác nước.
- Ưu điềm:
Tham khảo thêm: https://melsatar.wordpress.com/2012/03/15/software-development-life-cycle-models-and-methodologies/
6. RAD Model (Rapid Application Development)
- Mô tả
- Là một dạng của incremental model
- Trong mô hình RAD các thành phần hoặc chức năng được phát triển song song như thể chúng là các dự án nhỏ
- Việc phát triển này theo thời gian nhất định, cung cấp và lắp ráp thành một nguyên mẫu làm việc
- Điều này có thể nhanh chóng đưa ra một cái gì đó cho khách hàng để xem và sử dụng và cung cấp thông tin phản hồi liên quan đến việc cung cấp và yêu cầu của họ.
- Áp dụng
- RAD nên được sử dụng khi có nhu cầu để tạo ra một hệ thống có Modularized trong khoảng thời gian 2-3 tháng.
- Nên được sử dụng khi đã có sẵn designer cho model và chi phí cao
- Đặc điểm:
- Ưu điềm:
- Giảm thời gian phát triển.
- Tăng khả năng tái sử dụng của các thành phần
- Đưa ra đánh giá ban đầu nhanh chóng
- Khuyến khích khách hàng đưa ra phản hồi
- Nhược điểm:
- Cần có một team giỏi để xác định yêu cầu phần mềm
- Chỉ những hệ thống có module mới sứ dụng được mô hình này
- Yêu cầu về dev/ design phải có nhiều kinh nghiệm
- Phụ thuộc rất nhiều vào kỹ năng model
Tham khảo thêm Quy trình phát triển phần mềm: http://istqbexamcertification.com/what-is-rad-model-advantages-disadvantages-and-when-to-use-it/
7. Agile Model
- Mô tả
- Dựa trên mô hình iterative and incremental
- Các yêu cầu và giải pháp phát triển dựa trên sự kết hợp của các function
- Áp dụng
- Nó có thể được sử dụng với bất kỳ loại hình dự án nào, nhưng nó cần sự tham gia và tính tương tác của khách hàng. Ngoài ra, nó có thể được sử dụng khi khách hàng yêu cầu chức năng sẵn sàng trong khoảng thời gian ngắn ( 3 tuần )
- Đặc điểm
- Ưu điểm:
- Giảm thời gian cần thiết để tận dụng một số tính năng của hệ thống
- Kết quả cuối cùng là phần mềm chất lượng cao trong thời gian ít nhất có thể và sự hài lòng của khách hàng
- Nhược điểm:
- Phụ thuộc vào kỹ năng của người phát triển phần mềm Scalability
- Tài liệu được thực hiện ở giai đoạn sau
- Cần một team có kinh nghiệm Needs special skills for the team.
- Ưu điểm:
Tham khảo thêm Quy trình phát triển phần mềm: http://istqbexamcertification.com/what-is-rad-model-advantages-disadvantages-and-when-to-use-it/
8. Scrum (Scrum là một quy trình phát triển phần mềm thuộc họ agile)
Mô tả: Scrum là một phương pháp linh hoạt (agile), vì thế nó tuân thủ các nguyên tắc của Agile Manifesto (xem thêm Tuyên ngôn Agile). Ngoài ra Scrum hoạt động dựa trên ba giá trị cốt lõi, còn gọi là Ba chân của Scrum bao gồm Minh bạch, Thanh tra và Thích nghi.
III. TÌm hiểu về Mô hình Scrum
1. Khái niệm Scrum
Là một quy trình phát triển phần mềm theo mô hình linh hoạt (agile). Với nguyên tắc chủ đạo là chia nhỏ phần mềm cần sản xuất ra thành các phần nhỏ để phát triển (các phần nhỏ này phải đọc lập và Release được), lấy ý kiến khách hàng và thay đổi cho phù hợp ngay trong quá trình phát triển để đảm bảo sản phẩm release đáp ứng những gì khách hàng mong muốn. Scrum chia dự án thành các vòng lặp phát triển gọi là các sprint. Mỗi sprint thường mất 2- 4 tuần (30 ngày) để hoàn thành. Nó rất phù hợp cho những dự án có nhiều sự thay đổi và yêu cầu tốc độ cao.
2. Một số đặc điểm của Quy trình phát triển phần mềm SCRUM
-
- Scrum (hay agile nói chung) được xếp vào nhóm “Feature-driven development”. Sản phầm được phát triển theo tính năng, chứ không phát triển sản phẩm theo kiến trúc hệ thống.
Scrum khác với các mô hình Agile ở chỗ nó là mô hình hướng khách hàng (Customer oriented), vai trò của khách hàng trong việc đánh giá sản phẩm rất quan trọng. Chỉ sau mỗi sprint (2-4 tuần) khách hàng sẽ thấy được sự thay đổi của sản phẩm của mình qua đó đưa ra phản hồi sớm để định hướng -> Thích ứng nhanh với sự thay đổi yêu cầu.
-
- Scrum giảm thiểu tài nguyên dành cho việc quản lý mà tập trung nhiều hơn cho những công việc liên quan trực tiếp đến việc làm ra sản phẩm. Bằng cách giảm vai trò quản lý (PM) bằng cách đẩy việc quản lý tới từng người.
- Giảm thời gian dành cho việc viết tài liệu bằng cách tăng thời gian trao đổi trực tiếp. Thông thường khi estimate công việc, thì team estimate cả thời gian dành cho communication để hoàn thành task đó nữa.
- Tập trung vào sản phẩm, sản phẩm mới là đích cuối cùng chứ không phải qui trình.
Tham khảo thêm: Tuyển dụng lập trình Scrum lương cao tại Topdev.
3. Ưu điểm, nhược điểm của mô hình Scrum
ƯU ĐIỂM:
- Một người có thể làm nhiều việc ví dụ như dev có thể test
- Phát hiện lỗi sớm hơn rất nhiều so với các phương pháp truyền thống
- Khách hàng nhanh chóng thấy được sản phẩm qua đó đưa ra phản hồi sớm.
- Có khả năng áp dụng được cho những dự án mà yêu cầu khách hàng không rõ ràng ngay từ đầu.
NHƯỢC ĐIỂM:
- Trình độ của nhóm là có một kỹ năng nhất định
- Phải có sự hiểu biết về mô hình aglie .
- Khó khăn trong việc xác định ngân sách và thời gian.
- Luôn nghe ý kiến phản hồi từ khách hàng và thay đổi theo nên thời gian sẽ kéo dài khi có quá nhiều yêu cầu thay đổi từ khách hàng.
- Vai trò của PO (Product Owner) rất quan trọng, PO là người định hướng sản phẩm. Nếu PO làm không tốt sẽ ảnh hưởng đến kết quả chung.
4. Các nhân tố cấu tạo lên 1 quy trình phát triển phần mềm trong Scrum
Một cách đơn giản có 03 thành tố quan trọng cấu thành nên SCRUM: Tổ chức (Organization), Qui trình (Process), Tài liệu (Atifacts). Trong mỗi thành tố có 03 thành tố con. Như vậy, chúng ta chỉ cần hiểu và áp dụng được 9 thành tố này là có thể áp dụng SCRUM.
- Tổ chức (Organization): Tổ chức nhóm dự án và Roles (Vài trò)
-
- Product Owner (Người sở hữu sản phẩm)
- ScrumMaster (Người điều phối )
- Development Team (Nhóm phát triển)
-
- Tài liệu (Atifacts): các kết quả đầu ra
-
- Product Backlog (Danh sách các chức năng cần phát triển của sản phẩm)
- Sprint Backlog (Danh sách các chức năng cần phát triển cho mỗi giai đoạn)
- Estimation (Kết quả ước lượng của Team)
-
- Qui trình(Process): Qui định cách thức vận hành của SCRUM
-
- Sprint Planning meeting (Họp để hoạch định cho mỗi giai đoạn)
- Sprint Review (Họp để tổng kết cho mỗi giai đoạn)
- Daily Scrum Meeting (Họp review hàng ngày)
-
4.1 Tổ chức của dự án(Organization)
- Product Owner
Product Owner là người sở hữu sản phẩm, người quyết định sản phẩm có những chức năng nào và là người quyết định Product Backlog, họ sẽ tham gia 1 phần vào quy trình phát triển phần mềm. Thông thường Role này được khách hàng hoặc người đại diện cho khách hàng đảm nhận.
- ScrumMaster
Scrum Master là người đảm bảo các qui trình của Scrum được thực hiện đúng và thuận lợi, giúp đỡ cho Team thực hiện công việc phát triển sản phẩm một cách tốt nhất.
- Development Team (Nhóm phát triển)
Một nhóm từ 4-7 kỹ sư phần mềm chịu trách nhiệm phát triển sản phẩm. Nhóm dự án phải làm việc với Product Owner để quyết định những gì sẽ làm trong Sprint (giai đoạn )này và kết quả sẽ ra sao. Đồng thời nhóm cũng thảo luận để đưa ra các giải pháp, ước lượng thời gian thực hiện công việc, họp đánh giá kết quả công việc. Nếu dự án lớn chúng ta cần chia ra thành các dự án nhỏ.
4.2 Tài liệu (Atifacts)
- Product Backlog
Product Backlog là danh sách các chức năng cần được phát triển của sản phẩm trong quy trình phát triển phần mềm. Danh sách này do Product Owner quyết định. Nó thường xuyên được cập nhật để đáp ứng được nhu cầu thay đổi của khách hàng cũng như các điều kiện của dự án.
- Sprint Backlog
Sprint là một giai đoạn phát triển trong quá trình phát triển sản phẩm, nó được khuyến khích có chiều dài từ 2 – 4 tuần. Mỗi Sprint được xác định bằng thời gian phát triển, danh sách các chức năng phát triển (Sprint Backlog).
Mỗi sprint phải Release được sản phẩm để đảm bảo lấy được ý kiến khách hàng, qua được các qui trình phát triển của sản phẩm nhằm rút kinh nghiệm và tránh sự cố sau này.
Sprint Backlog là danh sách chức năng phát triển trong Sprint, nó được quyết định bởi cuộc họp Sprint Planning. Sprint Backlog là các chức năng được chọn từ Product Backlog dựa trên mức độ ưu tiên và khả năng của team phát triển.
- Estimation (ước lượng)
Trong SCRUM thì các thành viên của Team sẽ tự lựa chọn Task cho mình và ước lượng thời gian phát triển dự kiến và chịu trách nhiệm với ước lượng này. Sau khi hoàn thành sẽ cập nhật vào bảng Sprint Backlog.
4.3 Qui trình(Process)
- Sprint Planning meeting (Họp lập kế hoạch cho mỗi Sprint)
Như chúng ta đã biết ở trên Sprint là một giai đoạn phát triển có thời gian từ 2-4 tuần. Để chuẩn bị cho mỗi Sprint team cần phải họp để xác định những chức năng nào (story) sẽ phát triển trong giai đoạn này (sprint backlog), kết quả đầu ra dự kiến (Goal, kết quả Release), Estimate (ước lượng ai làm việc gì) và thảo luận các giải pháp. Tất cả được ghi thành biên bản để có cơ sở thực hiện và Review sau này.
- Sprint Review
Là cuộc họp để đánh giá lại kết quả thực hiện của Sprint vừa qua, xác định những chức năng được Release, những chức năng tiếp tục sửa hoặc phát triển thêm, xác định những vấn đề phát sinh và bàn phương án giải quyết, bổ sung Product Backlog v….
- Daily Scrum Meeting (hay còn gọi là Standup Meeting)
- Daily Scrum Meeting là cuộc họp hàng ngày và được đề nghị không quá 15 phút và họp đứng để đảm bảo thời gian họp không bị kéo dài vào đầu mỗi ngày, mỗi thành viên chỉ trả lời 3 câu hỏi:
-
-
- Phát sinh vấn đề gì trong quy trình phát triển phần mềm?
- Hôm nay bạn sẽ làm gì
- Hôm qua bạn làm được gì?
- Nếu thành viên gặp vấn đề thì nên làm việc riêng để giải quyết để không mất nhiều thời gian của các thành viên. Scrum Master phải đảm bảo cuộc họp này được thực hiện đúng qui định.
- Các Sprint sẽ được lặp đi lặp lại cho tới khi nào các hạng mục trong Product Backlog đều được hoàn tất hoặc khi Product Owner quyết định có thể dừng dự án căn cứ tình hình thực tế. Do sử dụng chiến thuật “có giá trị hơn làm trước” nên các hạng mục mang lại nhiều giá trị hơn cho chủ dự án luôn được hoàn tất trước. Do đó Scrum luôn mang lại giá trị cao nhất cho người đầu tư cho dự án. Do quy trình luôn luôn được cải tiến, nhóm Scrum thường có năng suất lao động rất cao. Đây là hai lợi ích to lớn mà quy trình phát triển phần mềm Scrum mang lại cho tổ chức.
-
IV. So sánh mô hình Scrum và mô hình waterfall, Sprial
Đặc điểm | Waterfall | Spiral | Scrum |
Xác định các giai đoạn phát triển | Bắt buộc | Bắt buộc | Chỉ có giai đoạn lập kế hoạch và kết thúc |
Sản phẩm cuối cùng | Được xác định trong quá trình lập kế hoạch | Được xác định trong quá trình lập kế hoạch | Xác định trong suốt quá trình dự án |
Chi phí sản xuất | Được xác định trong quá trình lập kế hoạch | Thay đổi cục bộ | Xác định trong quá trình xây dựng dự án |
Ngày hoàn thành sản phẫm | Được xác định trong quá trình lập kế hoạch | Thay đổi cục bộ | Xác định trong quá trình xây dựng dự án |
Via Techtalk
Có thể bạn muốn xem thêm:
- Phát triển phần mềm: Từ nghiệp dư thành chuyên nghiệp
- Chu Kỳ Phát Triển Phần Mềm (SDLC)
- Các vai trò trong một team phát triển phần mềm
Xem thêm tin tuyển dụng Developer tại TopDev!
- G Giải Quyết Bài Toán Kinh Doanh Bằng Big Data và AI
- B BenQ RD Series – Dòng Màn Hình Lập Trình 4k+ Đầu Tiên Trên Thế Giới
- F Framework nào tốt nhất cho dự án của bạn? – Checklist chi tiết
- K Kinh nghiệm xử lý responsive table hiệu quả
- S Stackoverflow là gì? Bí kíp tận dụng Stack Overflow hiệu quả
- 7 7 kinh nghiệm hữu ích khi làm việc với GIT trong dự án
- B Bài tập Python từ cơ bản đến nâng cao (có lời giải)
- B Bảo mật API là gì? Một số nguyên tắc và kỹ thuật cần biết
- H Hướng dẫn cài đặt và tự học lập trình Python cơ bản từ A-Z
- C Chinh Phục Phân Tích Dữ Liệu Với Pandas Trong Python: Hướng Dẫn Từng Bước