انواع نرمافزار و توسعه آن
نرم افزار، مجموعه ای از برنامه های رایانه ای، رویه ها و مستندات است که انجام کارهای مختلف بر روی یک سیستم رایانه ای را بر عهده دارد. عبارت “نرم افزار” برای نخستین بار توسط جان توکی در سال ۱۹۵۸ مورد استفاده قرار گرفت. در سطح بسیار ابتدایی، نرم افزار کامپیوتر، متشکل از زبان ماشین است که شامل گروهی از مقادیر دودویی بوده و دستورالعمل پردازنده را تعیین می کند. دستورالعمل پردازنده تغییر بیان از سخت افزار کامپیوتر در یک توالی از پیش تعریف شده می باشد. به طور خلاصه، نرم افزار کامپیوتر، زبانی است که اصطلاحاً به وسیلۀ آن یک رایانه، صحبت می کند. انواع مختلفی از نرم افزار های رایانه ای وجود دارد و باید دید اقسام اصلی آنها کدامند؟
نرم افزارها از منظرهای مختلفی قابل دسته بندی و تقسیم می باشند و متخصصین علوم رایانه ای با توجه به ابعاد مختلف نرم افزار به ارائۀ تقسیم بندی های متفاوتی از این پدیدۀ فناورانه پرداخته اند.
با توجه به این نکته که هر تقسیم بندی می بایستی فلسفه و فایده ای داشته باشد و از طرفی نرم افزار از دو بعد فنی و حقوقی نیز امکان دسته بندی دارد، آنچه در پی می آید بر آن است که نرم افزار را از منظرهای متفاوتی مورد دسته بندی و تحلیل قرار دهد تا زوایا و ابعاد فنی و حقوقی نرم افزار ، قدری روشن تر گردد؛ زیرا به نظر می رسد، میزان و شکل حمایت حقوقی با توجه به اجزا، مراحل و اقسام نرم افزار، متفاوت خواهد بود.
۱- تقسیم بندی های فنی نرم افزار
به جهت فنی و ابعاد مرتبط با علوم رایانه ای، نرم افزار ها را با توجه به معیارهای گوناگون از جمله هدف و مأموریت نرم افزار، زمینۀ استفاده، نوع نقش و عملکرد و یا کاربر نرم افزار، می توان مورد تقسیم بندیهای مختلفی قرار داد. ذیلاً با توجه به معیارهای پیش گفته به بررسی انواع نرم افزارها از جهت فنی خواهیم پرداخت.
۱-۱- نرم افزارهای پایه (Programming Software) :
این دسته از نرم افزارها، یکی از انواع معمول، شناخته شده و مورد علاقۀ کاربران در میان نرم افزار های کامپیوتری است . این نرم افزار در قالب ابزار بوده و به برنامه نویس در نوشتن برنامه های کامپیوتری کمک می کند. برنامه های کامپیوتری مجموعه ای از دستورات منطقی هستند که برای یک سیستم کامپیوتری، وظایف خاصی را انجام می دهند . ابزارهایی که به برنامه نویسان در ایجاد یک سیستم کامپیوتری کمک می کنند، شامل ویرایشگر متن ، کامپایلرها و مترجم ها ست. کامپایلرها(مفسرها)، کد منبع را که در قالب یک زبان برنامه نویسی، نوشته شده اند به زبانی که کامپیوتر آن را می فهمد، ترجمه می کنند.(اغلب در قالب دو دویی). کامپایلرها چیزهایی را که به وسیلۀ رابط ها، تجمیع و تبدیل شده اند، تولید می کنند. دی باگرها( اِشکال زداها )، جهت بررسی و اشکال زدایی کدها استفاده می شوند. کد منبع، بعضاً یا به طور کامل، برای ابزارهای اشکال زدا (Debugging tool) که بر روی آنها اجرا شده و به جهت برطرف کردن هرگونه اشکال احتمالی به کار می روند، شبیه سازی می شود. مترجم ها (Interpreters) برنامه ها را اجرا می کنند. آنها کد منبع و یا یک کد از پیش تالیف شده را اجرا و یا کد منبع را قبل از اجرا به یک زبان میانی ترجمه می کنند.
۱-۲- نرم افزارهای سیستمی (System Software) :
این گونه از نرم افزارها به راه اندازی و اجرای سخت افزار رایانه ای و سیستم رایانه، کمک می کنند. نرم افزارهای سیستمی به سیستمهای عامل، درایورها، سرورها و برنامه های جانبی سیستمی(utilities) اطلاق می شود. نرم افزار سیستمی به یک برنامه نویس کاربردی در خصوص جداسازی و انتزاع زبان برنامه نویسی از سخت افزار، حافظه، و سایر اجزاء مرکب درونی یک رایانه، کمک می کند تا خودش را درگیر زبان ماشین نکند. یک سیستم عامل، برای کاربرها، با یک پلت فرم، امکان اجرای برنامه های سطح بالا را فراهم می آورد.
میان افزارها و سیستم ورودی و خروجی بایوس، ابزاری را فراهم می کنند تا سخت افزار به کار گرفته شود.
۱-۳- نرم افزارهای کاربردی (Application Software) :
این قسم از نرم افزارها، کاربر نهایی را قادر می سازد تا امور معینی را به انجام رساند. نرم افزارهای مربوط به کسب و کار، پایگاههای داده و نرم افزارهای آموزشی، برخی از اشکال نرم افزارهای کاربردی هستند. همچنین واژه پردازهای مختلف که باید توسط کاربر، به انجام کارهای تخصصی اختصاص داده شوند، نمونه های دیگری از نرم افزارهای کاربردی هستند.
۱-۳-۱- بدافزارها (Malware):
بدافزار، اشاره به هر گونه نرم افزار مخرب داشته و یک طیف وسیع تر از نرم افزارهایی را در بر می گیرد که به هر شکل، تهدیدی برای امنیت رایانه می باشند. ابزارهای تبلیغاتی مزاحم، جاسوس افزارها، ویروس های رایانه ای، کرم های رایانه ای، اسب های تروجان و یا ترس افزارها، مصادیق نرم افزارهای مخرب می باشند. ویروس های رایانه ای، برنامه های مخربی است که به تنهایی قادر به تکثیر خود بوده و از یک رایانه به رایانۀ دیگر در محیط شبکه و یا اینترنت گسترش می یابند. کرم رایانه ای همین کار را انجام می دهد، تنها با این تفاوت که ویروس ها نیاز به یک برنامه میزبان ضمیمه دارند و با آن گسترش می یابند، در حالی که در خصوص کرم ها لازم نیست تا خود را به برنامه ای ضمیمه کنند. تروجان نیز خود را تکثیر و اطلاعات را سرقت می کند. نرم افزارهای جاسوسی می توانند بر فعالیت های کاربر بر روی یک رایانه، نظارت داشته و اطلاعات کاربر را بدون اینکه وی بفهمد، سرقت کنند.
۱-۳-۲- ابزارهای تبلیغاتی مزاحم (Adware) :
ابزارهای تبلیغاتی مزاحم نرم افزارهایی هستند که با استفاده از آن، تبلیغات اینترنی در فضای مجازی ، اجرا یا دانلود می شوند. برنامه نویسان، ابزارهای تبلیغاتی مزاحم را به عنوان وسیلۀ تولید درآمد خود طراحی می کنند. آنها، اطلاعات کاربر، مانند وب سایت هایی را که وی اغلب بازدید می کند و صفحاتی که به عنوان صفحۀ مورد علاقه، ثبت کرده را استخراج می کنند. تبلیغاتی که به عنوان پاپ آپ در صفحۀ نمایش شما ظاهر می شوند، ناشی از برنامه های تبلیغاتی مزاحم هستند که شما را ردیابی می کنند. اما ابزارهای تبلیغاتی مزاحم برای امنیت رایانه و یا حریم خصوصی کاربر، مضر نیست؛ بلکه داده ها را جمع آوری کرده و تنها به وسیلۀ پیشنهاد از طریق کلیک کاربر بر روی تبلیغات عمل می کنند.
برخی دیگر از نرم افزار ها در میان سایر نرم افزارهای رایانه ای، مانند نرم افزار مدیریت موجودی، برنامهریزی منابع سازمانی ، نرم افزارهای جانبی و نرم افزار حسابداری وجود دارندکه در زمینۀ خاص اطلاعاتی و سیستم های مدیریت داده ها، کاربرد دارند. ذیلاً نگاهی گذرا به برخی از آنها، خواهیم داشت.
۱-۳-۳- نرم افزار انبار گردانی(Inventory Management Software) :
این نوع از نرم افزار به یک سازمان در ردیابی کالاها و مواد خود بر اساس کیفیت و کمیت کمک می کند. توابع مدیریت موجودی انبار شامل نقل و انتقالات انبار داخلی و ذخیره سازی می باشد. این نرم افزار انبار کمک می کند تا یک شرکت در سازماندهی موجودی و بهینه سازی جریان کالا در سازمان خود بهتر عمل کرده و در نتیجه این امر به بهبود خدمات به مشتریان منجر می شود.
۱-۳-۴- نرم افزارهای جانبی (Utilities Software) :
همچنان که مطابق عرف معمول خدمات نرم افزاری شناخته شده اند، این گونه از نرم افزارها در خصوص مدیریت سخت افزار رایانه و نرم افزارهای رایانه ای کمک می کنند. این فرآیند نرم افزاری، طیف محدودی از وظایف و عملکرد ها را بر عهدا دارد. یک پارچه سازهای دیسک سخت (Disk defragmenters)، نرم افزارهای سیستمی جانبی و ویروس یاب ها، برخی از نمونه های متداول نرم افزار های جانبی هستند.
۱-۳-۵- نرم افزار پشتیبان و بازیابی اطلاعات (Data Backup and Recover Software) :
یک نرم افزار پشتیبان و بازیابی اطلاعات ایده آل، ویژگی هایی فراتر از کپی ساده از فایل های داده را فراهم می کند. این نرم افزار اغلب، نیازهای کاربر را در خصوص تشخیص موارد و زمان پشتیبانی و حمایت برنامه ها، برطرف می کند. نرم افزارهای پشتیبانی و بازیابی، سازمان مندی اصلی فایل را حفظ کرده و هرگونه بازیابی آسان از اطلاعات پشتیبانی شده را ممکن می سازد.
۱-۳-۶- نرم افزار های پردازش داده ها :
این مورد، رایج ترین زمینه برای تولید نرم افزار و استفاده از رایانه است. سیستم هایی نظیر حسابداری، انبارداری، حقوق و دستمزد و فروش، در این خصوص قابل ذکرند.
۱-۳-۷- نرم افزارهای شبیه سازی و مدل سازی :
به جهات اقتصادی و ایمنی و صرفه جویی در وقت، برای آموزش و تحقیق در بسیاری از موارد، از این قابلیت در رایانه استفاده می شود. آموزش خلبانی و طراحی بدنه اتومبیل و امثال اینها، مصادیق این دسته اند.
۱-۳-۸- نرم افزارهای سیستم خبره :
مقصود ساختن برنامه هایی است که بتواند کارهای هوشمندانه انسان نظیر گفتگو، ترجمه و تفسیر زبان و معاینه را انجام دهد. سیستم های باهوش مصنوعی، بر اساس منطق است و در آن از پایگاه دانش نیز علاوه بر پایگاه داده، استفاده می شود.
۱-۳-۹- نرم افزار های سیستم بی درنگ :
در این سیستم ها، عکس العمل بلافاصله صورت می گیرند. نرم افزار های بدین منظور بیشتر در مراکز تولیدی نظیر پالایشگاه مورد استفاده دارد که با بروز هر عامل و علامتی، بی درنگ عکس العمل نشان داده و به تنظیم فرآیند تولید می پردازد.
۱-۳-۱۰- نرم افزارهای سسیتم نهفته :
بسیاری از وسایل کوچک و بزرگ نظیر اسباب بازی، اتومبیل و تجهیزات پزشکی وجود دارند که در آنها کامپیوترهای ریزی به کار رفته است و با برنامه هایی که روی آنها نصب گردیده، کار آن دستگاه کنترل می شود.
۲-تقسیم بندی های حقوقی نرم افزار
با توجه به اینکه نرم افزار پدیده ای فنی بوده و در عین حال، دارای ارزش اقتصادی و مطلوبیت عرفی، می باشد، نیازمند مجموعۀ قواعد و حمایت های حقوقی است تا بتوان به وسیلۀ آن، روابط پدیدآورندگان و مالکان نرم افزار را با مشتریان و مصرف کنندگان تنظیم کرده و از بروز اختلافات و نابسامانی ها و همچنین سوءاستفادۀ ناقضان احتمالی حقوق صاحبان حق در این حوزه جلوگیری به عمل آورد. در این راستا دسته بندی نرم افزار از حیث محدوده و نحوۀ بهره برداری کاربران و مشتریان نرم افزار ، امری بسیار حائز اهمیت است که ذیلاً به آن پرداخته خواهد شد.
۲-۱- نرم افزارهای سفارشی (Custom Software) :
نرم افزاری است که برای یک کاربر یا سازمان خاص طراحی شده و از آنجا که برای یک کاربر خاص ساخته شده است، مشخصات و ویژگی های آن مطابق با نیاز کاربر می باشد.
البته عبارت نرم افزار سفارشی نرم افزاری را به ذهن متبادر می کند که طی قرارداد سفارش اثر تولید شده. در واقع می توان نرم افزارها را به لحاظ حقوقی و از حیث دارنده حق به نرم افزارهایی که طی قرارداد سفارش تولید شده اند و نرم افزارهایی که طی رابطه کارگر و کارفرمایی تولید شده اند، از یک سو و از حیث دیگر نرم افزار را به نرم افزارهایی که یک پدیدآورنده دارند در مقابل نرم افزارهایی که اثر مشترک محسوب می شوند؛ تقسیم بندی نمود.این در حالی است که به اعتبار دیگر نرم افزارها را می توان به اختصاصی و متن باز، تقسیم کرد. در واقع نرم افزار اختصاصی یا متن باز می تواند به اشکال مختلف و در روابط مختلف( از حیث نخستین دارنده حقوق) تولید شده باشد.
2-2- نرم افزارهای ردۀ عام (Off-the-Shelf Software) :
برخلاف نرم افزار های سفارشی، نرم افزار ردۀ عام، بدون در نظر گرفتن رده و کاربر خاص، خریداری می شود. این نرم افزار، ممکن است جهت منظوری خاص یا در خصوص نیازهای کاربری خاص، طراحی شده باشند و یا به این منظور تولید نشده باشند، لیکن قابلیت استفادۀ عام داشته باشند و طیف وسیعی از کاربران بتوانند با استفاده از آن نیاز خود را در زمینۀ مطلوب خودشان برطرف نمایند؛ بدون اینکه هیچ گونه هماهنگی و ارتباطی با طراح نرم افزار داشته باشند. در حقیقت شما هنگام خرید این نرم افزار، با شرایط قرارداد لیسانس آن، موافقت می کنید.
۲-۳- نرم افزار رایگان (free Software) :
نرم افزاری است که یک کاربر، برای استفاده، تغییر و توزیع آن، آزاد است. نرم افزار رایگان به طور کلی بدون هزینه از آب در می آید. لیکن هزینه ها مشتمل است بر توزیع، ارائه خدمات، و نگهدارای و پشتیبانی. واژۀ رایگان به آزاد بودن نرم افزار از نظام کپی رایت، توزیع و جرح وتعدیل اشاره دارد.البته باید در نظر داشت، نرمافزارهای رایگان به طور رایگان قابل دانلود و استفاده هستند اما ممکن است لزوما قابلیت استفاده مجدد و تغییر و اصلاح توسط کاربر را نداشتهباشند. هردو نوع نرمافزارهای آزاد و نرمافزارهای متنباز در یک ویژگی مشترک هستند: همهی کاربران آن ها باید به کدهای منبع دسترسی داشته باشند. بدین معنی که کدهای منبع این نرمافزارها به شخص یا شرکت خاصی اختصاص ندارند و میتوان آنها را به اشتراک گذاشت.
۲-۴- نرم افزارهای منبع باز و منبع بسته (Open Source and Closed Source Software) :
در نرم افزارهای مدل منبع بسته، منبع نرم افزار برای عموم منتشر نشده است؛ در حالی که در نرم افزارهای منبع باز، کد منبع آن برای اصلاح و استفاده در دسترس است. نرم افزارهای منبع باز در قالب کد منبعشان در دسترس هستند و حق تغییر، بهبود و ارتقاء و بعضاً حق انتشار کد آن از طریق لیسانس های نرم افزار اعطا می شود. در جایی که نرم افزار برای عموم مردم تولید شده باشد به آن نرم افزار منبع باز اطلاق می شود؛ چه اینکه نرم افزار یاد شده توسط یک شرکت و یا توسط یک شخص تولید شده باشد.
۲-۵- نرم افزارهای اختصاصی (Proprietary Software) :
در نرم افزارهای اختصاصی، حقوق قانونی منحصراً برای دارندۀ حق تکثیر باقی مانده و اکثر نرم افزارهای اختصاصی به صورت منبع بسته در دسترس قرار می گیرند.
این نوع نرمافزارها متعلق به یک شرکت یا شخص حقیقی است و استفاده از آنها مستلزم خرید یا کسب مجوز بهرهبرداری از دارنده است. دسترسی به کدهای منبع و تغییر آنها توسط کاربر در نرمافزارهای اختصاصی، امکانپذیر نیست. مطابق شرایط و ضوابط آنچه که « موافقتنامه مجوز بهرهبرداری کاربر نهایی» نامیده میشود، کاربران مجاز به تکثیر، به اشتراک گذاشتن، تغییر، توزیع مجدد یا مهندسی معکوس کدهای منبع نیستند.
برخی فروشندگان نرم افزار، کد منبع نرم افزارهای اختصاصی را با دسترسی محدود، میان مشتریان توزیع می کنند.نرم افزار اختصاصی به شکل نرم افزار مشروط یا نرم افزار معرف (Demoware) خواهد بودکه کاربران جهت استفاده از آنها وجهی را پرداخت نمی کنند، و فی الواقع ترکیبی از نرم افزارهای رایگان و مشروط هستند. اینگونه نرم افزارها مشتمل بر هزینۀ بسته بندی نیست، زیرا در قالب بسته بندی بازاری ارائه نمی شوند؛ اینگونه نرم افزارها به صورت اینترنتی یا در قالب های سخت افزارهای حامل که نیاز به بسته بندی تجاری مجزا ندارند، به مشتریان ارائه می شوند. با این وجود ممکن است برنامه نویسان از شما بخواهند تا مبلغ اندکی را جهت استحقاق دریافت نسخه های پشتیبان و کمکی، بپردازید.
۲-۶- نرم افزارهای مشروط و نرم افزارهای جزئی (Shareware and Retail Software) :
در حالی که نرم افزارهای مشروط به عنوان نسخۀ آزمایشی به کاربران عرضه می شود، نرم افزارهای جزئی به کاربران نهایی فروخته می شوند. با افزایش دسترسی به نرم افزارهای مشروط و رایگان بر روی اینترنت، بازار نرم افزارهای جزئی تغییر می کند. طراحان و فروشندگان، شروع به ارائۀ نرم افزارهایشان جهت فروش بر روی اینترنت می کنند. مکرراً نرم افزارهای مشروط به عنوان نرم افزاری غیر فعال(crippleware)، که در آنها ابعاد اصلی نرم افزار عمل نمی کنند و پس از اتمام دورۀ آزمایش به طور کلی از کار می افتند. اگرچه نرم افزار های مشروط قالب های بسیار مشهوری هستند که در این قالب، نرم افزارهای جزئی کاملاً از این شهرت و تداول برخوردار نیست. برای مثال نرم افزار Microsoft office یک نرم افزار بسته بندی شدۀ جزئی است که می بایستی خریده شوند. نرم افزار های جزئی ممکن است به عنوان بستۀ تجهیزات اصلی تولید منتقل شوند (OEM) در حال حاضر طراحان نرم افزار، به تولید کنندگان بزرگ بر اساس یک قرارداد لیسانس یک نسخه از کپی نرم افزار را به ایشان تحویل می دهند تا قبل از خرید امکان نصب نرم افزار مزبور را بر روی دستگاه های رایانه خود نصب کنند. بنابراین در بسته های موسوم به (Box Package Form) یک نسخه کپی از نرم افزار مجوز دار از طریق نمایندگی های مجاز به مشتریان تحویل داده می شود.
2-7- نرم افزار اختراعی و نرم افزار کپی رایتی (Patent software and copy right software) :
نرم افزار ازجهت این که تابع احکام کدام رژیم حمایتی حقوقی باشد قابل دسته بندی است. دو نظام حقوقی معروف و نسبتاً جا افتاده برای اموال غیر مادی وجود دارد که جنبه بین المللی نیز یافته و کنوانسیون های متعددی در خصوص آنها به تصویب رسیده است. نظام حق مولف یا کپی رایت و نظام حق اختراع. یکی از معمولترین نظام های پیشنهادی برای حمایت از پدیدآورندگان نرم افزار، نظام حق مولف است. برخی مشابهت ها بین یک اثر ادبی همانند کتاب و یک برنامه رایانه ای به خصوص در ابتدای عمر مهندسی نرم افزار که به شکل پیشرفتۀ کنونی مطرح نبود، سبب شد قوانین کپی رایت بسیاری از کشورها، طوری اصلاح شوند که از نرم افزارهای رایانه ای نیز همانند آثار ادبی حمایت شود. این در حالی است که تفاوت های در موضوع و نیز عدم تناسب احکام حق مولف با نرم افزار موجب شده است نظرها به نظام حقوق صنعتی(حق اختراع) معطوف شود و البته حق اختراع نیز کاملاً برای نرم افزارها مناسب نبوده و نقطه ضعف هایی بر آن بار می شود.
۲-۸- نرم افزار مشاع و نرم فزار غیر مشاع :
هرگاه اشخاص متعدد در پدیدآوردن نرم افزار، مشارکت داشته باشند، چنانچه سهم مشارکت هریک در پدیدآوردن نرم افزار مشخص باشد، حقوق مادی حاصل از آن به نسبت مشارکت به هریک تعلق می گیرد. در صورتی که کار یکایک آنان جدا و متمایز نباشد، اثر مشترک نامیده می شود و حقوق ناشی از آن، حق مشاع پدیدآورندگان است. البته باید خاطر نشان کرد که هریک از شرکا به تنهایی یا همه آنها به اتفاق می توانند در مورد نقض حقوق موضوع قوانین مربوطه به مراجع قضایی، مراجعه کنند.
۲-۹- نرم افزار مکمل و نرم افزار سازگار :
یکی از حقوقی که همیشه در مورد نرم افزار و سایر آثار دارای حق مالکیت فکری مورد بحث و اختلاف نظر بوده است «حق تولید سازگار» است که در مورد آثار ادبی و هنری با عنوان تولید آثار اشتقاقی یا تلفیقی عنوان میشود. به زبان ساده، آثار اقتباسی آثاری هستند که ریشه در آثار قبلی دارند. اثر جدید اگر چه از نظر محتوا و شکل بیان دارای اصالت است اما برخی از عناصر را از اثر پیشین کسب کرده است. این امر در نرم افزارها نیز بسیار رایج است. در برخی از نظام های حقوقی ، استفاده از نرم افزارهای دیگر برای ایجاد نرم افزارهای سازگار و مکمل که قابلیت ها و ظرفیت ها یا کاربری جدید ایجاد کند بلا مانع است و نقض حقوق پدیدآورنده نرم افزارهای دیگر محسوب نمی شود؛ مشروط بر اینکه پدیدآورنده نرم افزار سازگار و مکمل، رضایت کتبی پدیدآورندگان نرم افزارهایی که برای نخستین بار درآن کشور، تولید شده است را گرفته باشد.
۲-۱۰- نرم افزارهای واسط و غیر واسط :
ماده ۴ قانون حمایت از پدیدآورندگان نرم افزارهای رایانه ای چنین مقرر داشته که :
« حقوق ناشی از آن بخش از نرم افزاری که به واسطه نرم افزارهای دیگر پدید می آید متعلق به دارنده حقوق نرم افزارهای واسط نیست».
منظور از واسط، آن چیزی است که میان یک نرم افزار با نرم افزار دیگر یا سخت افزار ارتباط ایجاد میکند زیرا یک نرم افزار به تنهایی کاری نمیتواند انجام دهد مگر اینکه از طریق واسطها دادهها را بگیرد و از طریق سخت افزار در اختیار کاربر قرار دهد به عبارت دیگر اینکه کاربر چگونه از صفحه کلید یا صفحه نمایش با سخت افزار یا نرم افزار سیستم ارتباط بر قرار کند، به ماهیت آن جزء از برنامه بستگی دارد که واسط کاربر آن است.
اغلب دعاوی، ادعای کپی شدن بخشی از برنامه است که عمدتا شامل همین واسطها است. اما نکته خاصی که در برخی آراء مورد توجه قرار گرفته است، محدودیتهای اجباری است که در تولید نرم افزار جدید اتفاق میافتد. عوامل ثابتی که در این صنعت وجود دارد، خواه ناخواه منجر به شباهت برخی از بخشها و ساختارها میگردد زیرا مشخصات رایانهای که به وسیله آن نرم افزار طراحی میشود، استانداردهای طراحی، تقاضاهای موجود در بازار و رویههای برنامه نویسی که به صورت عرف در آمده است، محدودیتهایی را در تنوع و تمایز محصول ایجاد کرده است.
همچنین در تعریف نرم افزارهای مذکور گفته اند، منظور از نرم افزارهای واسط یا رابط برنامهنویسی نرمافزار (به انگلیسی: Application Programming Interface یا API) یا به صورت خلاصه رابط برنامه نویسی، رابط بین یک کتابخانه یا سیستمعامل و برنامههایی است که از آن تقاضای سرویس میکنند.
رابط کارکردهایی را تعریف میکند که کتابخانه یا سیستمعامل میتواند ارائه دهد و مفهومی مجرد است. این کارکردها سپس در قالب یک نرمافزار یا کتابخانه پیادهسازی میشوند. به عبارت سادهتر، رابط برنامهنویسی مجموعه توابعی است که یک برنامه میتواند از یک برنامه دیگر فرا بخواند.
برای مثال مایکروسافت برای APIهای ویندوز مرجعهایی استاندارد دارد که با استفاده از آنها برنامهنویسان میتوانند از قابلیتها و سرویسهای سیستمعامل در توسعه و نوشتن برنامههای کاربردی خود استفاده کنند.
همانطور که می بینیم از جهت حقوقی، نرم افزارهای واسط، نمی توانند مورد حمایت مضاعف واقع شده و به مناسبت تولید هر نرم افزار، مورد حمایت قرار گیرند.
نتیجه گیری
آنچه در سطور بالا آمد چشم اندازی از اقسام عمده نرم افزارها و نحوه توزیع آنها بود . امروزه نرم افزارهای رایانه ای به صورت گسترده متداول بوده و تصور رایانه ها بدون نرم افزار ها غیر ممکن است و بدون نرم افزارها امکان استفاده از رایانه بدین سهولت وجود نخواهد داشت.
آنچه درخصوص رایانه ها جالب توجه است این است که آنها زبان مخصوص به خودشان را داشته و همچنین راه های مخصوص به خودشان را برای برقراری ارتباط با انسان دارند. به علاوه اینکه ابزار آنها برای برقراری ارتباط شامل انواع مختلف نرم افزار می شود.
لازم به ذکر است شناخت هرچه بیشتر انواع و اجزاء نرم افزارها از جهت فنی و علمی، به جهت موضوع شناسی دقیق تر، سبب افزایش سطح کیفی و کارآمد تر شدن حمایت های حقوقی از این پدیدۀ پیچیده و پر کاربرد معاصر، خواهد شد.
توسعه نرم افزار
توسعه نرم افزار عبارت است از فرایند تصور، تصریح، طراحی، برنامه نویسی، مستندسازی، آزمایش و رفع باگ در ساخت و نگه داری اپلیکیشن، فریم ورک یا سایر اجزای نرم افزاری.
توسعه نرم افزار، فرایند نوشتن و نگه داری منبع کد است، اما به معنایی وسیع تر، هرچیزی از ایده اصلی نرم افزارِ مطلوب، تا ظهور نهایی نرم افزار را، بعضاً در فرایندی طرح ریزی شده و ساختارمند، در بر میگیرد. بنابراین توسعه نرم افزار میتواند شامل پژوهش، توسعه جدید، نمونه سازی اولیه، اصلاح، استفاده مجدد، بازمهندسی، نگهداری یا هر فعالیتی که منجر به محصولات نرم افزاری می شود، باشد.
نرم افزار را میتوان برای اهداف متنوعی توسعه داد، که سه مورد از متداول ترین ها عبارت اند از براوردن نیازهایی خاص برای یک مشتری/تجارت خاص (نرم افزار مخصوص)، براوردن یک نیاز درک شده برای مجموعه ای از کاربران بالقوه (نرم افزار منبع باز و تجاری)، یا برای مصرف شخصی (مثلاً یک دانشمند ممکن است نرم افزاری برای خودکارسازی یک کار معمولی بنویسد). توسعه نرم افزار جاسازی شده، یعنی توسعه دادن نرم افزار جاسازشده، که مثلاً برای کنترل محصولات مصرفی استفاده می شود، نیازمند یکپارچه سازی فرایند توسعه نرم افزار با توسعه محصول فیزیکیِ کنترل شده باشد. نرم افزار سیستم، بر اپلیکیشن ها و خودِ فرایند برنامه نویسی تاکید میکند و اغلب جداگانه توسعه میابد.
نیاز به کنترل کیفیتِ بهتر برای پروسه توسعه نرم افزار منجر به ظهور رشته مهندسی نرم افزار شده است، که هدف آن کاربرد روش سیستماتیکِ الگوی مهندسی در پروسه توسعه نرم افزار است.
روش های متعددی برای مدیریت پروژه نرم افزاری وجود دارند، که به عنوان مدل یا متدلوژی یا فرایند های چرخه حیات توسعه نرم افزار شناخته میشوند. مدل آبشار یک نسخه سنتی از این دست است، که با ابتکار اخیر توسعه نرم افزار چابک تفاوت دارد.
اصول شناسی ها
یک فرایند توسعه نرم افزار (که به عنوان متدلوژی یا مدل یا چرخه حیات توسعه نرم افزار نیز شناخته می شود) چارچوبی است که جهت ساختاربندی، طرح ریزی و کنترل پروسه توسعه سیستم های اطلاعاتی استفاده میشود. گستره وسیعی از چنین چارچوب هایی طی سالیان رشد یافته اند، هرکدام با نقاط قوت و ضعف مختص به خود. چند روش مختلف برای توسعه نرم افزار وجود دارد: برخی افراد یک روش مهندسی-بنیان و ساختار یافته تر را برای راه حل های تجاری انتخاب میکنند، در حالیکه دیگران ممکن است روشی افزایشی تر را انتخاب کنند، که در آن نرم افزار همگام با توسعه، بخش به بخش رشد میکند. یک متدلوژی توسعه سیستم لزوماً برای استفاده توسط تمام پروژه ها مناسب نیست. هرکدام از متدلوژی های موجود، بر مبنای ملاحظات مختلف فنی، سازمانی، تیمی و پروژه ای، برای نوع مشخصی از پروژه ها بهترین تطبیق را دارد.
بیشتر متدلوژی ها در ترکیبی از مراحل زیر در توسعه نرم افزار اشتراک دارند:
تحلیل پروژه
تحقیق در مورد بازار
جمع آوری ملزومات برای راه حل تجاری پیشنهادی
درست کردن یک نقشه یا طرح برای راه حل نرم افزار-بنیان
پیاده سازی (کدنویسی) نرم افزار
آزمایش نرم افزار
گسترش
نگهداری و رفع باگ
این مراحل بطور دسته جمعی اغلب چرخه حیات توسعه نرم افزار یا SDLC نامیده میشوند. روش های مختلف توسعه نرم افزار ممکن است این مراحل را به ترتیب های مختلفی انجام دهند، یا زمان بیشتر یا کمتری را برای مراحل مختلف صرف کنند. سطح جزییات مستندسازیِ تولید شده نیز در هر مرحله از توسعه نرم افزار ممکن است متغیر باشد. همچنین ممکن است این مراحل به ترتیب اجرا شوند (یک روش “آبشار”-بنیان)، یا ممکن است در تکرارها یا چرخه های مختلف تجدید شوند (یک روش “شدید” تر). روش شدیدتر معمولاً زمان کمتری را صرف طرح ریزی و مستندسازی، و زمان بیشتری را صرف کدنویسی و توسعه آزمایش های خودکار میکند. روش های “شدید” تر همچنین آزمایش پیوسته را در سراسر چرخه حیات، و نیز یک محصول کارا (یا بدون باگ) را در تمام اوقات ترقی میدهند. روش های ساختارمندتر یا “آبشار”-بنیان سعی در ارزیابی اکثر ریسک ها و توسعه یک نقشه دقیق برای نرم افزار، پیش از شروع پیاده سازی (کدنویسی) دارند، و از تغییرات بزرگ در طرح و بازنویسی کد در مراحل بعدی برنامه ریزی چرخه حیاتِ توسعه نرم افزار اجتناب میکنند.
مزیت ها و مضرت های چشمگیری در متدلوژی های مختلف وجود دارند، و بهترین روش برای حل یک مسئله توسط نرم افزار، اغلب به نوع مسئله بستگی دارد. اگر مسئله به خوبی درک شده باشد و یک راه حل اثربخش را بتوان پیشاپیش طراحی نمود، روش “آبشار”-بنیان تر ممکن است بهتر کار کند. اگر، از طرف دیگر، مسئله یکتا باشد (لااقل برای تیم توسعه) و ساختار راه حل نرم افزاری را نتوان به آسانی تجسم نمود، آنگاه یک روش افزایشی “شدید” تر ممکن است بهترین عملکرد را داشته باشد.
فعالیت های توسعه نرم افزار
شناسایی نیاز
منابع ایده برای محصولات نرم افزاری فراوان هستند. این ایده ها ممکن است از تحقیق بازاری شامل جمعیت شناسی مشتری های بالقوه جدید، مشتری های فعلی، فروشنده های موفقی که محصول را پس زدند، سایر کارکنان داخلی توسعه دهنده نرم افزار، یا یک شخص ثالثِ خلاق، الهام گرفته شوند. ایده های محصولات نرم افزاری معمولاً توسط پرسنل بازاریابی جهت امکان پذیری اقتصادی، تناسب با با کانال های توزیعی موجود، اثرات احتمالی روی خطوط تولید فعلی، ویژگی های ملزوم، و تناسب با اهداف بازاریابی شرکت ارزیابی میشوند. در فاز ارزیابی بازاریابی، مصرف هزینه و زمان تخمین زده میشود. در همان فاز اول، تصمیم گرفته میشود که بر پایه اطلاعات دقیق تر بدست آمده توسط کارکنان توسعه و بازاریابی، آیا پروژه باید پی گرفته شود یا خیر.
در کتاب” مناظره های بزرگ نرم افزاری” آلن ام. دیویس در فصل “ملزومات” و زیرفصل “تکه گم شده توسعه نرم افزار” بیان میکند:
” دانشجویان مهندسی، مهندسی یاد میگیرند و به ندرت با علم دارای یا بازاریابی مواجه میشوند. دانشجویان بازاریابی، بازاریابی یاد میگیرند و به ندرت با علم دارای یا مهندسی مواجه میشوند. بیشتر ما فقط در یک زمینه متخصص میشویم. چیزی که اوضاع را پیچیده میکند این است که تعداد اندکی از ما، افراد میان رشته ای را میان نیروهای کار ملاقات میکنند، پس چند قانون برای پیروی وجود دارد. اما برنامه ریزی تولید نرم افزار برای موفقیت توسعه، حیاتی است و الزاماً نیازمند دانش از چندین رشته است.”
از آنجا که توسعه نرم افزار ممکن است از آنچه مورد نیاز مشتری است تشکیل شود یا از آن فراتر رود، یک پروژه توسعه نرم افزار ممکن است به زمینه های کمتر فنی کشیده شود، مثل منابع انسانی، مدیریت ریسک، مالیکت معنوی، بودجه بندی، مدیریت بحران و غیره. این فرایندها ممکن است باعث همپوشانی نقش توسعه تجاری با توسعه نرم افزار شوند.
برنامه ریزی توسعه نرم افزاری
برنامه ریزی، مقصود هر فعالیتی است، و در آن میخواهیم چیزهایی را پیدا کنیم که به پروژه تعلق دارند. یک کار مهم در ساخت برنامه نرم افزاری، استخراج ملزومات، یا تحلیل ملزومات است. مشتری ها معمولاً ایده ای انتزاعی از آنچه به عنوان نتیجه نهایی میخواهند دارند اما نمیدانند نرم افزار باید چه کار کند. مهندسان ماهر و با تجربه نرم افزار در این مقطع، ملزومات ناقص، مبهم یا حتی متناقض را تشخیص میدهند. نمایش مکررِ زنده کد میتواند نادرستی ملزومات را کاهش دهد.
“گرچه در فاز ملزومات تلاش زیادی میشود که ملزومات کامل و صحیح باشند، اما این اتفاق به ندرت می افتد؛ لذا فاز طراحی نرم افزار موثرترین فاز در کمینه سازی اثر ملزومات جدید یا ملزومات متغیر است. ناپایداری ملزومات چالش برانگیز است زیرا زحمات آینده یا فعلی توسعه را تحت تاثیر قرار میدهد.”
هنگامی که ملزومات عمومی از مشتری جمع آوری شدند، باید تحلیلی از محدوده توسعه، تعیین و شفاف سازی شود. این مرحله اغلب مستندسازی محدوده نامیده میشود.
طراحی نرم افزار
هنگامی که ملزومات تعیین شدند، طراحی نرم افزار را میتوان در یک سند طراحی نرم افار تصریح کرد. این سند شامل یک طرح مقدماتی یا سطح بالا از واحدهای اصلی همراه با تصویری کلی (مثل یک بلوک دیاگرام) از چگونگی تناسب اجزا با یکدیگر است. زبان، سیستم عامل و اجزای سخت افزاری همگی باید در این مقطع شناحته شده باشند. سپس یک طرح دقیق یا سطح پایین ارائه میشود، شاید با نمونه سازی اولیه برای اثبات مفهوم یا تقویت ملزومات.
پیاده سازی، آزمایش و مستندسازی
پیاده سازی بخشی از پروسه است که در آن مهندسان نرم افزار در واقع کد را برای پروژه، برنامه نویسی میکنند. آزمایش نرم افزار یک فاز یکپارچه و حائز اهمیت از پروسه توسعه نرم افزار است. این بخش از پروسه تضمین میکند که نقص ها در سریعترین زمان شناسایی میشوند. در برخی فرایندها، که عموماً به عنوان توسعه آزمایش-رانده شناخته میشوند، ممکن است آزمایش ها درست قبل از پیاده سازی انجام شوند و راهنمایی برای درستی پیاده سازی باشند.
مستندسازی طرح یکپارچه نرم افزار به جهت نگهداری آینده و تقویت، در طی توسعه انجام میشود. این مرحله میتواند شامل نوشتن یک API، چه داخلی چه خارجی، باشد. فرایند مهندسی نرم افزارِ اخذ شده توسط تیم توسعه تعیین میکند در صورت نیاز، چه میزان مستندسازی داخلی لازم است. مدل های برنامه-رانده (مثل آبشار) معمولاً مستندسازی بیشتری نسبت به مدل های چابک ایجاد میکنند.
گسترش و نگهداری نرم افزار
گسترش مستقیماً پس از آنکه کد بطور مناسبی آزمایش شود، برای انتشار تایید شود، و به فروش برسد یا در یک محیط تولیدی توزیع شود، آغاز میشود. این مرحله میتواند شامل نصب، سفارشی سازی (مثلاً تنظیم کردن پارامترها روی مقادیر مورد نظر مشتری)، آزمایش و احتمالاً یک دوره طولانی ارزیابی باشد.
آموزش نرم افزار و پشتیبانی مهم است، زیرا نرم افزار تنها زمانی اثربخش است که به درستی استفاده شود.
نگهداری و تقویت نرم افزار جهت رفع ملزومات یا نواقصی که جدیداً کشف میشوند، میتواند زمان و زحمت زیادی بگیرد، زیرا ملزوماتِ از قلم افتاده ممکن است باعث تحمیل بازطراحی نرم افزار شوند.
منبع :
1. http://www.buzzle.com/articles/major-types-of-software.html
2. http://www.systemgroup.net/intellectual-property/articles/1770
3. http://fa.wikipedia.org/wiki/
4.حقوق پدیدآورندگان نرم افزارهای کامپیوتری، دکتر امیر صادقی نشاط، نشر میزان، چاپ دوم