SDLC không phải là một khái niệm mới và đã rất quen thuộc với những ai làm việc trong lĩnh vực phát triển phần mềm. SDLC đề cập đến một phương pháp luận (methodology) với các quy trình được xác định rõ ràng để tạo ra phần mềm chất lượng cao.
Vậy chính xác SDLC là gì? Chúng ta hãy cùng tìm hiểu về SDLC, các mô hình phổ biến và các kỹ năng cần thiết để làm việc tốt với các mô hình trong bài viết này.
SDLC là gì?
SDLC là từ viết tắt của Software Development Life Cycle (vòng đời phát triển phần mềm). SDLC là một quy trình phát triển phần mềm với chất lượng cao nhất và chi phí thấp nhất trong thời gian ngắn nhất có thể.
SDLC là chia nhỏ quy trình phát triển phần mềm thành các giai đoạn, từ ý tưởng đến triển khai. SDLC được sử dụng để giúp các nhóm phát triển tối ưu hóa quy trình làm việc của họ và làm cho nó có thể mở rộng mà vẫn đảm bảo chất lượng.
SDLC bao gồm bảy giai đoạn chính của vòng đời phát triển phần mềm hiện đại. Các mô hình SDLC phổ biến bao gồm mô hình thác nước (waterfall model), mô hình xoắn ốc (spiral model), mô hình Agile và một số mô hình khác mà bạn có thể tìm thấy trong phần 2 của bài viết.
Lợi ích của SDLC
SDLC cung cấp một cái nhìn tổng thể về toàn bộ hệ thống, tài nguyên, dòng thời gian và mục tiêu của một dự án phầm mềm. Các nhà phát triển phần mềm hiểu họ nên xây dựng những gì và tại sao. Các lý do chính tại sao SDLC là cần thiết để phát triển một hệ thống phần mềm:
- Sử dụng SDLC có thể dễ dàng đo lường sự tăng trưởng và chi phí của hệ thống đã phát triển.
- SDLC tăng cường kiểm soát và giám sát các dự án quan trọng hoặc phức tạp.
- SDLC bao gồm các bước chi tiết và toàn diện.
- Các đánh giá thiết kế giúp đảm bảo độ tin cậy và chất lượng của giải pháp đã phát triển.
- SDLC cung cấp tài liệu mở rộng về hệ thống.
- Nếu một thành viên chính của dự án rời đi, một thành viên mới có thể tiếp tục nơi họ đã dừng lại.
- SDLC giúp đánh giá, lập lịch và ước tính các sản được triển khai.
- SDLC đảm bảo bàn giao phần mềm chính xác và kịp thời cho khách hàng.
- Cung cấp framework cho một tập hợp các hoạt động và sản phẩm tiêu chuẩn
- Cải thiện tốc độ phát triển phần mềm
Các giai đoạn SDLC
Số lượng giai đoạn SDLC có thể thay đổi tùy theo các công ty, nhưng hầu hết các SDLC bao gồm sáu hoặc bảy giai đoạn.
1. Thu thập và phân tích thông tin (Requirement Analysis)
Giai đoạn này là đi tìm câu trả lời cho câu hỏi “Các vấn đề hiện tại là gì?”.
Giai đoại đầu tiên của SDLC là về việc quyết định những gì bạn sẽ phát triển. Có thể nói giai đoạn này là quan trọng bật nhất của cả quy trình SDLC. Nếu bạn đang phát triển cho khách hàng, giai đoạn này có thể sẽ bao gồm các cuộc họp để thảo luận về nhu cầu, mục tiêu và kỳ vọng của họ. Nếu bạn đang phát triển một phần mềm nội bộ, các việc có thể bao gồm phân tích thị trường hoặc phân tích đối thủ cạnh tranh, phỏng vấn khách hàng và kiểm tra các mục tiêu của công ty bạn. Ở cấp cao, bạn cần biết những vấn đề bạn đang cố gắng giải quyết và cách giải quyết.
Kết quả của giai đoạn Requirement Analysis:
Kết quả của giai đoạn này là tài liệu đặc tả yêu cầu phần mềm (Software Requirements Specification hay SRS), đóng vai trò là điểm khởi đầu cho giai đoạn phát triển tiếp theo. Điều quan trọng cần lưu ý là giai đoạn đặc tả và phân tích yêu cầu chỉ tập trung vào những gì hệ thống phần mềm nên làm chứ không phải vào cách nó nên được thực hiện; nghĩa là, các chi tiết triển khai không được phép ảnh hưởng đến giai đoạn này. Yêu cầu phần mềm có thể được phân thành hai loại: yêu cầu chức năng và yêu cầu phi chức năng, và SRS cần bao gồm cả hai loại yêu cầu này.
2. Lập kế hoạch (Planning hay Defining)
Giai đoạn này là đi tìm câu trả lời cho câu hỏi “Chúng ta muốn gì? “
Thông thường, bạn thực hiện quá trình lập kế hoạch sau khi phân tích yêu cầu sau khi bạn đã có đầy đủ dữ liệu và chọn những gì cần phát triển. Trong giai đoạn SDLC thứ hai này chúng ta cần xác định một số yếu tố:
- Ai sẽ lãnh đạo dự án
- Kết quả đầu ra hoặc triển khai dự kiến
- Số lượng các developer cần thiết cho dự án
- Dự án sẽ mất khoảng bao nhiêu thời gian
- Ngân sách cần thiết cho dự án
- Mọi cân nhắc về dự án cụ thể khác
Kết quả của giai đoạn lập kế hoạch:
Kết quả đầu ra của giai đoạn lập kế hoạch bao gồm: kế hoạch dự án, thời gian thực hiện chi tiết, ước tính chi phí và các yêu cầu mua sắm. Các tài liệu trong giai đoạn này thường bao gồm:
- Project Management Plan
- Project Charter (điều lệ) document
3. Thiết kế (Designing)
Giai đoạn này chúng ta đi tìm câu trả lời cho câu hỏi “Làm thế nào chúng xây được những gì chúng ta muốn? “
Giai đoạn thứ ba của SDLC tập trung vào việc thiết kế phần mềm mà bạn sẽ phát triển, bao gồm:
- Kiến trúc: Bạn sử dụng ngôn ngữ lập trình nào để xây dựng sản phẩm của mình? Các phương pháp tốt nhất trong ngành mà bạn đang xây dựng là gì? Cũng bao gồm các câu hỏi liên quan đến việc sử dụng các mẫu.
- Giao diện người dùng: Bạn mong đợi người dùng tiềm năng sẽ tương tác với sản phẩm như thế nào? Làm thế nào bạn sẽ làm cho điều đó dễ dàng hơn cho họ?
- Nền tảng: Sản phẩm của bạn sẽ chạy trên nền tảng gì? Trong giai đoạn này, một nhà phát triển trò chơi sẽ tự hỏi họ sẽ xuất bản bảng điều khiển nào, trong khi một nhà phát triển thiết bị di động sẽ quyết định xem họ sẽ tạo ứng dụng cho Apple, Android hay cả hai.
- Lập trình: Bạn đã tìm ra ngôn ngữ lập trình, nhưng bây giờ bạn sẽ làm thế nào để vượt qua những thách thức lập trình trong quá trình phát triển?
- Liên kết: Sản phẩm của bạn sẽ phải giao tiếp với những nội dung nào? Một máy chủ trung tâm? Các ứng dụng khác? Làm thế nào điều này sẽ xảy ra?
- Bảo mật: Bạn sẽ bảo vệ sản phẩm của mình như thế nào trước những nguy cơ tiềm ẩn? Bạn có phải tuân theo các yêu cầu bảo mật nhất định không? Bạn có được truy cập vào thông tin người dùng nhạy cảm cần được bảo vệ không?
Việc thiết kế này gần giống như việc tổng hợp các phương án kiến trúc và thiết kế nội thất của một ngôi nhà mới trước khi bạn xây dựng nó.
Kết quả của giai đoạn thiết kế:
Vào cuối giai đoạn này, tài liệu thiết kế (Software Design Document – SDD) được hoàn thành. SDD sẽ được xem xét bởi tất cả các bên liên quan (stackholders) và dựa trên các thông số khác nhau như đánh giá rủi ro, tính lâu dài của phầm mềm, các mô-đun thiết kế, hạn chế về ngân sách và thời gian, phương pháp thiết kế tốt nhất được lựa chọn cho sản phẩm…
4. Phát triển (Development)
Đã đến lúc “Tạo những gì chúng ta muốn”.
Giai đoạn phát triển là giai đoạn mà cácdeveloper thực sự viết code và xây dựng ứng dụng theo các tài liệu thiết kế và các thông số kỹ thuật đã vạch ra, sử dụng ngôn ngữ lập trình và framework đã được chọn. Các developer sẽ tuân theo mọi nguyên tắc viết code của công ty và sử dụng các công cụ khác nhau như trình biên dịch, trình gỡ lỗi và trình thông dịch. Các nhiệm vụ được chia thành các đơn vị hoặc mô-đun và được phân bổ cho các nhà phát triển cụ thể.
Kết quả của giai đoạn phát triển: các chứng năng của phần mềm mà chúng ta cần xây dựng
5. Kiểm thử (Testing)
Liệu “Chúng ta đã đạt được những gì chúng ta muốn chưa? “
Khi code hoàn tất, quá trình kiểm tra bắt đầu và các mô-đun được đánh giá và kiểm tra để tránh bất kỳ lỗi nào. Phần mềm đã xây dựng được xem xét toàn diện trong quá trình này và bất kỳ vấn đề nào được tìm thấy đều được giao cho các developers sửa chữa, thay đổi.
Kiểm tra lại và kiểm tra hồi quy được tiến hành cho đến khi phần mềm đúng như kế hoạch của người sử dụng. Tester thường tham khảo tài liệu SRS để đảm bảo phần mềm phù hợp với tiêu chuẩn của khách hàng hay yêu cầu.
Kết quả của giai đoạn kiểm thử:
- Sản phẩm hoàn thiện hơn sau các lỗi được chỉnh sửa hoặc các yêu cầu còn thiếu được phát triển
- Testing report
- User Acceptant Test
6. Triển khai (Deployment)
“Hãy bắt đầu sử dụng những gì chúng ta đã xây dựng”
Ở giai đoạn này, mục tiêu là triển khai phần mềm tới môi trường production để người dùng có thể bắt đầu sử dụng. Tuy nhiên, nhiều công ty chọn triển khai phần mềm qua các môi trường triển khai khác nhau như môi trường thử nghiệm (testing) hoặc môi trường dàn dựng (staging).
Điều này cho phép bất kỳ bên liên quan nào có thể trải nghiệm phần mềm một cách an toàn trước khi đưa ra sử dụng chính thức. Bên cạnh đó, điều này cho phép mọi sai sót cuối cùng được phát hiện và chỉnh sửa trước khi phát hành.
Kết quả của giai đoạn triển khai:
Giai đoạn Ttriển khai hoàn thành khi phần mềm đã được đưa vào hoạt động thành công và thỏa mãn tất cả các yêu cầu kinh doanh và kỹ thuật thông qua việc xem xét và ký tên của các bên liên quan trong Implementation Report (báo cáo triển khai), và Maintenance Manual (Sổ tay Bảo trì) đã được giao cho mhóm bảo trì phần mềm, Training Manual (tài liệu đào tạo) đã được chuyển cho trainer / user và Tài liệu hướng dẫn sử dụng đã được chuyển đến người sử dụng.
7. Bảo trì
“Hãy giữ cho sản phẩm của chúng ta ổn định”
Sau khi triển khai một sản phẩm trên môi trường production, việc bảo trì sản phẩm sẽ bắt đầu. Trong giai đoạn này bất kỳ vấn đề nào xuất hiện cần được khắc phục hoặc bất kỳ cải tiến nào cần thực hiện sẽ được đánh giá và triển khai. Trong một số trường hợp, quy trình SDLC có thể lặp lại từ đầu (phát triển chức năng mới, thay đổi lớn trong phần mềm..)
Kết quả của giai đoạn bảo trì:
Một số kết quả của giai đoạn bảo trì là hệ thống hoạt động một cách hiệu quả nhất, phần mềm được cập nhật khi cần thiết và được nâng cấp khi có yêu cầu.
Các phương pháp SDLC
Có nhiều mô hình (hay phương pháp) vòng đời phát triển phần mềm khác nhau được áp dụng trong quá trình phát triển phần mềm. Mỗi mô hình quy trình tuân theo một chuỗi các bước duy nhất cho kiểu của nó để đảm bảo sự thành công trong quá trình phát triển phần mềm. Chúng ta hãy cùng điểm qua một số phương pháp phổ biến:
Mô hình thác nước (Waterfall)
Mô hình thác nước là mô hình lâu đời nhất trong tất cả các phương pháp SDLC. Nó tuyến tính và đơn giản và yêu cầu các nhóm phát triển hoàn thành một giai đoạn của dự án trước khi chuyển sang giai đoạn tiếp theo.
Mỗi giai đoạn có một kế hoạch dự án riêng biệt và lấy thông tin từ giai đoạn trước để tránh các vấn đề tương tự (nếu gặp phải). Tuy nhiên, nó dễ bị trì hoãn và có thể dẫn đến các vấn đề lớn phát sinh cho các nhóm phát triển dù chỉ với các chi tiết nhỏ chưa hoàn thiện trong một giai đoạn nào đó.
Phương pháp Agile
Phương pháp agile ưu tiên các chu kỳ phát hành nhanh và liên tục, sử dụng các thay đổi nhỏ nhưng gia tăng giữa các bản phát hành. Điều này dẫn đến nhiều lần lặp lại và nhiều thử nghiệm hơn so với các mô hình khác. Về mặt lý thuyết, mô hình này giúp các nhóm giải quyết các vấn đề nhỏ khi chúng phát sinh thay vì bỏ sót chúng cho đến các giai đoạn phức tạp hơn của một dự án.
Hạn chế của mô hình này là quá chú trọng vào tương tác với khách hàng có thể dẫn dự án đi sai hướng trong một số trường hợp.
Phương pháp lặp lại (Iterative)
Phương pháp lặp đi lặp lại liên quan đến việc nhanh chóng tạo ra một phiên bản của phần mềm và sau đó cải tiến nó lặp đi lặp lại trong các phiên bản tiếp theo. Bạn có thể phát triển nhiều phiên bản trước khi bạn nhận được sản phẩm hoàn thiện. Điều đó làm cho phương pháp này hơi khó để vạch ra trong SDLC, nhưng nó vẫn là một lựa chọn ưu tiên cho các nhóm nhỏ, phát triển nhanh.
Phương pháp này có vẻ tương tự như Agile, nhưng nó có một vài điểm khác biệt. Đầu tiên, phương pháp lặp lại không liên quan đến khách hàng bên ngoài trong các giai đoạn khác nhau. Ngoài ra, phạm vi của mỗi lần lặp lại là cố định, tương tự như các yêu cầu trong mô hình thác nước.
Phương pháp hình chữ V (V-shaped)
Phương pháp luận này tương tự như mô hình thác nước; nó thể hiện sự phụ thuộc của từng giai đoạn trong SDLC của bạn. Sự khác biệt chính là chúng được biểu diễn dưới dạng hình chữ V chứ không phải là mô hình tuyến tính. Mọi giai đoạn dẫn đến việc triển khai – thực hiện – sản phẩm phần mềm mà bạn đang làm việc dẫn đến nhánh đầu tiên của V. Triển khai là một giai đoạn phẳng ngắn ở phía dưới, trước khi dẫn đến kiểm tra, xác minh và bảo trì liên tục trên nhánh bên kia của chữ V.
Phương pháp luận này hoạt động tốt cho các dự án đòi hỏi nhiều sự kiểm soát và có các yêu cầu được xác định rõ ràng và không thay đổi.
Phương pháp xoắn ốc (spiral)
Phương pháp tiếp cận Xoắn ốc (spiral) có thể là phương pháp phức tạp nhất trong số các phương pháp SDLC nhưng cũng là phương pháp linh hoạt nhất. Hãy tưởng tượng một hình xoắn ốc lặp lại trong đó mỗi vòng lặp đại diện cho một giai đoạn của dự án của bạn. Trong phương pháp xoắn ốc, không phải mọi dự án đều có số vòng lặp giống nhau. Khi bắt đầu mỗi vòng lặp hoặc giai đoạn, nhóm phải xem xét lại các mục tiêu và rủi ro của dự án, phát triển phiên bản tiếp theo của sản phẩm, sau đó xem xét và lập kế hoạch cho giai đoạn tiếp theo. Phương pháp xoắn ốc thậm chí có thể xác định rằng cách tiếp cận Waterfall hoặc Agile là cần thiết cho các vòng lặp cụ thể.
Bởi vì nó rất năng động và linh hoạt, việc kết hợp Spiral vào một SDLC có thể là một thách thức. Bạn cần phải biết rõ ai phụ trách từng dự án, cách xác định số lượng vòng lặp và giai đoạn nào cần được lặp lại.
Phương pháp Big Bang
Mô hình Big Bang cực kỳ linh hoạt và không tuân theo một quy trình hoặc thủ tục nghiêm ngặt. Nó thậm chí còn không có kế hoạch chi tiết. Big Bang yếu được sử dụng để phát triển các ý tưởng rộng khi khách hàng hoặc khách hàng không chắc chắn những gì họ muốn.
Đầu ra của phương pháp này có thể gần hơn hoặc xa so với những gì khách hàng mong muốn. Mô hình này chỉ được sử dụng cho các dự án nhỏ. Không có đội thử nghiệm và không có thử nghiệm chính thức nào được thực hiện, và đây có thể là một nguyên nhân dẫn đến sự thất bại của dự án.
DevOps
DevOps là phương pháp mới nhất. DevOps mang đến sự kết hợp giữa phát triển (Dev) và vận hành (Ops) ở tất cả các giai đoạn của quy trình SDLC. Sự hợp tác và chia sẻ trách nhiệm này giúp đảm bảo rằng sản phẩm được phát triển vận hành tốt trong quá trình phát triển.
Trong mô hình DevOps, các nhóm Nhà phát triển và Vận hành làm việc cùng nhau chặt chẽ để đẩy nhanh sự đổi mới và triển khai các chức năng và sản phẩm phần mềm chất lượng cao hơn, đáng tin cậy hơn. Cập nhật cho các sản phẩm là nhỏ nhưng thường xuyên. Kỷ luật, phản hồi liên tục và cải tiến quy trình cũng như tự động hóa các quy trình phát triển thủ công là tất cả các điểm nổi bật của mô hình DevOps.
Các developer cần phát triển kỹ năng gì để làm việc tốt với SDLC?
Các phương pháp SDLC có một điểm giống nhau: làm việc theo nhóm. Để làm việc tốt với bất kỳ mô hình SDLC nào, bạn có các kỹ năng mềm sau:
- Giao tiếp – Các nhà phát triển phải giao tiếp với đồng đội và các bên liên quan mọi lúc. Họ cần có kỹ năng giao tiếp bằng nhiều phương thức khác nhau.
- Hợp tác – Làm việc đơn độc không hoạt động trong một dự án phần mềm lớn. Mỗi thành viên trong nhóm phải có khả năng đồng bộ hóa các nỗ lực của họ với các đồng nghiệp của họ.
- Tính linh hoạt – Các phương pháp luận phát triển phần mềm như Agile và DevOps đều hướng đến khả năng thích ứng và linh hoạt. Bạn phải có khả năng xoay sở với bất kỳ thay đổi đột ngột nào về hướng của dự án trong khi vẫn tập trung vào mục tiêu cuối cùng.
- Chú ý đến chi tiết – Lỗi của developer có thể làm tăng thời gian của vòng đời phát triển phần mềm. Thậm chí tệ hơn, một sai sót hoặc sự giám sát quá mức có thể dẫn đến sản phẩm cuối cùng không ổn định.
- Ý thức bảo mật – Với sự gia tăng của tội phạm mạng, hầu hết các nhóm phần mềm hiện áp dụng cách tiếp cận ưu tiên bảo mật để phát triển phần mềm. Mọi người trong nhóm phải suy nghĩ về bảo mật và quyền riêng tư dữ liệu khi thực hiện ngay cả những thay đổi có vẻ nhỏ nhất.
Nếu bạn có sự kết hợp phù hợp giữa kỹ năng kỹ thuật và kỹ năng mềm, bạn có thể phát triển mạnh trong một môi trường với các mồ hình SDLC phù hợp
Nguồn tham khảo:
- SDLC: Software Development Life Cycle Phases and Methodologies
- Software Development Life Cycle (SDLC): Making Sense of the Different Methodologies