CHƯƠNG 1: CƠ SỞ LÝ THUYẾT VỀ CÁC YẾU TỐ CỐT LÕI TẠO NÊN SỰ THÀNH CÔNG CỦA CÁC DỰ ÁN PHÁT TRIỂN PHẦN MỀM 1. Các khái niệm cơ bản 1. Dự án phát triển phần mềm Theo tác giả Jalote (2010) của cuốn sách “Quản lý phần mềm trong thực tiễn” được dịch sang Tiếng Việt năm 2013 cho rằng một dự án phần mềm có hai nhóm hoạt động chính: phát triển và quản lý dự án. Trong đó, nhóm dự án quan tâm đến các vấn đề về thiết kế, kiểm thử, cài đặt mã, và nhóm quản lý dự án thì quan tâm đến hoạch định và quản lý các hoạt động để đạt được mục tiêu của dự án: chi phí, thời gian hoàn thành, chất lượng.
Trong những dự án lớn, việc phát triển phải được làm cẩn thận theo các phương pháp đã được thử nghiệm, và kết quả của các công việc này phải được lập tài liệu rõ ràng. Các công việc trong dự án phải được hoạch định và phân công cho các thành viên và sau đó được theo dõi khi dự án bắt đầu. Ngoài ra, để dự án lớn thành công thì phải gia tăng tính hình thức và cứng nhắc trong quản lý và thực hiện. Theo Mike (2005) trong chuyên đề “Quản lý dự án phần mềm” định nghĩa dự án phát triển phần mềm là kế hoạch dự án cụ thể hơn là trình tự công việc của phát triển phần mềm bao gồm tiến hành như thế nào, nguồn lực và trách nhiệm ra sao.
Cấu trúc của dự án phát triển phần mềm bao gồm: giới thiệu sơ lược về dự án, tổ chức gồm những ai và nhiệm vụ của họ là gì, phân tích các rủi ro, nguồn lực phần cứng và phần mềm cho dự án, các hoạt động của dự án (work breakdown), tiến độ dự án, và báo cáo tiến độ dự án. Theo PCworld Việt Nam (2009), định nghĩa quản lý dự án phần mềm là lên kế hoạch một cách khoa học và nghệ thuật trong quá trình quản lý phát triển các dự án phần mềm. Đó chính là quy trình quản lý theo các công việc được lên kế hoạch, tiến hành theo dõi và kiểm soát. 9 Theo tổ chức IEEE, việc lập trình phần mềm dễ hơn so với phần cứng, do đó, ngành công nghiệp sản xuất phần mềm nhanh chóng phát triển từ thập niên 1970 đến 1980.
Để quản lý các nỗ lực phát triển mới mẻ, các công ty ứng dụng các phương thức quản lý phần mềm. Đồng thời, tổ chức IEEE cũng chỉ ra một số nguyên nhân dẫn đến quản lý phần mềm thất bại để đóng góp vào việc quản lý dự án phần mềm tốt hơn bằng việc tránh các lỗi như: dự án không có tính thực tế, không quản lý rủi ro, ước tính không chính xác các nguồn lực cần thiết, xác định yêu cầu của dự án không đúng, thiếu kinh nghiệm trong việc quản lý dự án, không có khả năng xử lý độ phức tạp của dự án, sử dụng công nghệ chưa phát triển… 1. Dự án phần mềm thành công Hầu hết các nghiên cứu trước đều định nghĩa một dự án phát triển phần mềm được gọi là thành công khi dự án đó được hoàn thành đúng kế hoạch được giao, nằm trong chi phí dự kiến và đáp ứng các yêu cầu đặt ra của khách hàng. Hay nói ngắn gọn hơn, khi một dự án phần mềm đáp ứng được tất cả các yêu cầu của khách hàng như mong đợi thì dự án đó được coi là thành công.
Còn đối với các dự án phần mềm đã hoàn thành, được cài đặt cho khách hàng nhưng vượt quá chi phí, trễ hạn hay có ít tính năng hơn mong đợi, đều không được coi là một dự án phần mềm thành công (Teng, 2016). Hay đối với Chow (2008) đánh giá sự thành công của một dự án sẽ xem xét qua 4 khía cạnh là Thời gian, Chi Phí, Chất lượng và Phạm vi. Khi một dự án phát triển phần mềm đạt đầy đủ 4 khía cạnh này thì được xem như là một dự án thành công. Tuy nhiên để tạo nên sự thành công cho một dự án phần mềm là sự đóng góp từ nhiều yếu tố khác nhau, có thể chia ra hai nhóm: quản lý và kỹ thuật.
Về mặt quản lý là: khả năng lãnh đạo, khả năng giao tiếp, sự tương tác với khách hàng là những yếu tố quan trọng. Còn về mặt kỹ thuật là khả năng xác định đúng yêu cầu của khách hàng, năng lực của các kỹ sư, sự hỗ trợ về kỹ thuật là những yếu tố được quan tâm (Sweis, 2015). Chu trình phát triển phần mềm (Software Development Life Cycle - SDLC) Trước khi xác định các yếu tố cốt lõi tạo nên sự thành công của các dự án phát triển phần mềm thì cần thiết phải hiểu các giai đoạn để phát triển một sản phẩm phần mềm hoàn chỉnh. Chu trình phát triển phần mềm là một cách tiếp cận có hệ thống và có trật tự để giải quyết các vấn đề liên quan đến hệ thống phần mềm hay nói cách khác, nó là một cấu trúc đối với sự phát triển của một sản phẩm phần mềm.
Tuỳ thuộc vào các loại mô hình phát triển phần mềm khác nhau mà các giai đoạn sau có thể được sắp xếp và tổ chức khác nhau. Các giai đoạn tiêu biểu liên quan đến chu trình phát triển phần mềm bao gồm (Schmidt và cộng sự, 2001): Phân tích tổng quát: giai đoạn này rất quan trọng, cũng là giai đoạn đầu tiên trong quá trình phát triển phần mềm. Mục tiêu của giai đoạn này là nhằm để khai thác và thu thập các yêu cầu. Các nhà phân tích sẽ đưa ra và thu thập các yêu cầu từ các chuyên gia và các bên liên quan (Schmidt và cộng sự, 2001).
Phân tích các yêu cầu: là giai đoạn có nhiệm vụ quan trọng nhất trong việc tạo ra một sản phẩm phần mềm là phải tách được các yêu cầu. Khách hàng thường biết những gì họ muốn, nhưng đó không phải là những gì phần mềm nên làm nếu các yêu cầu này không đầy đủ, không rõ ràng hoặc mâu thuẫn. Những yêu cầu này cần được công nhận và xác nhận bởi các kỹ sư phần mềm có kỹ năng và kinh nghiệm (Schmidt và cộng sự, 2001). Phân tích các phạm vi: là giai đoạn mà một khi các yêu cầu được thu thập từ khách hàng, phân tích phạm vi của sự phát triển nên được xác định và được ghi rõ.
Điều này thường được gọi là một tài liệu phạm vi (Schmidt và cộng sự, 2001). Cụ thể hóa: đó là nhiệm vụ mô tả chính xác phần mềm sẽ được viết. Trong thực tế, đặc tả thành công nhất được viết để hiểu và tinh chỉnh các ứng dụng đã được 11 phát triển hoàn thiện, mặc dù theo lý thuyết các đặc tả này nên được quy định một cách cẩn thận trước khi phát triển ứng dụng. Đặc tả quan trọng nhất cho các đối tác bên ngoài tổ chức (cổ đông, khách hàng, đối tác) và phải ổn định (ít thay đổi).
Một cách tốt để xác định xem các đặc tả có đủ chính xác là phải có một bên thứ ba xem xét các tài liệu và đảm bảo rằng các yêu cầu là hợp lý (Schmidt và cộng sự, 2001). Thiết kế/kiến trúc phần mềm: kiến trúc liên quan đến việc bảo đảm rằng hệ thống phần mềm sẽ đáp ứng đầy đủ các yêu cầu của sản phẩm, cũng như đảm bảo rằng các yêu cầu trong tương lai có thể được giải quyết. Nó cũng liên quan đến việc giao tiếp giữa các hệ thống phần mềm và các sản phẩm phần mềm khác, cũng như các phần cứng cơ bản hoặc các hệ điều hành chủ (Schmidt và cộng sự, 2001). Lập trình: thiết kế phải được dịch sang một dạng máy tính có thể đọc, hiểu được.
Giai đoạn viết mã (code) sẽ thực hiện nhiệm vụ này (Schmidt và cộng sự, 2001). Kiểm thử: một khi các mã được tạo ra, thử nghiệm phần mềm bắt đầu. Các phương pháp kiểm thử khác nhau có thể được sử dụng để làm sáng tỏ những lỗi đã được cam kết trong các giai đoạn trước. Các công cụ kiểm thử tự động cũng có thể được sử dụng để tăng hiệu quả của kiểm thử phần mềm (Schmidt và cộng sự, 2001).
Triển khai: sau khi mã được kiểm tra một cách thích hợp và được chấp thuận, nó sẽ được đưa vào sử dụng trong thực tế (Schmidt và cộng sự, 2001). Tài liệu hóa: một nhiệm vụ quan trọng là viết và lưu trữ tài liệu thiết kế nội bộ của phần mềm với mục đích duy trì và tăng cường trong tương lai (Schmidt và cộng sự, 2001). Hỗ trợ và đào tạo: như một phần của giai đoạn triển khai, các lớp đào tạo cho người sử dụng phần mềm là rất quan trọng. Người sử dụng sẽ có rất nhiều câu hỏi và vấn đề phần mềm dẫn đến giai đoạn tiếp theo của phần mềm (Schmidt và cộng sự, 2001).
12 Bảo trì: đây là giai đoạn cuối của chu trình và là một quá trình không ngừng, duy trì và bảo trì và nâng cấp phần mềm để đối phó với các vấn đề mới được phát hiện hoặc yêu cầu mới có thể tốn nhiều thời gian hơn so với việc phát triển ban đầu của phần mềm (Schmidt và cộng sự, 2001). Các nghiên cứu trước có liên quan Nghiên cứu của Chow và cộng sự (2008) Nghiên cứu của Chow và cộng sự tại đại học Cappela ở Mỹ về đề tài “Nghiên cứu các yếu tố cốt lõi tạo nên sự thành công cho dự án phần mềm Agile”. Sau khi phân tích dữ liệu từ 109 dự án phần mềm theo mô hình Agile từ 25 quốc gia, tác giả rút ra kết luận rằng các yếu tố cốt lõi tạo nên sự thành công của dự án phát triển phần mềm là: giao tiếp mặt đối mặt, tăng động lực cho thành viên trong nhóm, quản lý có kiến thức sâu rộng về dự án phát triển phần mềm, tuân thủ các yêu cầu trong quy trình quản lý dự án. Để xác định các yếu tố cốt lõi cho dự án phát triển phần mềm thì cần có phương pháp dành cho dự án phát triển phần mềm của doanh nghiệp, môi trường làm việc, giao tiếp tốt trong các cuộc họp, kỹ năng làm việc nhóm tốt, xác định đúng những tiêu chuẩn của việc mã hóa và lập trình các thông số của phần mềm (Chow, 2008).
Mặt khác để xác định được các yếu tố cốt lõi tạo nên sự thành công cho dự án phát triển phần mềm thì cần dựa vào các thuộc tính về chất lượng, phạm vi, thời gian và chi phí đáp ứng. Nghiên cứu của Dubey (2011) Nghiên cứu của Dubey (2011) thực hiện để tìm ra các yếu tố cốt lõi tạo nên sự thành công của các dự án phát triển phần mềm tại Singapore.