1. تعریف و اهمیت قراردادهای توسعه نرم‌افزار

توسعه نرم‌افزار، فرآیندی است که طی آن یک برنامه یا سیستم نرم‌افزاری از صفر تا صد طراحی، پیاده‌سازی، تست و آماده استفاده می‌شود. قرارداد توسعه نرم‌افزار که معمولا در قالب قراردادهای پیمانکاری تهیه می‌شوند، توافقی حقوقی میان کارفرما و توسعه دهنده است که درآن وظایف و مسئولیت‌های طرفین و خروجی‌های پروژه مشخص می‌شود و زمانبندی‌ و هزینه‌ها تعیین می‌شود. این قراردادها نقش حیاتی در موفقیت پروژه‌های فناوری اطلاعات ایفا می‌کنند. تنظیم یک قرارداد دقیق و شفاف می‌تواند از بروز اختلافات و مشکلات در طول پروژه جلوگیری کند و مسیر پیشرفت کار را هموار سازد. قراردادهای توسعه نرم‌افزار شامل ابعاد فنی موضوع (مانند زبان برنامه‌نویسی، معماری نرم‌افزار و پلتفرم‌های هدف) و حقوقی (مانند مالکیت کد منبع و محرمانگی) است. تفاوت این قراردادها با قراردادهای فروش نرم‌افزار در این است که موضوع قراردادهای توسعه نرم‌افزار، محصولی است که هنوز ساخته نشده است و بر اساس نیاز کارفرما طراحی و توسعه داده می‌شود. در ادامه به برخی از انواع قراردادهای توسعه نرم‌افزار می‌پردازیم.

قرارداد توسعه نرم‌افزار

2. انواع قراردادهای توسعه نرم‌افزار

بر اساس نحوه پرداخت و مدیریت هزینه

      • قرارداد قیمت ثابت :(Fix Price)قرارداد قیمت ثابت، نوعی توافق است که در آن توسعه‌دهنده موافقت می‌کند پروژه نرم‌افزاری سفارشی را با قیمتی ثابت انجام دهد. در این نوع قرارداد، هزینه کل پروژه قبل از شروع کار تعیین می‌شود.
      • قراردادهای زمان و مصالح (Time and Materials): در زمینه توسعه نرم‌افزار، قرارداد زمان و مواد توافقی است بین کارفرما و تیم توسعه‌دهنده که در آن کارفرما براساس زمان واقعی صرف شده برای انجام پروژه و مواد و مصالح مصرف شده دستمزد پیمانکار را پرداخت می‌کند. هدف از قرارداد زمان و مواد در توسعه نرم‌افزار، فراهم کردن انعطاف‌پذیری در مواقعی است که دامنه پروژه نامشخص یا به طور مداوم در حال تغییر است. این موضوع به تیم توسعه‌دهنده اجازه می‌دهد تا بدون نیاز به مذاکره مجدد قرارداد، در موارد مورد نیاز به اعمال تغییرات اقدام نمایند. همچنین، این نوع قرارداد امکان صدور صورتحساب شفاف بر اساس اقدامات واقعی صورت‌گرفته را فراهم می‌کند.
      • قرارداد مبتنی بر مایل‌استون‌ها (Milestone-based Contract): در این نوع قرارداد توسعه نرم‌افزار، پروژه به بخش‌ها یا مراحل مشخصی تقسیم می‌شود که هر مرحله (مایل‌استون) شامل یک مجموعه از تحویل‌ها یا اهداف مشخص است. پرداخت‌ها براساس تکمیل هر مایل‌استون انجام می‌شود، یعنی وقتی یک مرحله خاص از پروژه با موفقیت به پایان رسید، بخشی از مبلغ قرارداد پرداخت می‌شود. این روش باعث می‌شود کارفرما بتواند پیشرفت پروژه را بهتر کنترل کند و اطمینان حاصل کند که هزینه‌ها متناسب با پیشرفت واقعی، پرداخت می‌شود.
      • قرارداد مبتنی بر نتایج (Outcome- based Contract): در قرارداد مبتنی بر نتیجه، توافق می‌شود که توسعه‌دهنده یا ارائه‌دهنده خدمات باید به اهداف مشخصی دست یابد و تنها زمانی مبلغ قرارداد پرداخت می‌شود که آن اهداف محقق شوند.

بر اساس میزان مسئولیت پیمانکار

        • قرارداد مشارکتی Partnership/ Joint Venture)): قرارداد مشارکتی نوعی توافق است که در آن طرفین به طور مشترک در پروژه توسعه نرم‌افزار همکاری می‌کنند. در این مدل، ریسک‌ها، هزینه‌ها، و سودها بین طرفین تقسیم می‌شود و هر یک نقش فعال و مشارکتی در تصمیم‌گیری و پیشبرد پروژه ایفا می‌کنند. قراردادهای مشارکتی معمولاً در پروژه‌های بلندمدت یا نوآورانه‌ای استفاده می‌شوند که نیازمند همکاری نزدیک و به اشتراک‌گذاری منابع و تخصص‌ها هستند و کارفرما به تنهایی نمی‌تواند منابع مورد نیاز برای انجام پروژه را تامین کند.
        • قرارداد کلید در دست (Turnkey): نوعی توافق است که در آن توسعه‌دهنده متعهد می‌شود پروژه را به طور کامل انجام داده و آن را در شرایط آماده‌به‌کار به کارفرما تحویل دهد. اصطلاح «کلید در دست» به این معناست که کارفرما تنها نیاز دارد کلید را بچرخاند تا بتواند از تسهیلات یا سیستم استفاده کند. در قرارداد کلید در دست، توسعه‌دهنده مسئولیت کامل طراحی، ساخت و تحویل پروژه را بر عهده دارد. این بدان معناست که کارفرما نیازی به نگرانی مدیریت جنبه‌های مختلف پروژه ندارد.

3. عناصر کلیدی قرارداد

 تعاریف و مفاهیم: اصطلاحات و مفاهیم تخصصی که در قرارداد به کار رفته در این بخش به صورت شفاف توضیخ داده می‌شوند.

شرایط عمومی:

در این بخش به قواعد و تعهدات کلی حاکم بر همه قراردادهای پیمان پرداخته می‌شود که عبارتند از:

  • توصیف کلی نرم افزار موضوع قرارداد: در این قسمت موضوع تعهد طرفین به طور واضح درج می‌گردد به صورتی که هیچ‌گونه ابهامی در مورد آن باقی نماند.
  • مدت قرارداد: مدت زمان اجرای تعهد با ذکر تاریخ شروع و تاریخ پایان آن تعیین می‌گردد و در صورت امکان تمدید قرارداد، شرایط و نحوه اعمال آن تصریح می‌شود.
  • مبلغ و شیوه تسویه قرارداد: مبلغ قرارداد و نحوه پرداخت آن قید می‌شود. همچنین در صورت تاخیر در پرداخت، میزان خسارت با توافق طرفین مشخص می‌شود.
  • تحویل موضوع قرارداد: در این قسمت، زمان و شرایط تحویل تعیین می‌گردد. در قراردادهای توسعه نرم‌افزار دو مرحله تحویل موقت و قطعی برای تحویل موضوع قرارداد تعیین می‌گردد.
  • خسارات و تضامین: در این بند، ضمانت‌های حسن انجام تعهد (از قبیل چک، سفته و ضمانت‌نامه بانکی) درج می‌شود. همچنین میزان وجه التزام ناشی از تخلف یا تاخیر در اجرای قرارداد تعیین می‌گردد. این وجه التزام می‌تواند مقطوع یا به نسبت مدت تاخیر در انجام تعهدات معین گردد.
  • فسخ قرارداد: در این قسمت، شرایطی که به هر یک از طرفین حق فسخ می‌دهد (مانند تخلف از مفاد قرارداد، امتناع یا تاخیر در انجام تعهدات، عدم پرداخت وجه در مواعد مقرر و غیره) پیش‌‌بینی می‌شود.
  • فورس ماژور: در این بند، اوضاع و احوالی که اجرای تعهدات را غیرممکن می‌کند (از قبیل بلایای طبیعی، جنگ، تحریم، بیماری‌های فراگیر و غیره) معین و آثار آن (از جمله فسخ، تمدید مدت و انفساخ) مشخص می‌شود.
  • حل و فصل اختلافات: مرجع صالح برای رسیدگی به اختلافات ناشی از تفسیر یا اجرای قرارداد مشخص می‌گردد. این مرجع می‌تواند داور مرضی‌الطرفین، مرکز داوری اتاق ایران یا محاکم قضایی صالح باشد. همچنین معمولا درج می‌گردد که در صورت بروز اختلاف، طرفین ابتدا سعی می‌کنند موضوع را از طریق مذاکره دوستانه حل و فصل کنند و در صورت عدم حصول توافق به مرجع حل اختلاف مذکور در قرارداد مراجعه کنند.

شرایط خصوصی:

در این قسمت، شرایط خصوصی مربوط به قرارداد معین می‌شود که در ذیل به توضیح هر کدام می‌پردازیم:

  • شرح دقیق پروژه: در این قسمت باید به معرفی کلی نرم‌افزار، مشخصات فنی و عملکردی آن پرداخته شود.
  • زمانبندی تحویل: در این بند باید جدول زمانبندی دقیق هر مرحله درج شود و پروژه به فازها یا مایلستون‌استون‌ها (طراحی، پیاده‌سازی، تست، تحویل) تقسیم شود.
  • مالکیت فکری نرم افزار: طرفین باید مشخص کنند که حقوق مالکیت فکری نرم‌افزار موضوع قرارداد به چه کسی تعلق دارد؛ به طور مثال مشخص شود که چه کسی مالک کد منبع و مستندات است و حق استفاده، انتشار یا فروش نرم‌افزار را دارد.
  • دوره ضمانت و رفع باگ: مدت زمانی که پس از تحویل موقت موضوع قرارداد معین می‌شود و پیمانکار موظف است در این مدت ایرادات نرم‌افزار ایجاد شده را که توسط کارفرما به او اعلام ‌می‌شود به صورت رایگان، رفع کند.
  • پشتیبانی: یک دوره‌ای بعد از تحویل قطعی موضوع قرارداد به عنوان دوره پشتیبانی برای رفع اشکالاتی که در نرم‌افزار به وجود می‌آید در نظر گرفته می‌شود و هزینه و نحوه پرداخت خدمات پشتیبانی مشخص می‌شود.
  • انتقال دانش فنی: فرآیندی است که در آن پیمانکار، اطلاعات تخصصی لازم را برای بهره‌برداری و نگهداری نرم‌افزار به کارفرما یا تیم فنی او منتقل می‌کند.
  • محرمانگی و عدم رقابت: در این قسمت منظور از اطلاعات محرمانه مشخص می‌شود و تعریف اطلاعاتی که محرمانه محسوب نمی‌شوند هم ذکر می‌شود؛ به عنوان مثال اطلاعاتی که به طور عمومی منتشر شده و در دسترس عموم قرار گرفته است، محرمانه به شمار نمی‌آیند.

4. ملاحظات حقوقی

در قراردادهای توسعه نرم‌افزار یک سری ملاحظات حقوقی وجود دارد که رعایت آن‌ها برای کاهش ریسک‎های قراردادی ضروری قلمداد می‌شود که در این بخش به ذکر یک سری نکات پرداخته می‌شود.

یکی از نکات بسیار مهم در این قراردادها بحث حقوق مالکیت فکری است که به دو دسته حقوق مادی و معنوی تقسیم می‌شود. در قانون حمایت از پدیدآورندگان نرم‌افزارهای رایانه‌ای یک ساز و کار حقوقی خاص در زمینه حمایت از حقوق مالکیت فکری در نظر گرفته شده است. بر اساس ماده 6 این قانون، حقوق معنوی ناشی از نرم‌افزار ایجاد شده متعلق به پدیدآورنده (پیمانکار) است حتی اگر نرم‌افزار به سفارش شخص دیگری (کارفرما) ایجاد شده باشد اما حقوق مادی متعلق به سفارش دهنده (پیمانکار) است مگر طرفین خلاف آن را توافق کرده باشند. هم‌چنین در ماده 10 قانون مذکور، آمده است در صورتی که نرم‌افزار به عنوان اختراع ثبت شود، حقوق ناشی از آن تحت عنوان اختراع، قابل حمایت است.

نکته دیگر بحث تحویل موقت و قطعی و دوره ضمانت و پشتیبانی از نرم‌افزار ایجاد شده است. در قراردادهای سفارشی توسعه نرم‌افزار باید دو نوع تحویل موقت و قطعی در نظر گرفته شود‌.

پس از اتمام کلیه فازهای اجرایی طبق جدول زمانبندی مندرج در قرارداد، پیمانکار باید تقاضای تحویل موقت نرم‌افزار موضوع قرارداد  را نموده و در صورت تایید ناظر کارفرما، اقدام به تسلیم موارد مذکور نموده و تمامی فایل‌ها و مدارک و خروجی پروژه را در این مدت، به کارفرما، تسلیم نماید و تاییدیه او را اخذ کند. بهتر است یک صورتجلسه تحویل موقت هم تنظیم ‌شود و به هر یک از طرفین قرارداد یک نسخه از آن تحویل داده شود.

بعد از این که پیمانکار موارد تحویل‌دادنی را طبق مفاد قرارداد به کارفرما تسلیم کرد، یک دوره ضمانت درنظر گرفته می‌شود و چنانچه عیب و نقصی در نرم‌افزار موضوع قرارداد وجود داشته باشد، پس از اعلام کارفرما، پیمانکار موظف به برطرف کردن عیوب و نواقص اعلامی به صورت رایگان است.

پس از گذشت دوره ضمانت، کارفرما نسبت به بررسی کارها و اصلاحات صورت گرفته اقدام می‌کند و در صورت احراز بی‌عیب و نقص بودن کارها ( براساس مفاد قرارداد، قوانین و مقررات حاکم و استانداردهای متعارف صنعت) تحویل قطعی کار را به پیمانکار ابلاغ می‌نماید. رضایت کارفرما شرط تعیین تحویل قطعی موضوع قرارداد محسوب می‌شود. صورتجلسه تحویل قطعی نیز در دو نسخه تنظیم می‌شود که به هر یک از طرفین قرارداد یک نسخه از آن تحویل داده خواهد شد.

بعد از تحویل قطعی، طرفین می‌توانند یک مدتی را برای پشتیبانی از محصول ایجاد شده به عنوان دوره پشتیبانی درنظر بگیرند تا در صورت بروز مشکل در کارکرد نرم‌افزار تولید شده، با اعلام کارفرما، پیمانکار درصدد برطرف کردن مشکلات به وجود آمده (به صورت رایگان یا با پرداخت هزینه) برآید.

در نظر گرفتن ساز و کار تحویل موقت و قطعی و پیش‌بینی دوره ضمانت و پشتیبانی در قرارداد، موجب کاهش ریسک‌ پروژه، بالابردن کیفیت و بهبود عملکرد نرم‌افزار می‌شود و باعث آسان‌تر و شفاف‌تر شدن مدیریت زمان و بودجه پروژه می‌شود و هزینه‌ها را کاهش خواهد داد.

برای اطلاعات بیشتر با کارشناسان ما تماس بگیرید