قرارداد طراحی نرم‌افزار باید شامل چه مواردی باشد؟

چک‌لیست مهم‌ترین بندهای قرارداد طراحی و توسعه نرم‌افزار؛ از دامنه پروژه و هزینه تا مالکیت سورس‌کد، تست، تحویل، پشتیبانی و شرایط فسخ.

نویسنده: تحریریه امین فرانگر8 دقیقه مطالعه
featured

پاسخ کوتاه

چک‌لیست مهم‌ترین بندهای قرارداد طراحی و توسعه نرم‌افزار؛ از دامنه پروژه و هزینه تا مالکیت سورس‌کد، تست، تحویل، پشتیبانی و شرایط فسخ.

وقتی قرار است یک نرم‌افزار اختصاصی برای یک کسب‌وکار ساخته شود، توافق شفاهی درباره «چه چیزی بسازیم» و «چقدر هزینه دارد» معمولاً کافی نیست. در پروژه‌های نرم‌افزاری، بسیاری از اختلاف‌ها از جایی شروع می‌شوند که یک طرف تصور می‌کند قابلیتی جزو پروژه بوده و طرف دیگر آن را خارج از تعهدات می‌داند. قرارداد خوب قرار نیست فقط مبلغ و تاریخ تحویل را ثبت کند؛ باید مشخص کند دقیقاً چه چیزی ساخته می‌شود، چگونه تحویل و پذیرش می‌شود، تغییرات چطور مدیریت می‌شوند و بعد از تحویل چه تعهداتی باقی می‌ماند.

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

قرارداد طراحی نرم‌افزار چیست؟

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

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

۱. مشخصات دقیق طرفین قرارداد

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

۲. موضوع قرارداد و دامنه پروژه

عبارت‌هایی مثل «طراحی یک نرم‌افزار کامل» یا «ساخت یک سامانه حرفه‌ای» برای قرارداد کافی نیستند. باید خروجی قابل تحویل تعریف شود. برای مثال مشخص کنید نرم‌افزار شامل چه ماژول‌هایی است، چه نقش‌هایی دارد، چه فرایندهایی را پوشش می‌دهد، چه گزارش‌هایی ارائه می‌کند و چه یکپارچه‌سازی‌هایی در محدوده پروژه قرار دارند.

در صورت وجود نسخه اولیه یا MVP، آن را از قابلیت‌هایی که برای فازهای بعدی در نظر گرفته شده‌اند جدا کنید. همین تفکیک ساده می‌تواند از بسیاری از اختلاف‌ها درباره «قابلیت‌های وعده‌داده‌شده» جلوگیری کند.

۳. نیازمندی‌های فنی و معیار پذیرش

قرارداد بهتر است فقط فهرست قابلیت‌ها را نیاورد؛ معیار سنجش خروجی را هم مشخص کند. برای هر بخش مهم می‌توان معیار پذیرش تعریف کرد: چه ورودی‌ای دریافت می‌شود، چه نتیجه‌ای باید تولید شود، چه خطاهایی باید کنترل شوند و چه شرایطی باعث تأیید یا رد آن قابلیت می‌شود.

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

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

۴. زمان‌بندی، مراحل اجرا و نقاط تحویل

به‌جای یک تاریخ کلی برای «تحویل نرم‌افزار»، بهتر است پروژه به چند مرحله تقسیم شود. برای هر مرحله می‌توان خروجی، زمان تقریبی و شرط تأیید تعریف کرد. در پروژه‌های پیچیده، این مدل از تعیین یک موعد نهایی بدون توجه به وابستگی‌های بین مراحل قابل اتکاتر است.

همچنین مشخص کنید تأخیر ناشی از چه عواملی خارج از کنترل مجری محسوب می‌شود؛ برای مثال تأخیر در ارائه اطلاعات، دسترسی‌ها، محتوای مورد نیاز یا سرویس‌های شخص ثالث. در صورت توافق، شرایط جبران تأخیر و سقف مسئولیت نیز باید شفاف باشد.

۵. مبلغ قرارداد و شیوه پرداخت

مبلغ کل، مالیات و هزینه‌های جانبی در صورت وجود، زمان‌بندی پرداخت و ارتباط هر پرداخت با یک milestone باید مشخص شود. اگر هزینه سرویس‌های خارجی، سرور، پیامک، دامنه، لایسنس یا ابزارهای تجاری بر عهده کارفرماست، این موارد را جداگانه بنویسید.

برای پروژه‌هایی که نیازمندی‌هایشان ممکن است در طول توسعه تغییر کند، قراردادهای زمان‌محور یا مدل‌های مرحله‌ای می‌توانند انعطاف بیشتری نسبت به قیمت ثابت داشته باشند. در قرارداد قیمت ثابت، تعریف دامنه پروژه و فرایند مدیریت Change Request اهمیت بیشتری پیدا می‌کند.

۶. مالکیت کد، داده و حقوق استفاده

این بخش را مبهم نگذارید. قرارداد باید مشخص کند حقوق مربوط به کد اختصاصی پروژه، طراحی UI/UX، مستندات، داده‌های کارفرما و خروجی‌های تولیدشده پس از تسویه چگونه خواهد بود. اگر مجری از کتابخانه‌ها، فریم‌ورک‌ها یا اجزای متن‌باز استفاده می‌کند، مجوزهای آن‌ها را نیز باید در نظر گرفت؛ «تحویل سورس‌کد» الزاماً به معنای انتقال حقوق هر جزء شخص ثالث نیست.

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

۷. محرمانگی و امنیت اطلاعات

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

برای پروژه‌های حساس، مسئولیت مدیریت Secretها، دسترسی به سرور، Backup و ثبت رویدادهای امنیتی نیز بهتر است جداگانه تعیین شود. اطلاعات محرمانه نباید صرفاً در یک ایمیل یا پیام‌رسان ردوبدل شود و سپس انتظار داشت قرارداد همه ریسک‌های عملیاتی را حل کند.

۸. فرایند تغییرات در حین پروژه

در بسیاری از پروژه‌ها نیازمندی‌ها بعد از شروع توسعه تغییر می‌کنند. قرارداد باید یک فرایند روشن برای Change Request داشته باشد. هر درخواست جدید می‌تواند از نظر اثر روی زمان، هزینه و معماری بررسی و سپس تأیید یا رد شود.

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

۹. تست، تحویل و پذیرش نرم‌افزار

«تحویل شد» و «مورد قبول است» دو مفهوم متفاوت‌اند. قرارداد باید مشخص کند چه زمانی نرم‌افزار برای تست در اختیار کارفرما قرار می‌گیرد، مهلت بررسی چقدر است، ایرادها چگونه ثبت می‌شوند و چه زمانی یک مرحله پذیرفته‌شده محسوب می‌شود.

بهتر است بین Bug، درخواست تغییر و قابلیت جدید تفاوت گذاشته شود. رفع یک نقص نسبت به نیازمندی تأییدشده با افزودن قابلیت جدید یکسان نیست و نباید هر دو در یک دسته قرار بگیرند.

۱۰. گارانتی و پشتیبانی پس از تحویل

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

برای سامانه‌های عملیاتی، تعریف سطح خدمت یا SLA می‌تواند مفید باشد. در این صورت سطح‌های مختلف خطا، اولویت پاسخ و ساعات پشتیبانی را دقیق‌تر تعریف کنید.

۱۱. زیرساخت، استقرار و تحویل فنی

مشخص کنید مسئولیت خرید یا مدیریت سرور، دامنه، SSL، Database، Backup و سرویس‌های شخص ثالث با چه کسی است. اگر استقرار جزو پروژه است، محیط‌های Development، Staging و Production و مسئولیت Deploy اولیه را نیز مشخص کنید.

یکی از مواردی که گاهی فراموش می‌شود، تحویل دسترسی‌هاست. دسترسی‌های لازم برای نگهداری نرم‌افزار باید در پایان کار به شکل امن و قابل مدیریت تحویل شوند و بهتر است مالکیت حساب‌های زیرساختی از ابتدا مشخص باشد.

۱۲. فسخ قرارداد و حل اختلاف

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

چک‌لیست کوتاه قبل از امضای قرارداد

موضوعسؤال کنترل
دامنه پروژهآیا دقیقاً مشخص است چه قابلیت‌هایی داخل پروژه هستند و چه مواردی خارج از آن؟
زمان‌بندیآیا مراحل، نقاط تحویل و وابستگی‌های کارفرما مشخص شده‌اند؟
هزینهآیا مبلغ، اقساط و هزینه‌های جانبی روشن است؟
مالکیتآیا وضعیت سورس‌کد، طراحی، داده و اجزای شخص ثالث مشخص است؟
تغییراتآیا برای درخواست‌های جدید فرایند مشخصی وجود دارد؟
پذیرشآیا معیار تست و مهلت اعلام ایراد مشخص شده است؟
پشتیبانیآیا گارانتی، SLA و محدوده پشتیبانی تفکیک شده‌اند؟
امنیتآیا محرمانگی، دسترسی‌ها و اطلاعات حساس تعیین تکلیف شده‌اند؟

اگر پروژه شما قرار است به هسته فرایند کسب‌وکار تبدیل شود، قرارداد را فقط بر اساس قیمت و زمان تحویل نبندید. دامنه پروژه، معیار پذیرش، مالکیت و مسئولیت نگهداری در طول عمر نرم‌افزار به همان اندازه مهم‌اند.

اگر نرم‌افزار تحت وب است، چه چیزهایی را اضافه کنیم؟

در نرم‌افزارهای تحت وب، موضوعاتی مثل API، دسترسی کاربران، زیرساخت، Backup، Monitoring، امنیت و وابستگی به سرویس‌های بیرونی اهمیت بیشتری پیدا می‌کنند. اگر هنوز در مرحله انتخاب نوع راهکار هستید، مقاله نرم‌افزار تحت وب چیست و چه مزایایی برای کسب‌وکار دارد؟ می‌تواند برای مقایسه Web App با سایر مدل‌ها و بررسی مزایا و محدودیت‌های آن مفید باشد.

جمع‌بندی

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

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

منابع و مطالعه بیشتر

برای پروژه‌های نرم‌افزاری اختصاصی، قبل از شروع توسعه درباره دامنه پروژه، خروجی‌ها و مسیر اجرا تصمیم بگیرید.

پرسش‌های متداول

قرارداد طراحی نرم‌افزار باید شامل چه مواردی باشد؟⌄

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

آیا تحویل سورس‌کد باید در قرارداد ذکر شود؟⌄

بله. اگر تحویل سورس‌کد جزو توافق است، باید صریحاً در قرارداد و فهرست اقلام تحویلی ذکر شود و وضعیت حقوق استفاده یا انتقال حقوق نیز جداگانه مشخص شود.

در قرارداد نرم‌افزار تغییرات جدید چگونه مدیریت می‌شوند؟⌄

برای Change Request یک فرایند مشخص تعریف کنید تا اثر هر تغییر بر هزینه، زمان و دامنه پروژه بررسی و پس از تأیید طرفین ثبت شود.

تفاوت پشتیبانی و گارانتی نرم‌افزار چیست؟⌄

گارانتی معمولاً به رفع نقص‌های مرتبط با خروجی توافق‌شده در یک بازه مشخص مربوط است؛ پشتیبانی می‌تواند خدمات مستمرتر مانند پاسخ‌گویی، نگهداری و رسیدگی عملیاتی را پوشش دهد. دامنه هر دو باید در قرارداد تعریف شود.

معیار پذیرش نرم‌افزار چرا مهم است؟⌄

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

منابع

  1. قرارداد طراحی و توسعه نرم افزار — دکتر پیمان محمدپور (دسترسی 2026/09/02)
  2. نرم‌افزار تحت وب چیست و چه مزایایی برای کسب‌وکار دارد؟ — امین فرانگر هوشمند (دسترسی 2026/09/02)
اشتراک‌گذاری:LinkedInXTelegram

مقالات مرتبط

برای اجرای ایده دیجیتال خود آماده‌اید؟

تیم ما برای بررسی نیاز و پیشنهاد مسیر فنی در کنار شماست.