نرم افزار چیست؟
در سال 2008، تعداد کامپیوترهای شخصی در جهان چیزی در حدود یک میلیارد بود اما امروزه فقط 5.11 میلیارد کاربر از گوشی همراه استفاده میکنند. هر یک از این دستگاهها وابسته به یک نرم افزار پیچیده هستند که با بسیاری از عملکردهای مختلف سروکار دارند. اما نرم افزار چیست؟
کسب و کارها و کاربران در سراسر جهان از نرم افزارها برای اهداف متعدد استفاده میکنند؛ اما آنچه که قابل تأمل است، وابستگی زندگی امروزی ما به نرم افزارهاست. برای درک بهتر مفهوم نرم افزار و اهمیت آن در دنیای امروز با پینگونت همراه باشید.
تعریف نرم افزار
نرم افزار (Software) مجموعهای از دستورالعملها، دادهها یا برنامهها است که برای کار با کامپیوترها و انجام کارهای خاص استفاده میشود. نرم افزار برعکس سخت افزار است که جنبههای فیزیکی کامپیوتر را توصیف میکند.
به عبارتی، نرم افزار یک اصطلاح عمومی است که به برنامهها، اسکریپتها و اپلیکیشنهایی که بر روی دستگاه اجرا میشوند، اطلاق میشود. میتوان این اصطلاح را به عنوان قسمت متغیر یک کامپیوتر در نظر گرفت، در حالی که سخت افزار قسمت غیرقابل تغییر است.
نرم افزارهای اولیه برای کامپیوترهای خاصی نوشته میشدند و با سخت افزاری که بر روی آن کار میکرد، به فروش میرسیدند. در دهه 1980، نرم افزارها روی فلاپی دیسکها و بعداً روی سی دی (CD) و دی وی دی (DVD) فروخته شدند. امروزه اکثر نرم افزارها از طریق اینترنت خریداری میشوند و قابل دانلود و نصب روی سیستمها هستند.
تاریخچه نرم افزار
تاریخ رایانش یا محاسبه (Computing) به عنوان یک مفهوم قدیمی به اختراعاتی مانند چرتکه باز میگردد. با این حال، این اختراعات کاملاً سخت افزاری بودند ولی نرم افزار نیاز به پردازنده و حافظه کامپیوتری دارد که در آن عملکردهای ریاضی قابل استفاده مجدد و ذخیره سازی هستند. آدا لاولیس اولین برنامه کامپیوتری شناخته شده را در سال 1843 برای موتور تحلیلی نوشت. موتور تحلیلی توسط چارلز بابیج در سال 1837 طراحی شد و اولین کامپیوتر مکانیکی عمومی بود.
با این حال، این برنامه به صورت تئوری باقی ماند زیرا موتور تحلیلی هرگز از نظر فیزیکی قابل تولید نبود. اولین نظریه مدرن نرم افزار، توسط آلن تورینگ در مقاله 1935 ارائه شد.اولین باری که یک کامپیوتر نرم افزاری را در حافظه الکترونیکی نگه داشت و آن را با موفقیت اجرا کرد، در 21 ژوئن 1948 اتفاق افتاد.
دانشمند کامپیوتر تام کیلبورن و همکارش فردی ویلیام، یکی از اولین کامپیوترها به نام منچستر بیتی یا همان ماشین آزمایشی در مقیاس کوچک (SSEM) را در دانشگاه منچستر در انگلستان ساختند. ماشین آزمایشی در مقیاس کوچک برای انجام محاسبات ریاضی با استفاده از دستورالعملهای کد ماشین برنامه ریزی شده بود. در این نرم افزار 52 دقیقه طول میکشید تا بزرگترین تقسیم کننده دو را به توان 18 محاسبه کند.
در اواخر دهه 1950، اولین زبان برنامه نویسی به نام فرترن (Fortran) ظاهر شد. به زودی زبانهای دیگری از جمله کوبول (Cobol) و بیسیک (Basic) به وجود آمدند. این زبانها به برنامهها اجازه میدهند تا به جزئیات معماری سخت افزار کامپیوتر وابسته نباشند. زبانها عمدتاً برای تعیین محاسبات عددی در نظر گرفته شده بودند.
نرم افزارها در دهه 70 و 80 با ورود کامپیوترهای شخصی رواج یافتند. کامپیوتر Apple II در سال 1977، یک کامپیوتر خانگی 8 بیتی و یکی از اولین محصولات میکرو کامپیوتر موفق در تولید انبوه جهانی را عرضه کرد. ویسیکلک (VisiCalc) اولین نرم افزار صفحه گسترده برای کامپیوترهای شخصی بود که در سال 1979 برای Apple II منتشر شد. این نرم افزار به زبان اسمبلی نوشته شده بود.
شرکتهای دیگری مانند آی بی ام (IBM) به زودی کامپیوترهای خانگی را توسعه دادند. نرم افزارهای رایج دهه 90 شامل اتوکد، مایکروسافت ورد و اکسل هستند. یکی دیگر از نوآوریهای مهم در تاریخ توسعه نرم افزار، ظهور نرم افزار منبع باز در دهه 1990 بود. هسته لینوکس در سال 1991 منتشر شد و علاقه به نرم افزارهای منبع باز افزایش یافت.
تفاوت نرم افزار با سخت افزار
نرم افزار و سخت افزار کامپیوتر به یکدیگر نیاز دارند و هیچ کدام به تنهایی قابل استفاده نیستند. برای درک بهتر تفاوتهای نرم افزار و سخت افزار بگذارید یک مثال بزنیم. صفحات یک کتاب سخت افزار هستند و کلمات، جملات، پاراگرافها نوشته شده در آن نرم افزار هستند. کامپیوتر بدون نرم افزار مانند کتابی است که پر از صفحات خالی است. یک کامپیوتر به نرم افزار نیاز دارد تا مفهوم و معنا پیدا کند، همانطور که کلمات برای معنیدار کردن کتاب مورد نیاز هستند.
در حالی که هر دوی نرم افزار و سخت افزار ضروری هستند، تفاوتهای زیادی بین این دو وجود دارند که به شرح زیر هستند:
- سخت افزار یک دستگاه فیزیکی مانند مادربرد است، در حالی که نرم افزار مجموعهای از کدهای مورد نیاز برای نصب یک برنامه در سیستم است.
- سخت افزار نمیتواند کاری را بدون نرم افزار انجام دهد. به طور مشابه، نرم افزار نمیتواند کاری را بدون سخت افزار انجام دهد.
- سخت افزار با گذشت زمان از بین میرود (طول عمر) اما نرم افزار اینطور نیست.
- سخت افزار فقط زبان سطح ماشین را میفهمد اما نرم افزار به زبانهایی که انسان میتواند بخواند، طراحی میشود.
- نرم افزار را میتوان به راحتی ایجاد، تغییر یا حذف کرد، در حالی که راه اندازی سخت افزار مهارت بیشتری میطلبد.
انواع نرم افزار
در میان انواع مختلف نرم افزارها، رایجترین آنها شامل موارد زیر هستند:
برنامه نرم افزار (Application Software)
رایجترین نوع نرم افزار، برنامه هایی مخصوص کامپیوتر هستند که در قالب یک بسته نرم افزاری ارائه میشوند. این بسته های نرم افزاری دارای انواع برنامه های مختلف هستند که می توانند نیازهای کاربران را برطرف کنند. برای مثال، «نرم افزار Download Manager» یک برنامه کاربردی است که برای سهولت در دانلود انواع فایل بر روی سیستم های کامپیوتری نصب و اجرا می شود
انواع برنامههای نرم افزاری عبارتند از:
- برنامههای مستند سازی: نرم افزارهایی هستند که برای مستندسازی استفاده میشوند. به عنوان مثال میتوان به Microsoft Word، Google Docs و AppleWorks اشاره کرد.
- برنامههای صفحه گسترده: نرم افزارهایی هستند که برای محاسبه دادههای کمی استفاده میشوند. به عنوان مثال میتوان به Microsoft Excel و Google Sheets اشاره کرد.
- برنامههای پایگاه داده: نرم افزارهایی هستند که برای ایجاد و مدیریت پایگاه داده برای سازماندهی دادهها استفاده میشوند. به عنوان مثال میتوان به MySQL ،Clipper و FileMaker اشاره کرد.
- برنامههای چند رسانهای: ابزارهایی که قادر به پخش، ایجاد یا ضبط تصاویر، فایلهای صوتی یا تصویری هستند. برای ویرایش ویدئو، انیمیشن، گرافیک و ویرایش تصویر استفاده میشوند. به عنوان مثال میتوان به Adobe Photoshop و Picasa اشاره کرد.
- مجموعه برنامهها: مجموعهای از برنامههای مرتبط به صورت بسته فروخته میشوند. مایکروسافت آفیس پرکاربردترین مجموعه برنامه است.
- مرورگرهای اینترنتی: نرم افزارهایی هستند که برای دسترسی و مشاهده وب سایتها استفاده میشوند. به عنوان مثال میتوان به Google Chrome و Internet Explorer اشاره کرد.
- برنامههای ایمیل: نرم افزارهای مورد استفاده برای ارسال ایمیل هستند. به عنوان مثال میتوان به Outlook و Gmail اشاره کرد.
نرم افزار سیستمی (System Software)
این برنامههای نرم افزاری برای اجرای اپلیکیشنها و سخت افزارهای کامپیوتری طراحی شدهاند. نرم افزار سیستمی، فعالیتها و عملکردهای سخت افزار و نرم افزار را هماهنگ میکند. علاوه بر این، عملکرد سخت افزار کامپیوتر را کنترل کرده و محیط یا بستری را برای سایر انواع نرم افزارها فراهم میکند. سیستم عامل بهترین مثال نرم افزار سیستمی است و همه برنامههای کامپیوتری دیگر را مدیریت میکند. نمونههای دیگر نرم افزار سیستمی شامل مترجمان زبان کامپیوتر هستند.
انواع نرم افزارهای سیستمی عبارتند از:
- سیستم ورودی و خروجی اولیه (BIOS): سیستم عامل داخلی است که تعیین میکند یک کامپیوتر بدون دسترسی به برنامههای دیسک چه کاری میتواند انجام دهد.
- بوت (Boot): یک سیستم عامل را در حافظه اصلی یا RAM کامپیوتر بارگذاری میکند.
- اسمبلر (Assembler): دستورالعملهای اولیه را میگیرد و آنها را به یک الگوی بیت تبدیل میکند که پردازنده میتواند برای انجام عملیات اولیه از آنها استفاده نماید.
- درایور دستگاه: نوع خاصی از دستگاه متصل به کامپیوتر مانند صفحه کلید یا ماوس را کنترل میکند.
نرم افزار درایور (Driver software)
این نرم افزار که به عنوان درایور دستگاه نیز شناخته میشود، اغلب نوعی نرم افزار سیستمی محسوب میشود. درایورها، دستگاهها و لوازم جانبی متصل به کامپیوتر را کنترل میکنند و آنها را قادر میسازند تا وظایف خاص خود را انجام دهند. هر دستگاهی که به کامپیوتر متصل است، برای عملکرد حداقل به یک درایور دستگاه نیاز دارد. به عنوان مثال، برای استفاده پرینتر در کامپیوتر شخصی، نیاز به نصب درایور پرینتر است. اگر از چندین سیستم عامل مانند لینوکس، ویندوز یا مک استفاده میشود، باید درایورهای جداگانهای برای هر کدام نصب شوند. نمونههایی از درایورها عبارتند از:
- درایور BIOS
- درایور نمایشگر
- درایور مادربرد
- درایور USB
- درایور VGA
نرم افزار میان افزار (Middleware)
اصطلاح میان افزار به برنامه هایی اطلاق میشود که بین برنامههای نرم افزارهای و سیستمی نقش واسطه را بازی می کنند. درحقیقت، میان افزار وظیفه ترجمه دستورات نرم افزاری برای سخت افزار را بر عهده دارد. برای مثال، دستوراتی که از طریق کیبورد ارسال می شود را میان افزار برای سخت افزار تقسیر می کند. به عنوان مثال، میان افزار مایکروسافت ویندوز را قادر میسازد تا با اکسل (Excel) و ورد (Word) ارتباط برقرار کند. همچنین، میان افزار بین دو سیستم عامل مختلف هماهنگی ایجاد میکند و حتی میتواند برنامههای جدیدتر را با برنامههای قدیمیتر سازگار کند.
نرم افزار برنامه نویسی (Programming software)
برنامه نویسان کامپیوتر برای نوشتن کد از نرم افزارهای برنامه نویسی استفاده میکنند. نرم افزارهای برنامه نویسی توسعه دهندگان را قادر میسازند تا سایر برنامههای نرم افزاری را توسعه داده و اشکال زدایی کنند. نمونههایی از نرم افزارهای برنامه نویسی شامل اسمبلرها، کامپایلرها، دیباگرها و مفسرها هستند. این برنامهها به عنوان نوعی مترجم عمل میکنند. آنها زبانهای برنامهنویسی مانند پایتون یا C++ را به چیزی ترجمه میکنند که برای کامپیوتر قابل درک باشند. نرم افزارهای برنامه نویسی علاوه بر ساده کردن کد، کارهای زیر را نیز انجام میدهند:
- اطلاعات ذخیره شده در پایگاه داده نرم افزار را در اختیار کاربر قرار میدهد.
- کد منبع و همچنین جزئیات برنامه را فهرست میکنند.
- گزارشهای تشخیصی را ارائه میدهند.
- خطاهای سیستم را در زمان اجرا برطرف میکنند.
طراحی و پیاده سازی نرم افزار
چرخه عمر توسعه نرم افزار چارچوبی است که مدیران پروژه برای توصیف مراحل و وظایف مربوط به طراحی نرم افزار از آن استفاده میکنند. اولین گام در چرخه عمر طراحی، برنامه ریزی هدفمند و سپس تجزیه و تحلیل نیازهای افرادی است که از نرم افزار استفاده خواهند کرد.
پس از تجزیه و تحلیل نیازهای اولیه، مرحله طراحی با هدف تعیین چگونگی برآوردن نیازهای کاربر مشخص میشود. مرحله بعدی پیاده سازی است، جایی که کار توسعه به پایان میرسد و سپس نرم افزار تست میشود. مرحله تعمیر و نگهداری شامل همه کارهایی است که برای کارکرد سیستم لازم میباشد.
طراحی نرم افزار شامل توصیفی از ساختار برنامه مورد استفاده، مدلهای داده محور، رابط بین اجزای سیستم و الگوریتمهایی است که مهندس نرم افزار از آنها استفاده خواهد کرد. فرآیند طراحی نرم افزار، نیازهای کاربر را به شکلی تبدیل میکند که برنامه نویسان کامپیوتر میتوانند از آن برای کد نویسی و پیاده سازی نرم افزار استفاده کنند. مهندسان نرم افزار، روند طراحی را به صورت تکراری توسعه میدهند و با هر بار تست کردن، اصلاحات لازم را انجام میدهند.
انواع مختلف طراحی نرم افزار شامل موارد زیر است:
- طراحی معماری: این طرح بنیادی است که ساختار کلی سیستم، اجزای اصلی آن و روابط آنها با یکدیگر را با استفاده از ابزارهای طراحی معماری مشخص میکند.
- طراحی سطح بالا: این دومین لایه طراحی است که بر چگونگی پیاده سازی سیستم به همراه تمام اجزای آن در قالبهای ماژولهایی که توسط یک نرم افزار پشتیبانی میشوند، تمرکز دارد. یک طراحی سطح بالا، روابط بین جریان داده و ماژولها و عملکردهای مختلف سیستم را توصیف میکند.
- طراحی دقیق و با جزئیات: این لایه سوم طراحی بر تمام جزئیات پیاده سازی لازم برای ایجاد ساختار مشخصی از معماری نرم افزار تمرکز میکند.
نحوه حفظ کیفیت نرم افزار
اگر نرم افزار هر دو الزامات عملکردی و غیرعملکردی خود را برآورده کند، کیفیت نرم افزار اندازه گیری میشود. الزامات عملکردی مشخص میکند که نرم افزار باید چه کاری انجام دهد. این الزامات شامل جزئیات فنی، دستکاری و پردازش دادهها، محاسبات یا هر عملکرد خاص دیگری هستند که مشخص میکنند یک برنامه چه اهدافی را انجام میدهد.
الزامات غیرعملکردی نحوه کارکرد سیستم را تعیین میکنند. الزامات غیرعملکردی شامل قابلیت حمل، امنیت، حریم خصوصی و قابلیت استفاده هستند. تست نرم افزار، مسائل فنی را در کد منبع نرم افزار شناسایی و حل میکند و قابلیت استفاده کلی، عملکرد، امنیت و سازگاری محصول را برای اطمینان از مطابقت با الزامات آن ارزیابی مینماید.
ابعاد کیفیت نرم افزار شامل ویژگیهای زیر هستند:
- دسترسی: میزان استفاده گروهی از افراد مختلف، از جمله افرادی که به فنآوریهای تطبیقی مانند تشخیص صدا و بزرگنمایی صفحه نیاز دارند، میتوانند به راحتی از این نرم افزار استفاده کنند.
- سازگاری: مناسب بودن نرم افزار برای استفاده در محیطهای مختلفی مانند سیستم عاملها، دستگاهها و مرورگرهای مختلف را بیان میکند.
- بهره وری: دلالت بر توانایی نرم افزار برای عملکرد خوب بدون اتلاف انرژی، منابع، تلاش، زمان و پول دارد.
- عملکرد: توانایی نرم افزار در انجام وظایف مشخص شده خود را بیان میکند.
- قابلیت نصب: قابلیت نصب نرم افزار در محیطی مشخص را نشان میدهد.
- بومی سازی: زبانهای مختلف، مناطق زمانی و سایر ویژگیهایی که یک نرم افزار میتواند در آنها کار کند.
- قابلیت نگهداری: به راحتی میتوان نرم افزار را برای افزودن و بهبود ویژگیها، رفع اشکالات و سایر اصلاح کرد.
- کارایی: سرعت اجرای نرم افزار تحت بار خاصی را بیان میدارد.
- قابلیت حمل: قابلیت انتقال نرم افزار به راحتی از مکانی به مکان دیگر را بیان میکند.
- قابلیت اطمینان: توانایی نرم افزار برای انجام عملکرد مورد نیاز در شرایط خاص برای مدت زمان مشخص بدون هیچ گونه خطا را مشخص میکند.
- مقیاس پذیری: دلالت بر اندازه گیری توانایی نرم افزار در افزایش یا کاهش عملکرد در پاسخ به تغییرات در نیازهای پردازشی آن دارد.
- امنیت: توانایی نرم افزار برای محافظت در برابر دسترسیهای غیر مجاز، تجاوز به حریم خصوصی، سرقت، از دست دادن دادهها، نرم افزارهای مخرب و سایر موارد را بیان میکند.
- قابلیت تست پذیری: تست نرم افزار چقدر آسان است.
- قابلیت استفاده: استفاده از نرم افزار چقدر آسان است.
برای حفظ کیفیت نرم افزار پس از استقرار، توسعه دهندگان باید دائماً آن را برای برآوردن نیازهای جدید مشتری و رسیدگی به مشکلات شناسایی مشتریان تطبیق دهند. این شامل بهبود عملکرد، رفع اشکالات و تنظیم کد نرم افزار برای جلوگیری از مشکلات است. مدت زمان ماندگاری یک محصول در بازار، بستگی به توانایی توسعه دهندگان برای رعایت این الزامات نگهداری دارد.
وقتی نوبت به تعمیر و نگهداری میرسد، چهار نوع تغییر میتوانند انجام شوند:
- اصلاحی: کاربران اغلب اشکالاتی که توسعه دهندگان باید رفع کنند را شناسایی کرده و گزارش میدهند. این اشکالات اغلب شامل خطاهای برنامه نویسی و سایر مشکلاتی هستند که نرم افزار را از برآورده کردن الزامات آن باز میدارند.
- انطباقی: توسعه دهندگان باید به طور مرتب در نرم افزار خود تغییراتی ایجاد کنند تا از سازگاری آن با تغییرات سخت افزاری و محیط نرم افزاری مانند نسخه جدید سیستم عامل، مطمئن شوند.
- کامل کننده: اینها تغییراتی مانند بهبود رابط کاربری یا تنظیم کد نرم افزار برای افزایش عملکرد هستند که عملکرد سیستم را بهبود میبخشند.
- پیشگیرانه: این تغییرات برای جلوگیری از خرابی نرم افزار انجام میشوند و شامل کارهایی مانند تجدید ساختار و بهینه سازی کدها هستند.
کلام آخر
نرم افزارهای کامپیوتری یافتن اطلاعات یا محصولات مورد نیاز از طریق مرور و برقراری ارتباط با مردم در سراسر جهان را آسانتر از همیشه کردهاند. همانطور که نرم افزارها را میتوان با دستگاهها و ابزارهای مختلف ادغام کرد، آنها همچنان به ما کمک میکنند تا چالشهای مختلف زندگی را حل کنیم. برای مثال، چگونه با استفاده از نرم افزار GPS، از یک مکان به مکان دیگر حرکت میکنیم، بدون آنکه مسیر خود را گم کنیم! نرم افزارهای مربوط به حوزه شبکههای اجتماعی مانند اینستاگرام، واتسآپ و غیره، بیش از هر زمان دیگری زندگی، کار و سرگرمیهای روزانه ما را شکل دادهاند.
منابع:
https://searchapparchitecture.techtarget.com
https://amsterdamstandard.com/
بدون دیدگاه