Hợp đồng phát triển phần mềm - Các vấn đề cần lưu ý khi ký kết và thực thi hợp đồng

Hợp đồng phát triển phần mềm - Các vấn đề cần lưu ý khi ký kết và thực thi hợp đồng

Bắt đầu từ năm 2020, sự xuất hiện của dại dịch Covid-19 trong hơn 2 năm đã khiến cho doanh nghiệp nhiều phen điêu đứng, mấp mé nguy cơ sụp đổ, nhưng cùng với đó cũng là sự bùng nổ của Công nghệ thông tin góp một phần sống còn trong cuộc chiến chống lại Corona. Không thể phủ nhận mặt tích cực của các phần mềm, ứng dụng… trong việc thay đổi đáng kể cách thức vận hành, hoạt động của các công ty khi mà các quy trình truyền thống dường như không thể đáp ứng nhu cầu của thực tại.

Tuy nhiên, chính sự áp dụng nhanh và có phần vội vàng, thiếu sự phân tích sâu về chuyên môn, tính phù hợp, tính thực tiễn và đặc biệt là tính ứng dụng, khiến cho nhiều doanh nghiệp phải ngậm ngùi “chia tay” với các phần mềm đã đầu tư cả trăm triệu đến chục tỷ nhưng không mang lại kết quả như mong đợi. Bài viết này sẽ giúp các bạn có cái nhìn tổng quan về những lưu ý trong ký kết Hợp đồng phát triển phần mềm và các nội dung pháp lý xung quanh việc xử lý tranh chấp đối với các Hợp đồng phát triển phần mềm.

Trước tiên, chúng ta nói đến khái niệm về “Phần mềm”. Theo hiểu biết chung, “phần mềm” (“Software”) là một tập tin có mối liên hệ chặt chẽ nhằm tạo ra các câu lệnh giúp các thiết bị điện tử thực hiện một hoặc một vài chức năng nhất định. Theo quy định của Luật công nghệ thông tin 2007 được cụ thể hóa tại Nghị định 71/2007/NĐ-CP quy định chi tiết và hướng dẫn thực hiện một số điều của Luật công nghệ thông tin về công nghiệp công nghệ thông tin thì “Sản phẩm phần mềm là phần mềm và tài liệu kèm theo được sản xuất và được thể hiện hay lưu trữ ở bất kỳ một dạng vật thể nào, có thể được mua bán hoặc chuyển giao cho đối tượng khác khai thác, sử dụng.” 

Khác với các loại sản phẩm vật chất khác, phần mềm là một sản phẩm vô hình chạy trên nền tảng các thiết bị điện tử mà chỉ được ghi lại, lưu lại vào các thiết bị lưu trữ hữu hình. Do vậy, việc mua bán phần mềm, đặt hàng và sử dụng phần mềm khác biệt hơn rất nhiều so với các sản phẩm hữu hình khác. Phần mềm được thiết lập và ứng dụng tới rất nhiều khía cạnh trong cuộc sống, nhưng tựu trung lại, phần mềm bao gồm một số loại như: phần mềm hệ thống, phần mềm ứng dụng, phần mềm tiện ích, phần mềm công cụ và các loại phần mềm khác. Mỗi phần mềm sẽ có một tính năng khác nhau, nhằm đáp ứng nhu cầu sử dụng của từng đối tượng khách hàng là cá nhân hay tổ chức. Cũng vì một đặc tính “vô hình” của phần mềm nên sản phẩm phần mềm có thể được sử dụng phi biên giới, không bị giới hạn bởi vị trí địa lý hay biên giới lãnh thổ, tính ứng dụng và nhân bản cũng nhanh chóng hơn rất nhiều so với các loại hàng hóa thông thường khác.

Phần mềm có hàm lượng chất xám cao và khó nhân bản như sản phẩm hữu hình
Phần mềm có hàm lượng chất xám cao và khó nhân bản như sản phẩm hữu hình

Nhu cầu sử dụng phần mềm của các doanh nghiệp rất cao, tuy nhiên, không phải phần mềm nào đều có thể được sản xuất đại trà hoặc sản xuất hàng loạt như các sản phẩm thông thường. Mỗi phần mềm đối với các doanh nghiệp lại được sử dụng theo một cách thức khác nhau, phát triển từ ý tưởng phần mềm gốc ban đầu và xây dựng, chỉnh sửa, bổ sung (được gọi là “customize”) để phù hợp với ứng dụng thực tiễn tại từng doanh nghiệp. Vì vậy, khi muốn “mua” một phần mềm để sử dụng, các doanh nghiệp cần điều động nhân sự kỹ thuật cao, am hiểu công nghệ cũng như khả năng ứng dụng của phần mềm đối với từng công đoạn, từng khâu trong quy trình sử dụng, quản lý tại doanh nghiệp để phối hợp với đội ngũ phát triển phần mềm của doanh nghiệp cung ứng phần mềm tạo ra được một sản phẩm phần mềm tối ưu nhất, phù hợp với nhu cầu sử dụng tại doanh nghiệp. Điều này đòi hỏi sự kết hợp chặt chẽ giữa “Bên bán” và “Bên mua” trong suốt quá trình xây dựng phát triển phần mềm mới có thể đạt được kết quả tốt nhất mà hai bên đều mong muốn.

Phần mềm quản lý được tùy chỉnh phù hợp nhu cầu từng doanh nghiệp
Phần mềm quản lý được tùy chỉnh phù hợp nhu cầu từng doanh nghiệp

Một số lưu ý khi giao kết Hợp đồng phát triển hoặc sản xuất phần mềm:

Thứ nhất, đối với dự án phần mềm, người thuê phát triển phần mềm và bên đối tác cần làm rõ đối tượng của Hợp đồng là Hợp đồng cung ứng phần mềm hay Hợp đồng cung ứng dịch vụ phần mềm hay bao gồm cả 2 dạng trên. Để làm rõ, chúng ta có thể thấy, phần mềm là một sản phẩm mà tự bản thân nó có thể hoạt động được mà không cần có sự tác động của con người từ đơn vị cung cấp sau khi hoàn tất việc bàn giao sản phẩm. Sản phẩm phần mềm sẽ là một “gói hàng” để người dùng có thể cài đặt trên thiết bị điện tử để sử dụng.

Đối với dịch vụ phần mềm SaaS (viết tắt của Software-as-a-Service), đây là hoạt động trực tiếp hỗ trợ, phục vụ việc sản xuất, cài đặt, khai thác, sử dụng, nâng cấp, bảo hành, bảo trì phần mềm và các hoạt động tương tự khác liên quan đến phần mềm, tức là cần phải có tác động của hành vi của bên cung ứng dịch vụ mới trở thành dịch vụ.

SaaS - một trong những dạng điện toán đám mây phổ biến nhất - được định nghĩa là mô hình phân phối dịch vụ ứng dụng phần mềm; trong đó nhà cung cấp không bán sản phẩm phần mềm mà bán dịch vụ dựa trên phần mềm đó. Nói đơn giản hơn, nhà cung cấp tạo ra và duy trì một phần mềm chạy trên nền web, và khách hàng có thể truy cập từ xa thông qua internet sau khi trả một khoản phí thuê bao đăng ký định kỳ (hàng tháng, quý, năm).

Việc xác định rõ nội dung của Hợp đồng sẽ giúp các doanh nghiệp giải quyết các vấn đề liên quan phát sinh từ hợp đồng như vai trò, trách nhiệm của các bên trong Hợp đồng, bóc tách nội dung báo giá, thuế suất áp dụng (đặc biệt là đối với thuế nhà thầu nước ngoài, thuế thu nhập doanh nghiệp), bản quyền và nghiệm thu Hợp đồng, tránh các tranh chấp không đáng có sau này.

Đối với Hợp đồng phát triển phần mềm, loại hình này có thể kết cấu thành 2 dạng: Hợp đồng dịch vụ phát triển phần mềm (Hợp đồng dịch vụ phần mềm) hoặc Hợp đồng cung cấp phần mềm trọn gói (Hợp đồng sản phẩm phần mềm) tùy vào nhu cầu và cách thức phối hợp giữa hai bên trong quá trình xây dựng phần mềm cũng như kết quả của việc thực hiện Hợp đồng.

Nếu là Hợp đồng dịch vụ phát triển phần mềm, bên cung ứng dịch vụ có thể chia thành từng giai đoạn và cơ cấu giá dịch vụ thành các ngày công (man-day) hoặc theo tháng (man-month) để tính chi phí xây dựng và phát triển phần mềm. Kết quả của Hợp đồng là quá trình xây dựng phần mềm và công sức mà bên cung cấp dịch vụ bỏ ra để xây dựng phần mềm phù hợp với nhu cầu sử dụng của Khách hàng, đồng thời là một sản phẩm phần mềm được các bên “đóng gói” trao tay (turnkey) cho Khách hàng.

Bảng dự toán phát triển phần mềm theo đơn vị tính man-month
Bảng dự toán phát triển phần mềm theo đơn vị tính man-month

Trong khi đó, Hợp đồng cung cấp phần mềm trọn gói, bên cung ứng dịch vụ sẽ căn cứ vào sản phẩm cuối cùng để tính toán giá cả của cả sản phẩm phần mềm mà không dựa trên ngày công để xây dựng sản phẩm. Thông thường, tương tự như Hợp đồng gia công sản phẩm, Hợp đồng phát triển phần mềm thường được kết cấu dưới dạng Hợp đồng dịch vụ, có tính đến quyền sở hữu sản phẩm phần mềm sau khi hoàn tất dịch vụ. Với kết cấu này, các bên cũng dễ dàng theo dõi, phân tách trách nhiệm, giai đoạn hoàn thành, các tiêu chí đạt/không đạt khi nghiệm thu sản phẩm. Đồng thời, trường hợp có tranh chấp xảy ra, các bên cũng dễ dàng tính toán được các chi phí phát sinh và thiệt hại (nếu có) để giải quyết hậu quả pháp lý của việc hủy hỏ hay chấm dứt Hợp đồng.

Thứ haicác bên cần xác định rõ kết quả sản phẩm của phần mềm tùy vào từng loại phần mềm mà bên Khách hàng mong muốn, nói một cách khác, cần đưa ra một bản Mô tả yêu cầu của Phần mềm một cách đầy đủ, chi tiết và toàn diện. Việc xác định kết quả sản phẩm phầm mềm thường được cụ thể hóa thành các chức năng, giao diện hay chính là các tiêu chí để một sản phẩm phần mềm được coi là hoàn thành và các bên có thể tiến hành nghiệm thu phần mềm. Đây là một trong những nội dung quan trọng nhất đối với một Hợp đồng phát triển phần mềm bởi các tranh chấp đối với Hợp đồng cũng thường xuất hiện từ chính những tiêu chí này. Các bên có thống nhất được với nhau về các tiêu chí này thì khi nghiệm thu sản phẩm mới có thể đạt được kết quả và tránh được các xung đột từ việc hiểu biết sai khác hoặc nhầm lẫn, lệch nhau về tiêu chí khi nghiệm thu sản phẩm.

“Bản Mô tả yêu cầu của phần mềm” (SOW - Statement Of Work) trong các dự án phần mềm thường bao gồm một số các văn bản chính như Danh sách tính năng của sản phẩm phần mềm; Sơ đồ mô tả hệ thống phần mềm (yêu cầu dữ liệu đầu vào và đầu ra của hệ thống); Mô tả giao diện của phần mềm (có thể yêu cầu chi tiết hoặc theo đề xuất của Bên cung ứng)… Các yêu cầu này có thể được sửa đổi, bổ sung trong quá trình thực hiện, phù hợp với nhu cầu của Khách hàng và tăng tính ứng dụng của sản phẩm phần mềm, bởi trên thực tế, không phải Khách hàng nào khi đưa ra yêu cầu cho sản phẩm phần mềm cũng nắm rõ đầy đủ và đưa ra được hết yêu cầu mà mình mong muốn. Sau mỗi giai đoạn như lập trình, viết mã lệnh hay kiểm tra, thử nghiệm phần mềm, Khách hàng tự mình đánh giá tính phù hợp, tính ứng dụng, tính linh hoạt, tiện lợi của sản phẩm phần mềm để có các yêu cầu điều chỉnh phù hợp. Các bên cũng cần xác định rõ những điểm thuộc nội dung Yêu cầu cũ và những điểm thuộc nội dung Yêu cầu phát sinh mới để có điều chỉnh về giá cả và thanh toán tương ứng của dự án.

Ở giai đoạn khảo sát tính phù hợp của sản phẩm phần mềm đối với nhu cầu khách hàng, bên thuê phát triển phần mềm đã phải có sự phối hợp giữa các phòng ban và đơn vị liên quan để có cái nhìn tổng quan và đầy đủ về phần mềm, xác định rõ các mục tiêu để đưa phần mềm vào sử dụng trên thực tế, từ đó đưa ra các tiêu chí, chức năng phù hợp nhất đối với yêu cầu của phần mềm. Có như vậy, việc xây dựng phần mềm mới đầy đủ và có khả năng ứng dụng cao trên thực tiễn về sau. ” trong các dự án phần mềm thường bao gồm một số các văn bản chính như:

  • Danh sách tính năng của sản phẩm phần mềm;
  • Sơ đồ mô tả hệ thống phần mềm (yêu cầu dữ liệu đầu vào và đầu ra của hệ thống);
  • Mô tả giao diện của phần mềm (có thể yêu cầu chi tiết hoặc theo đề xuất của Bên cung ứng)…
    Danh sách tính năng và cấu trúc phân cấp WBS là cơ sở để nghiệm thu và giải quyết các vấn đề còn tồn đọng giữa 2 bên
    Danh sách tính năng và cấu trúc phân cấp WBS là cơ sở để nghiệm thu và giải quyết các vấn đề còn tồn đọng giữa 2 bên

Các yêu cầu nêu trên có thể được sửa đổi, bổ sung trong quá trình thực hiện, phù hợp với nhu cầu của Khách hàng và tăng tính ứng dụng của sản phẩm phần mềm, bởi trên thực tế, không phải Khách hàng nào khi đưa ra yêu cầu cho sản phẩm phần mềm cũng nắm rõ đầy đủ và đưa ra được hết yêu cầu mà mình mong muốn. Sau mỗi giai đoạn như lập trình, viết mã lệnh hay kiểm tra, thử nghiệm phần mềm, Khách hàng tự mình đánh giá tính phù hợp, tính ứng dụng, tính linh hoạt, tiện lợi của sản phẩm phần mềm để có các yêu cầu điều chỉnh phù hợp.

Các bên cũng cần xác định rõ những điểm thuộc nội dung Yêu cầu cũ và những điểm thuộc nội dung Yêu cầu phát sinh mới để có điều chỉnh về giá cả và thanh toán tương ứng của dự án. Ở giai đoạn khảo sát tính phù hợp của sản phẩm phần mềm đối với nhu cầu khách hàng, bên thuê phát triển phần mềm đã phải có sự phối hợp giữa các phòng ban và đơn vị liên quan để có cái nhìn tổng quan và đầy đủ về phần mềm, xác định rõ các mục tiêu để đưa phần mềm vào sử dụng trên thực tế, từ đó đưa ra các tiêu chí, chức năng phù hợp nhất đối với yêu cầu của phần mềm. Có như vậy, việc xây dựng phần mềm mới đầy đủ và có khả năng ứng dụng cao trên thực tiễn về sau. 

Bản mô tả phạm vi các yêu cầu của phần mềm bao gồm: Chức năng (features), giả định (assumptions), ràng buộc (constraints), loại trừ (exclusions), tiêu chí nghiệm thu (acceptant criteria), các thành phần bàn giao (deviverables) ...
Bản mô tả phạm vi các yêu cầu của phần mềm bao gồm: Chức năng (features), giả định (assumptions), ràng buộc (constraints), loại trừ (exclusions), tiêu chí nghiệm thu (acceptant criteria), các thành phần bàn giao (deviverables) ...

Vì vậy, trước khi giao kết Hợp đồng phát triển phần mềm, các bên cần lưu ý làm rõ Bản mô tả yêu cầu của sản phẩm phần mềm, cũng chính là mục tiêu mà hai bên hướng đến sau khi thực hiện Hợp đồng, là kết quả của việc sản xuất phần mềm đáp ứng những tiêu chí nhất định, nhằm tránh những tranh cãi sau này giữa hai bên khi không có một “mẫu số chung” để hai bên hướng tới khi thực hiện Hợp đồng. Bản mô tả yêu cầu này càng rõ ràng, càng chi tiết, các bên sẽ càng dễ dàng đánh giá phần mềm đạt hay không đạt khi nghiệm thu dự án.

Thứ ba, cần xác định rõ các giai đoạn trong việc phát triển phần mềm, đồng thời làm rõ trách nhiệm của mỗi bên trong từng giai đoạn, làm cơ sở cho việc nghiệm thu và thanh toán theo từng giai đoạn (nếu có). Thông thường, hợp đồng phát triển phần mềm sẽ bao gồm các giai đoạn:

(1) Khảo sát và đánh giá mức độ ứng dụng và khả thi của phần mềm so với nhu cầu của doanh nghiệp;

(2) Xây dựng danh mục yêu cầu và tính năng của phần mềm;

(3) Mua phần mềm gốc và tùy chỉnh (customize) phần mềm;

(4) Đánh giá sử dụng của người dùng (UAT) và tiếp tục tùy chỉnh theo yêu cầu của Khách hàng;

(5) Chạy thử;

(6) Nghiệm thu và bàn giao phần mềm;

(7) Bảo hành phần mềm;

(8) Bảo trì và nâng cấp (nếu có).

Đây là các giai đoạn chính trong quá trình phát triển một sản phẩm phần mềm mang tính hệ thống, thường được ứng dụng để quản lý quy trình của các doanh nghiệp như quy trình bán hàng, quy trình sản xuất, quy trình quản lý kho vận hay các quy trình nghiệp vụ khác, giúp giảm thời gian thao tác, giảm nhân sự trong quản lý và vận hành của doanh nghiệp.

Bên cạnh đó, theo quy định tại Thông tư số 13/2020/TT-BTTTT quy định việc xác định hoạt động sản xuất phần mềm đáp ứng quy trình có đề cập:

Điều 3. Quy trình sản xuất phần mềm

Các công đoạn trong quy trình sản xuất sản phẩm phần mềm:

1. Xác định yêu cầu và làm rõ nghiệp vụ (requirement elicitation), bao gồm một hoặc nhiều tác nghiệp như: đưa ra hoặc hoàn thiện ý tưởng về phát triển sản phẩm phần mềm; mô tả các đặc tính (yêu cầu) của sản phẩm, các ngữ cảnh sử dụng sản phẩm; đề xuất, khảo sát, làm rõ yêu cầu đối với sản phẩm phần mềm; phân tích nghiệp vụ; xây dựng yêu cầu hoàn chỉnh đối với sản phẩm phần mềm; tư vấn điều chỉnh quy trình; thống nhất yêu cầu, xét duyệt yêu cầu, khả năng kiểm soát và các cơ sở để xác nhận sự tuân thủ yêu cầu của sản phẩm.

2. Phân tích và thiết kế, bao gồm một hoặc nhiều tác nghiệp như:

  • Đặc tả yêu cầu: Bao gồm nhóm yêu cầu thuộc chức năng (functional requirement) và không thuộc chức năng (non-functional requirements), các vấn đề cần được giải quyết (pain points);
  • Xây dựng lộ trình phát triển (product roadmap);
  • Mô hình hóa nghiệp vụ thành chức năng trên phần mềm (prototyping)
  • Các kỹ thuật phù hợp được thực hiện để tối ưu hóa giải pháp, phân tích về tính đúng đắn và khả năng kiểm tra của phần mềm, phân tích ảnh hưởng của các yêu cầu phần mềm vào môi trường vận hành, các yêu cầu được ưu tiên, chấp thuận và được cập nhật khi cần thiết; mô hình hóa dữ liệu; mô hình hóa chức năng; mô hình hóa luồng thông tin; xác định giải pháp phần mềm; thiết kế giải pháp, thiết kế hệ thống phần mềm; thiết kế dữ liệu, thiết kế kiến trúc của phần mềm, thiết kế các đơn vị, mô đun thành phần phần mềm; thiết kế bảo mật, an toàn thông tin cho phần mềm; thiết kế giao diện trải nghiệm khách hàng.

3. Lập trình, viết mã lệnh, bao gồm một hoặc nhiều tác nghiệp như: viết chương trình phần mềm; lập trình các đơn vị, mô đun phần mềm; chỉnh sửa, tùy biến, tinh chỉnh phần mềm; tích hợp các đơn vị phần mềm; tích hợp hệ thống phần mềm.

4. Kiểm tra, thử nghiệm phần mềm, bao gồm một hoặc nhiều tác nghiệp như: xây dựng các kịch bản kiểm tra (test case), thử nghiệm đơn vị (unit test); thử nghiệm phần mềm (functional testing); kiểm thử hệ thống phần mềm (system testing); kiểm thử chức năng phần mềm (verification); thẩm định chất lượng phần mềm (validation); đánh giá khả năng gây lỗi; kiểm thử bảo mật, an toàn thông tin cho phần mềm; xác định thỏa mãn yêu cầu khách hàng; nghiệm thu phần mềm.

5. Hoàn thiện, đóng gói sản phẩm phần mềm bao gồm một hoặc nhiều tác nghiệp như: xây dựng tài liệu mô tả sản phẩm phần mềm, tài liệu hướng dẫn cài đặt (trong trường hợp chuyển giao sản phẩm trọn gói), tài liệu hướng dẫn sử dụng sản phẩm phần mềm (cho người sử dụng hoặc người thuê dịch vụ); đóng gói sản phẩm phần mềm; đăng ký mẫu mã; đăng ký quyền sở hữu trí tuệ.

6. Cài đặt, chuyển giao, hướng dẫn sử dụng, bảo trì, bảo hành sản phẩm phần mềm bao gồm một hoặc nhiều tác nghiệp như: chuyển giao (trọn gói sản phẩm hoặc quyền sử dụng sản phẩm dưới dạng cho thuê); hướng dẫn cài đặt sản phẩm phần mềm (trường hợp chuyển giao sản phẩm trọn gói); triển khai cài đặt sản phẩm phần mềm (trên hệ thống của khách hàng trong trường hợp chuyển giao trọn gói hoặc trên hệ thống cung cấp dịch vụ trong trường hợp cho thuê sản phẩm phần mềm); đào tạo, hướng dẫn (người sử dụng hoặc người thuê dịch vụ); kiểm tra sản phẩm phần mềm sau khi bàn giao hoặc sản phẩm phần mềm trên hệ thống cung cấp dịch vụ; sửa lỗi sản phẩm phần mềm sau bàn giao hoặc sản phẩm phần mềm trên hệ thống cung cấp dịch vụ; hỗ trợ sau bàn giao trong quá trình cho thuê dịch vụ; bảo hành sản phẩm sau bàn giao hoặc trong quá trình cho thuê dịch vụ; bảo trì sản phẩm phần mềm (trên hệ thống của khách hàng hoặc trên hệ thống cung cấp dịch vụ).

7. Phát hành, phân phối sản phẩm phần mềm, bao gồm một hoặc nhiều tác nghiệp như bán, cho thuê, phân phối, phát hành sản phẩm phần mềm tự sản xuất.

Có thể thấy, thông tư cũng quy định rất chi tiết, cụ thể các bước trong một quy trình sản xuất phần mềm để các doanh nghiệp áp dụng và tham khảo trên thực tiễn, bởi đối với việc phát triển hay sản xuất phần mềm, việc phân tách các giai đoạn thực hiện càng rõ ràng càng giúp cho doanh nghiệp dễ dàng trong việc quản lý tiến độ sản phẩm và nghiệm thu sản phẩm, tránh xảy ra tranh chấp trong quá trình thực hiện Hợp đồng. Nếu các bên không nắm kỹ về quy trình xây dựng phần mềm sẽ dễ dàng dẫn đến việc không thể kết luận đã hoàn thành hay chưa các nội dung của phần mềm, Bên mua không đồng ý nghiệm thu, hoặc Bên cung ứng cho rằng đã hoàn thiện mà Bên mua không chịu thực hiện nghĩa vụ nhận bàn giao… dẫn đến xung đột trong quá trình thực hiện Hợp đồng, xảy ra tranh chấp là điều không thể tránh khỏi.

Thứ tư, mặc dù theo nội dung Hợp đồng sản xuất phần mềm, trách nhiệm cung ứng phần mềm là do Bên bán (Bên cung ứng) thực hiện, tuy nhiên, đối với rất nhiều sản phẩm phần mềm, đặc biệt là đối với phần mềm hệ thống, phần mềm tiện ích… cần phải tùy chỉnh, tùy biến để đáp ứng nhu cầu từng khách hàng, khi đó, sự phối hợp của bên Khách hàng là vô cùng quan trọng.

Hợp đồng bao giờ cũng chứa đựng trong đó yếu tố “song vụ”, có nghĩa là bao hàm nghĩa vụ của cả hai bên. Ngoài việc Bên cung cấp dịch vụ phải thực hiện các nghĩa vụ của mình về việc xây dựng và phát triển phần mềm, bên thuê dịch vụ có nghĩa vụ thanh toán tiền theo quy định tại Hợp đồng thì đối với hợp đồng phát triển phần mềm, một yếu tố quan trọng tiên quyết đến sự thành bại của một phần mềm, đó chính là sự phối hợp giữa bên cung ứng và bên thuê dịch vụ trong việc phát triển phần mềm. Một phần mềm, đặc biệt là phần mềm phát triển theo yêu cầu của Khách hàng là một phần mềm duy nhất và đáp ứng yêu cầu của từng khách hàng riêng lẻ. Có thể nói, phần mềm đó không giống với bất kỳ hệ thống nào của công ty khác bởi nhu cầu sử dụng, quy trình quản lý và vận hành của mỗi bên là khác nhau. Vì vậy, để xây dựng được phần mềm này, không chỉ là việc bên cung ứng dịch vụ xây dựng dựa trên ý chí chủ quan của mình mà cần có sự kiểm nghiệm thực tế, sử dụng, phản hồi, phản biện của người dùng dựa trên nền tảng thực tại doanh nghiệp, phối hợp với các nền tảng hệ thống sẵn có của doanh nghiệp để có cái nhìn đầy đủ nhất. Giai đoạn này của Hợp đồng thường được gọi là giai đoạn “User Acceptance Testing” (UAT) – Thử nghiệm của người dùng.

Đây là một trong những bước cực kỳ quan trọng để tiến hành nghiệm thu sản phẩm sau này. Giai đoạn này được tiến hành sau khi Bên cung ứng dịch vụ đã tùy chỉnh phần mềm gốc dựa trên Bản mô tả yêu cầu phần mềm đã thống nhất. UAT cần có sự tham gia của tất cả các phòng ban sử dụng hệ thống, thậm chí của Bên thứ ba, để đảm bảo các tiêu chí ban đầu được đưa ra trong Bản mô tả được đáp ứng đầy đủ và chính xác theo yêu cầu Khách hàng. Soi chiếu theo quy định tại Thông tư 13/2020/TT-BTTTT thì có thể thấy, đây là giai đoạn Kiểm tra, thử nghiệm phần mềm. Trong đó, các kịch bản kiểm tra (test case) được đưa ra để kiểm thử các chức năng của sản phẩm, tính an toàn, tính bảo mật… của sản phẩm. Sau đó, Khách hàng cần phản hồi lại các điểm hợp lý, bất hợp lý của phần mềm, các lỗi xảy ra trong quá trình kiểm thử, các vấn đề còn tồn đọng và yêu cầu chỉnh sửa, thêm, bớt các chức năng cho phù hợp với nhu cầu của doanh nghiệp. Từ đó, bên cung ứng tiếp tục điều chỉnh (customize) phần mềm cho đến khi đạt được yêu cầu của Khách hàng.

Thứ năm, một trong những điểm khác biệt của Hơp đồng phần mềm với các loại sản phẩm khác, đó là bản quyền phần mềm.

Trước tiên, các bên cần đảm bảo rằng phần mềm gốc để phát triển phần mềm theo yêu cầu của Khách hàng là một phần mềm hợp pháp, có bản quyền và được bên cung ứng phần mềm mua lại hoặc nhận được một cách minh bạch, hợp pháp, không vi phạm quyền của bên thứ ba hoặc bên phát triển gốc. Rất nhiều trường hợp, phần mềm gốc được bên cung ứng tải miễn phí trên môi trường mạng từ một website cho phép tải. Tuy nhiên, các website này có các quy định khác nhau đối với từng phần mềm, ví dụ, có thể sử dụng miễn phí với mục đích phi thương mại hoặc học tập, nghiên cứu đơn thuần. Đối với mục đích sản xuất phần mềm để bán cho Khách hàng, đây là mục đích thương mại và cần phải được sự cho phép của đơn vị sản xuất gốc. Trước khi giao kết Hợp đồng với bên cung ứng dịch vụ phát triển phần mềm, bên thuê dịch vụ cần xem xét các điều kiện và chính sách sử dụng của phần mềm gốc. Nếu có yêu cầu mua lại để sử dụng với mục đích thương mại thì bên thuê dịch vụ phát triển phần mềm cần yêu cầu bên cung ứng dịch vụ mua lại theo đúng chính sách trước khi tiến hành giao kết Hợp đồng. Để chắc chắn, điều khoản về quyền sở hữu trí tuệ cần làm rõ trách nhiệm này của bên cung ứng và việc bảo đảm các quyền sử dụng hợp pháp bản quyền phần mềm của bên thuê sản xuất phần mềm.

Bên cạnh đó, kết quả của dịch vụ phát triển phần mềm chính là một sản phẩm phần mềm mà các bên cần làm rõ quyền sở hữu, phạm vi sử dụng và quyền bản quyền đối với phần mềm này. Thông thường, quyền sở hữu và bản quyền đối với phần mềm sẽ thuộc về bên thuê dịch vụ. Tuy nhiên, trong nhiều trường hợp, Bên thuê dịch vụ mong muốn sở hữu cả các mã nguồn (source code) của sản phẩm phần mềm để sau này tự thực hiện việc chỉnh sửa, hoàn tác, đáp ứng nhu cầu thực tế của doanh nghiệp khi nguồn nhân lực công nghệ thông tin tại doanh nghiệp có thể tự thực hiện mà không cần sự hỗ trợ của bên cung ứng. Đây cũng là một điểm có lợi cho bên thuê dịch vụ nhưng cũng là điểm bất lợi cho bên cung ứng dịch vụ bởi họ có thể mất các quyền chỉnh sửa, tùy biến cho các khách hàng khác. Do vậy, các bên cần làm rõ bên thuê dịch vụ được phép hay không được phép sở hữu các mã nguồn này, nếu được phép thì có thể sử dụng cho mục đích phi thương mại hay mục đích thương mại, phạm vi về địa lý, lãnh thổ của việc sử dụng, sử dụng cho một hay nhiều thiết bị khác nhau… Điều này sẽ hạn chế các tranh chấp của các bên trong việc sử dụng phần mềm sau khi các bên đã hoàn tất các nghĩa vụ trong Hợp đồng.

Ngoài các vấn đề nêu trên, trong Hợp đồng phát triển phần mềm không thể thiếu các điều khoản thông thường của một hợp đồng thương mại như quyền và nghĩa vụ của các bên, điều khoản thanh toán từng lần hay nhiều lần, điều khoản giải quyết khi vi phạm hợp đồng, bảo mật thông tin, thông báo, giải quyết tranh chấp… Một số doanh nghiệp có thể bổ sung các điều khoản về kiểm soát xuất khẩu, phòng chống tham những, hối lộ hay điều khoản về bảo vệ quyền con người… để tăng cường trách nhiệm xã hội, một trong những tiêu chí hướng đến phát triển bền vững của doanh nghiệp. Các doanh nghiệp cũng ngày càng mở rộng hơn các tiêu chí này để thông qua Hợp đồng, sàng lọc và lựa chọn đối tác có tâm, có tầm, mong muốn phát triển và đóng góp vào sự phát triển chung của xã hội.

Kết Luận

Từ một số những thông tin trên, người viết mong muốn đem đến cho độc giả cái nhìn tổng quan và toàn diện về Hợp đồng phát triển phần mềm – một trong những loại hợp đồng phổ biến trong thời gian gần đây và chắc chắn sẽ được sử dụng rất nhiều trong thời đại kỷ nguyên số thay đổi liên tục trong những năm tới.

Hợp đồng chính là một nguyên tắc chung, là luật chung được áp dụng giữa hai hoặc nhiều bên trong Hợp đồng, được xây dựng dựa trên ý chí và nguyện vọng của các bên khi tham gia Hợp đồng. Hợp đồng càng chặt chẽ và đầy đủ, càng tránh được các tranh chấp không đáng có giữa các bên. Vì vậy, việc quan trọng khi các bên có ý định giao kết và thực hiện các dự án nói chung và dự án phát triển phần mềm nói riêng, hãy luôn lưu ý đến việc xây dựng một Hợp đồng có khả năng phòng ngừa các rủi ro có thể xảy ra, đặc biệt khi phần mềm là thứ vô hình khó có thể đong đếm như các dạng hàng hóa vật chất thông thường. Hi vọng bài viết có thể giúp cho doanh nghiệp một phần trong việc xây dựng các Hợp đồng phát triển phần mềm trong tương lai.

Nguồn: Luật Trung Cường

Category