
Chào mọi người, trong bài này, mình sẽ giải thích một cách đơn giản và dễ hiểu về hai khái niệm cơ bản mà bất kỳ ai làm trong ngành IT cũng cần nắm vững: Phần mềm là gì? và Dự án phần mềm hoạt động như thế nào?
1. Phần mềm là gì?
Trong vài năm trở lại đây, phần mềm đã trở thành 1 phần thiết yếu trong cuộc sống của mỗi chúng ta. Các bạn vẫn có thể sống mà không cần phần mềm, nhưng chúng ta không thể phủ nhận lợi ích mà chúng đem lại.
Vậy thực sự mọi người có hiểu phần mềm là gì không? Để mình lấy 1 ví dụ cho dễ hình dung nhé. Nếu phần cứng là "thân xác" của máy tính, thì phần mềm chính là "linh hồn" giúp "thân xác" đó hoạt động và thực hiện các chức năng cụ thể. Nó là tập hợp các chương trình, mã lệnh và dữ liệu, được thiết kế để thực hiện các nhiệm vụ cụ thể.
Ví dụ:
Khi bạn lướt Shopee, bạn chọn và đặt hàng sản phẩm muốn mua, bạn đang tương tác với các phần mềm chuyên dụng.
Khi bạn soạn thảo văn bản trên Word, tính toán trên Excel, hay thuyết trình trên PowerPoint, bạn đang sử dụng các phần mềm ứng dụng
Thậm chí, khi bạn sử dụng điện thoại, máy tính, bạn đang tương tác với phần mềm "hệ thống" - hay là các hệ điều hành.
Nói tóm lại, phần mềm là sản phẩm "vô hình" của trí tuệ con người. Phần mềm hiện diện khắp nơi trong cuộc sống, giúp chúng ta làm việc, học tập, giải trí và kết nối với thế giới.
2. Dự án phần mềm hoạt động như thế nào?
Về tổng quan thì dự án phần mềm là một tập hợp các hoạt động được tổ chức và quản lý để tạo ra một sản phẩm phần mềm hoàn chỉnh.
Cho dễ hiểu bạn có thể coi như việc làm phần mềm cũng như xây nhà vậy, sẽ có đội ngũ thiết kế, đội ngũ thi công/triển khai, các đơn vị đảm bảo chất lượng, tiến độ và nghiệm thu sản phẩm.
Trong 1 dự án phần mềm sẽ có các thành phần tham gia như:
Khách hàng(end-user hoặc client/customer hoặc sponsor): Người có nhu cầu sử dụng/phát triển phần mềm.
Quản lý dự án (PM): Người quản lý dự án, đảm bảo dự án hoàn thành đúng tiến độ, ngân sách và chất lượng.
Business Analyst (BA): Người phân tích nghiệp vụ, "phiên dịch" ngôn ngữ của khách hàng sang ngôn ngữ của đội ngũ kỹ thuật, đảm bảo phần mềm đáp ứng đúng nhu cầu của khách hàng.
Developer: Người phát triển phần mềm, viết mã và xây dựng phần mềm.
Tester: Người kiểm thử phần mềm, tìm kiếm lỗi và đảm bảo chất lượng.
Ngoài ra còn có nhiều thành viên khác, mỗi người đều có vai trò quan trọng trong việc tạo ra phần mềm như đội ngũ pháp lý (đảm bảo các tính năng tuân thủ pháp luật/quy chế quy định), các bên cố vấn...
Quá trình phát triển phần mềm thường có nhiều giai đoạn và có nhiều cách áp dụng khác nhau tuỳ dự án và công ty:
Các giai đoạn chính: (Hay còn được coi là vòng đời của phần mềm - SDLC)
Khởi tạo: Xác định mục tiêu, phạm vi và nguồn lực của dự án.
Phân tích: Nghiên cứu, thu thập và phân tích yêu cầu của khách hàng.
Thiết kế: Thiết kế kiến trúc, giao diện và chức năng của phần mềm.
Phát triển: Viết mã, xây dựng và kiểm thử phần mềm.
Triển khai: Cài đặt và đưa phần mềm vào sử dụng.
Bảo trì: Sửa lỗi, nâng cấp và bảo trì phần mềm.
Dựa trên các giai đoạn, và cách ứng dụng khác nhau mà sinh ra các phương pháp phát triển phần mềm. Ở đây mình sẽ chỉ đề cập đến 2 mô hình được coi là phổ biến nhất tại thời điểm hiện tại:
Mô hình Waterfall:
Áp dụng đầy đủ các giai đoạn SDLC và xảy ra 1 cách tuần tự. Tức là sau khi dự án được khởi tạo thì bước phân tích mới được diễn ra. Tương tự cho các bước khác trong vòng đời.
Ưu điểm:
Dễ hiểu và áp dụng.
Dễ quản lý & theo dõi tiến độ.
Tài liệu đầy đủ, dễ bảo trì và nâng cấp.
Nhược điểm:
Không linh hoạt, khó thích ứng với thay đổi yêu cầu.
Khó phát hiện lỗi sớm, có thể dẫn đến chi phí sửa lỗi cao.
Khách hàng chỉ được nhìn thấy sản phẩm cuối cùng, có thể không đáp ứng được mong đợi.
Mô hình Agile-Scrum:
Ngược lại với Waterfall, Agile hướng tới sự linh hoạt, thích nghi với thay đổi. Trong mô hình Agile, dự án được chia thành nhiều chu kỳ ngắn (sprint), mỗi sprint tập trung vào việc phát triển và hoàn thiện một phần nhỏ của phần mềm.
Trong mỗi sprint, team dự án hoàn toàn có thể triển khai đủ các giai đoạn của SDLC từ khâu thiết kế, phân tích tới bảo trì hoặc nâng cấp (các tính năng được nâng cấp là tính năng đã làm ở sprint trước đó và cần được cải thiện).
Ưu điểm:
Linh hoạt, thích ứng nhanh chóng với thay đổi yêu cầu.
Phát hiện lỗi sớm, giảm thiểu chi phí sửa lỗi.
Khách hàng được tham gia vào quá trình phát triển, đảm bảo sản phẩm đáp ứng được mong đợi.
Nhược điểm:
Khó quản lý với các dự án lớn và phức tạp.
Yêu cầu sự phối hợp chặt chẽ giữa các thành viên trong nhóm.
Tài liệu có thể không đầy đủ như Waterfall.
Việc lựa chọn mô hình Waterfall hay Agile phụ thuộc vào đặc thù của từng dự án:
Waterfall phù hợp với các dự án có yêu cầu rõ ràng, ít thay đổi và cần tài liệu chi tiết.
Agile phù hợp với các dự án có yêu cầu thay đổi thường xuyên, cần sự linh hoạt và phản hồi nhanh chóng từ khách hàng.
Hy vọng chia sẻ trên của mình giúp các bạn có cái nhìn rõ ràng hơn về phần mềm và dự án phần mềm trước khi quyết định dấn thân vào nghề.
Comments