نرم افزاز چیست؟ 

نرم افزار چگونه تعریف می شود؟ 

اصلا به چه چیزی نرم افزار می گویند؟

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

برای نرم افزار نمی توان یک تعریف واحد در نظر گرفت. حتی کتاب هایی که به صورت مرجع برای درس مهندسی نرم افزار در نظر گرفته شده است، به یک تعریف بسنده نکرده اند.



 

اما یک سند برای تعریف استاندارد نرم افزار در سال 2008 توسط ANSI با عنوان  Guidelines on Software in Standards مشخص و منتشر شد.( لینک دریافت فایل PDF مربوطه


حال شاید با خودتان بگویید که ANSI چیست؟ 

َANSI مخفف "American National Standards Institute"است.ANSI در ابتدا به این اسم وجود نداشت. داستان پدیدار شدن این انستیتو بدین قرار  است که : 

این انستیتو در ابتدا (American Engineering Standards Committee" (AESC نام داشت که در سال 1918 تشکیل شد. در طی همکاری با IEEE یا همان "Institute of Electrical and Electronics Engineers" و چندین سازمان و انستیتوی دیگر که کارشان توسعه استاندارد های مهندسی بود و  و این همکاری تا سال 1928 ادامه داشت، این کمیته بزرگتر شد. در همین سال بود که AESC سازمان دهی شده و  نامش را به

(American Standards Association (ASA  تغییر داد.

ASA همکاری هایش تا سطح جهانی  گسترش داد و شروع به همکاری با ISO کرد که باعث ارتقاء سطح کیفیت استانداردهای داخلی آمریکا شد. 

در سال 1969 بود که ASA تغییر نام داد و ANSI به وجود آمد.


بپردازیم به تعریف نرم افزار:

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

در بین کتب مختلفی که در این زمینه وجود دارد، من به سراغ کتاب مهندسی نرم افزار پرسمن ویرایش هفتم رفتم.

پرسمن در این کتاب به دو روش مختلف به تعریف نرم افزار می پردازد. ابتدا برای تعریف نرم افزار مواردی که در Textbookها پیدا می شود را در صفحه 4 کتاب می نویسد :

Software is: (1) instructions (computer programs) that when executed provide desired features, function, and performance; (2) data structures that enable the programs to adequately manipulate information, and (3) descriptive information in both hard copy and virtual forms that describes the operation and use of the programs.

اما خودش در ادامه همین تعریف می گوید که نمی شود برای نرم افزار گفت که این تعریف کاملی است یا تعاریف کاملتری از این وجود ندارند.

 پرسمن در این کتاب برای تعریف نرم افزار ابتدا به مقایسه نرم افزار وسخت افزار و تفاوت فرایند تولید سخت افزار و نرم افزار  می پردازد.

در این حین یک نکته را بیان می کند که

Software is a logical rather than a physical system element

و درنهایت  می توان گفت که دو تعریف را برای نرم افزار ارائه می کند. 

1. Software is developed or engineered; it is not manufactured in the classical sense.

هدف هر  دو کارِ تولیدِ سخت افزار و نرم افزار، ساخت یک محصول است. اما رویکرد ساخت نرم افزار و سخت افزار با هم متفاوت است. 

در نمودار زیر مشاهده می کنید در فاز ابتدایی تولید سخت افزار، که به آن Infant mortality می گویند، نرخ شکست یا همان Failure rate خیلی زیاد است.



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

اسم این فاز جدید که می توان گفت یک خط نسبتاً راست را در نمودار نمایش می دهد ، Steady-State Level است. در این فاز سخت افزار به کار خودش در کامپیوترهای مختلف ادامه می دهد. بعد گذشت مدت زمانی که دقیقا معلوم نیست، سخت افزار وارد فاز فرسودگی یا Wear out می شود و نرخ فرسودگی اش با گذشت هر چه بیشتر زمان ، بیشتر و بیشتر می شود و در نهایت از چرخه تولید و خدمات پس از فروش خارج می شود. بعد از این فاز می توان گفت که سخت افزار دیگر مورد استفاده قرار نمی گیرد و اصطلاحاً می گویند که مرده است.

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

2. Software doesn’t “wear out.” but it does deteriorate 

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

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



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

در نمودار بالا دو تفسیر از نرخ شکست نرم افزار وجود دارد. 

1) نرم افزار بدون هیچ تغییری در پروسه توسعه مواجه شود. همان Idealized curve است که در تولید و ساخت و توسعه نرم افزار، چنین چیزی را نمی توان مشاهده کرد. در این مورد می توان یاد ضرب المثل شتر در خواب بیند پنبه دانه افتاد. 

2) نرم افزار با تغییراتی در فازهای مختلف مواجه می شود. همان Actual curve یا نمودار واقعی نرخ شکست نرم افزار است. معمولا نرخ شکست نرم افزار پس از هر تغییری که در ساخت یا توسعه نرم افزار پدید می آید، افزایش می یابد.  

نرم افزار نیز بعد از طی مدت زمانی نامعلوم و وابسته به عوامل مختلف (مانند نگه داری و توسعه بعد از نگه داری) ، عمرش را می کند و رختش را از دار دنیا می بندد. 


خب ،بعد از این همه تعاریف و تفاسیر حال کار نرم افزار چیست و به چه چیزی یک نرم افزار می گویند ؟

نرم افزار همزمان می تواند دو نقش را بر عهده داشته باشد.

1) نرم افزار به عنوان یک محصول :  که کارش تحویل یک پتانسیلِ محاسباتیِ درونی شده با سخت افزارِ کامپیوتر است.که این سخت افزار می تواند سخت افزار یک PC باشد یا یک شبکه ای از کامپیوتر ها و سرور ها.

2) نرم افزار به عنوان یک وسیله برای تحویل محصول : در این تعریف نرم افزار به عنوان یک ابزار کنترلی پایه و بستر به منظور ارتباط برقرار کردن بین سایر اطلاعات موجود  مورد استفاده قرار میگیرد.

به نرم افزارهایی که در این دسته قرار میگیرند ، می توان به سیستم های عامل (Operating Systems) و ابزارهای تولید نرم افزار( IDE) و نرم افزارهای بستر شبکه نیز به طور تخصصی اشاره کرد.