مهندسی نرم افزار

مهندسی نرم افزار (Software engineering):

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

تاریخچه:

در آغاز دهه ۱۹۶۰، مهندسی نرم افزار به عنوان نوع مهندسی خاص خود تلقی می شد. علاوه بر این، توسعه مهندسی نرم افزار به عنوان یک مبارزه در نظر گرفته شد. همگام شدن با سخت افزار مشکل بود که مشکلات زیادی را برای مهندسان نرم افزار ایجاد کرد. مشکلات شامل نرم افزاری بود که بیش از بودجه بود، از مهلت مقرر فراتر رفت، نیاز به رفع اشکال و تعمیر و نگهداری گسترده داشت، و نیازهای مصرف کنندگان را برآورده نکرد یا حتی هرگز تکمیل نشد. در سال ۱۹۶۸ ناتو اولین کنفرانس مهندسی نرم افزار را برگزار کرد که در آن مسائل مربوط به نرم افزار مورد بررسی قرار گرفت: دستورالعمل ها و بهترین شیوه ها برای توسعه نرم افزار ایجاد شد. خاستگاه اصطلاح “مهندسی نرم افزار” به منابع مختلفی نسبت داده شده است. اصطلاح “مهندسی نرم افزار” در فهرستی از خدمات ارائه شده توسط شرکت ها در شماره ژوئن ۱۹۶۵ COMPUTERS and AUTOMATION ظاهر شد و به طور رسمی در شماره اوت ۱۹۶۶ Communications of ACM (جلد ۹، شماره ۸) “نامه به عضویت در ACM» توسط رئیس ACM Anthony A. Oettinger، همچنین با عنوان کنفرانس ناتو در سال ۱۹۶۸ توسط پروفسور فردریش L. Bauer، اولین کنفرانس مهندسی نرم افزار مرتبط است. مارگارت همیلتون این رشته را «مهندسی نرم‌افزار» در طول ماموریت‌های آپولو توصیف کرد تا به کاری که انجام می‌دادند مشروعیت بخشد. در آن زمان تصور می شد که یک “بحران نرم افزاری” وجود دارد. چهلمین کنفرانس بین‌المللی مهندسی نرم‌افزار (ICSE 2018  ۵۰ سال «مهندسی نرم‌افزار» را با سخنرانی‌های اصلی جلسات عمومی فردریک بروکس و مارگارت همیلتون جشن می‌گیرد. در سال ۱۹۸۴، مؤسسه مهندسی نرم افزار (SEI) به عنوان یک مرکز تحقیق و توسعه با بودجه فدرال تأسیس شد که مقر آن در محوطه دانشگاه کارنگی ملون در پیتسبورگ، پنسیلوانیا، ایالات متحده است. واتس هامفری برنامه فرآیند نرم افزار SEI را با هدف درک و مدیریت فرآیند مهندسی نرم افزار تأسیس کرد. سطوح بلوغ فرآیند معرفی شده تبدیل به یکپارچه سازی مدل بلوغ قابلیت برای توسعه (CMMI-DEV) می شود که نحوه ارزیابی توانایی های یک تیم توسعه نرم افزار را توسط دولت ایالات متحده تعریف می کند. بهترین روش‌های مدرن و عموماً پذیرفته‌شده برای مهندسی نرم‌افزار توسط کمیته فرعی ISO/IEC JTC 1/SC 7 جمع‌آوری شده و به عنوان مجموعه دانش مهندسی نرم‌افزار (SWEBOK) منتشر شده است. مهندسی نرم افزار یکی از رشته های اصلی محاسبات محسوب می شود.

 

 

تعاریف و اختلافات اصطلاحات:

تعاریف قابل توجه مهندسی نرم افزار عبارتند از: “کاربرد سیستماتیک دانش، روش‌ها و تجربه علمی و فناوری در طراحی، پیاده‌سازی، آزمایش و مستندسازی نرم‌افزار” – دفتر آمار کار – IEEE Systems and Software Engineering – Vocabulary”کاربرد یک رویکرد سیستماتیک، منضبط، قابل سنجش برای توسعه، بهره برداری و نگهداری نرم افزار” – واژه نامه استاندارد IEEE اصطلاحات مهندسی نرم افزار”یک رشته مهندسی که با تمام جنبه های تولید نرم افزار مرتبط است” – ایان سامرویل “تاسیس و استفاده از اصول مهندسی صحیح به منظور دستیابی اقتصادی به نرم افزاری که قابل اعتماد است و بر روی ماشین های واقعی کار می کند” – فریتز بائر “شاخه ای از علوم کامپیوتر که با طراحی، پیاده سازی و نگهداری برنامه های پیچیده کامپیوتری سروکار دارد” – Merriam-Webster “مهندسی نرم افزار” نه تنها شامل عمل نوشتن کد، بلکه تمام ابزارها و فرآیندهایی است که یک سازمان برای ایجاد و نگهداری آن کد در طول زمان استفاده می کند. […] مهندسی نرم افزار را می توان به عنوان “برنامه نویسی یکپارچه در طول زمان” در نظر گرفت. .'”—مهندسی نرم افزار در Googleاین اصطلاح به طور رسمی کمتر استفاده شده است: به عنوان اصطلاح غیررسمی معاصر برای طیف گسترده ای از فعالیت ها که قبلا برنامه نویسی کامپیوتری و تجزیه و تحلیل سیستم نامیده می شد.به عنوان یک اصطلاح گسترده برای تمام جنبه های عمل برنامه نویسی رایانه، در مقابل نظریه برنامه نویسی رایانه، که به طور رسمی به عنوان زیر رشته علوم رایانه مورد مطالعه قرار می گیرد؛به عنوان اصطلاحی که حمایت از یک رویکرد خاص به برنامه‌نویسی رایانه را تجسم می‌دهد، رویکردی که اصرار دارد که به عنوان یک رشته مهندسی به جای یک هنر یا هنر در نظر گرفته شود، و از تدوین شیوه‌های توصیه‌شده حمایت می‌کند.ریشه شناسی “مهندس نرم افزار”مارگارت همیلتون در طول کار خود در برنامه آپولو اصطلاح “مهندسی نرم افزار” را ترویج کرد. اصطلاح “مهندسی” برای اذعان به این موضوع استفاده شد که کار را باید به همان اندازه جدی گرفت که سایر مشارکت‌ها در جهت پیشرفت فناوری. همیلتون استفاده خود از این اصطلاح را شرح می دهد: وقتی برای اولین بار این اصطلاح را مطرح کردم، حداقل در دنیای ما هیچ کس قبلاً در مورد آن نشنیده بود. این یک شوخی مداوم برای مدت طولانی بود. آنها دوست داشتند من را در مورد ایده های رادیکال من شوخی کنند. روز به یاد ماندنی بود که یکی از معتبرترین استادان سخت افزار در جلسه ای به همه توضیح داد که با من موافق است که فرآیند ساخت نرم افزار نیز باید مانند سخت افزار یک رشته مهندسی در نظر گرفته شود. نه به دلیل پذیرش «اصطلاح» جدید فی‌نفسه، بلکه به این دلیل که ما پذیرش او و دیگران در اتاق را به‌عنوان یک رشته مهندسی به‌خودی خود جلب کرده بودیم.

 الزامات نرم افزاری :

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

طراحی نرم افزار :

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

 ساخت نرم افزار:

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

 تست نرم افزار:

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

 تجزیه و تحلیل نرم افزار:

تجزیه و تحلیل نرم افزار فرآیند تجزیه و تحلیل رفتار برنامه های کامپیوتری با توجه به ویژگی هایی مانند عملکرد، استحکام و امنیت است. .

   نگهداری نرم افزار:

تعمیر و نگهداری نرم افزاربه فعالیت های مورد نیاز برای ارائه پشتیبانی مقرون به صرفه پس از ارسال محصول نرم افزاری اشاره دارد. تعمیر و نگهداری نرم افزار عبارت است از اصلاح و به روز رسانی برنامه های کاربردی نرم افزار پس از توزیع به منظور اصلاح عیوب و بهبود عملکرد آن. نرم افزار ارتباط زیادی با دنیای واقعی دارد و زمانی که دنیای واقعی تغییر می کند، تعمیر و نگهداری نرم افزار مورد نیاز است. تعمیر و نگهداری نرم افزار شامل موارد زیر است: تصحیح خطا، بهینه سازی، حذف ویژگی های استفاده نشده و حذف شده، و بهبود ویژگی هایی که از قبل وجود دارد. معمولاً تعمیر و نگهداری حدود ۴۰ تا ۸۰ درصد هزینه پروژه را به خود اختصاص می دهد، بنابراین تمرکز بر تعمیر و نگهداری هزینه ها را پایین نگه می دارد.

برنامه های مدرک مهندسی نرم افزار برنامه های درجه مهندسی نرم افزار:

نیمی از پزشکان امروزی دارای مدرک در علوم کامپیوتر، سیستم‌های اطلاعات یا فناوری اطلاعات هستند. در سال ۱۹۸۷، دپارتمان محاسبات در امپریال کالج لندن اولین مدرک سه ساله لیسانس مهندسی نرم افزار را در بریتانیا و جهان معرفی کرد. در سال بعد، دانشگاه شفیلد برنامه مشابهی را تأسیس کرد. در سال ۱۹۹۶، مؤسسه فناوری روچستر اولین برنامه لیسانس مهندسی نرم افزار را در ایالات متحده تأسیس کرد، اما تا سال ۲۰۰۳ اعتبار ABET را دریافت نکرد، همزمان با دانشگاه رایس، دانشگاه کلارکسون، دانشکده مهندسی میلواکی و دانشگاه ایالتی می سی سی پی. آنها را به دست آورد. در سال ۱۹۹۷، کالج فناوری PSG در کویمباتور، هند اولین کسی بود که مدرک کارشناسی ارشد پنج ساله یکپارچه را در مهندسی نرم افزار آغاز کرد.[نیازمند منبع] از آن زمان، مدارک کارشناسی مهندسی نرم افزار در بسیاری از دانشگاه ها تأسیس شده است. یک برنامه درسی استاندارد بین‌المللی برای مقاطع کارشناسی مهندسی نرم‌افزار، SE2004، توسط یک کمیته راهبری بین سال‌های ۲۰۰۱ و ۲۰۰۴ با بودجه انجمن ماشین‌های محاسباتی و انجمن کامپیوتر IEEE تعریف شد. از سال ۲۰۰۴، در ایالات متحده، حدود ۵۰ دانشگاه مدارک مهندسی نرم افزار ارائه می دهند که هم علم کامپیوتر و هم اصول و شیوه های مهندسی را آموزش می دهند. اولین مدرک کارشناسی ارشد مهندسی نرم افزار در دانشگاه سیاتل در سال ۱۹۷۹ تاسیس شد. از آن زمان مدارک فارغ التحصیل مهندسی نرم افزار از بسیاری از دانشگاه ها در دسترس بوده است. به همین ترتیب در کانادا، هیئت تایید صلاحیت مهندسی کانادا (CEAB) شورای مهندسین حرفه ای کانادا چندین برنامه مهندسی نرم افزار را به رسمیت شناخته است. در سال ۱۹۹۸، دانشکده تحصیلات تکمیلی نیروی دریایی ایالات متحده (NPS) اولین برنامه دکترا در مهندسی نرم افزار در جهان را تأسیس کرد. مدرک ارائه شده از طریق دپارتمان علوم و مهندسی کامپیوتر در دانشگاه ایالتی کالیفرنیا، فولرتون. استیو مک کانل معتقد است که چون اکثر دانشگاه ها به جای مهندسی نرم افزار، علوم کامپیوتر را آموزش می دهند، کمبود مهندسان نرم افزار واقعی وجود دارد.دانشگاه ETS (Ecole de Technologie Supérieure) و UQAM (Université du Québec à Montréal) توسط IEEE موظف شدند تا بدنه دانش مهندسی نرم افزار (SWEBOK) را توسعه دهند که به استاندارد ISO تبدیل شده است که مجموعه دانش تحت پوشش یک مهندس نرم افزار را توصیف می کند.

حرفه:

الزامات قانونی برای صدور مجوز یا گواهی مهندسین نرم افزار حرفه ای در سراسر جهان متفاوت است. در انگلستان، هیچ گونه مجوز یا الزام قانونی برای در نظر گرفتن یا استفاده از عنوان شغلی مهندس نرم افزار وجود ندارد. در برخی از مناطق کانادا، مانند آلبرتا، بریتیش کلمبیا، انتاریو، و کبک، مهندسان نرم‌افزار می‌توانند نشان مهندس حرفه‌ای (P.Eng) و/یا نام حرفه‌ای سیستم‌های اطلاعاتی (I.S.P.) را داشته باشند. در اروپا، مهندسان نرم افزار می توانند عنوان حرفه ای مهندس اروپا (EUR ING) را دریافت کنند. ایالات متحده، از سال ۲۰۱۳، یک آزمون مهندس حرفه ای NCEES را برای مهندسی نرم افزار ارائه کرده است، در نتیجه به مهندسان نرم افزار اجازه می دهد مجوز و به رسمیت شناخته شوند. NCEES به دلیل عدم شرکت در آزمون پس از آوریل ۲۰۱۹ به پایان خواهد رسید .مجوز اجباری در حال حاضر هنوز تا حد زیادی مورد بحث است، و به عنوان بحث برانگیز تلقی می شود. .[نیازمند منبع] IEEE Computer Society و ACM، دو سازمان حرفه ای اصلی مهندسی نرم افزار مستقر در ایالات متحده، راهنماهایی را برای حرفه مهندسی نرم افزار منتشر می کنند. راهنمای IEEE برای مجموعه دانش مهندسی نرم‌افزار – نسخه ۲۰۰۴ یا SWEBOK، زمینه را تعریف می‌کند و دانشی را که IEEE از یک مهندس نرم‌افزار شاغل انتظار دارد، توضیح می‌دهد. جدیدترین نسخه SWEBOK v3 یک نسخه به روز شده است و در سال ۲۰۱۴ منتشر شد. IEEE همچنین “مشخصات اخلاقی مهندسی نرم افزار” را منتشر می کند.

 

ارتباط‌‌با‌ما :
تلفن : ۰۲۱۶۶۱۷۶۱۹۶       ۰۲۱۶۶۵۶۹۷۶۲      ۰۹۰۵۹۶۲۶۹۰۰
نشانی : خیابان جمالزاده‌شمالی بعد از بلوار‌کشاورز پلاک ۴۱۴ طبقه ۳ واحد ۵
شبکه‌های‌اجتماعی‌پردیس‌فناوری‌کیش :
سامانه‌آموزش‌مجازی‌رهیاران : www.rahyaranlms.ir 
کانال‌تلگرام kishtech@
 اینستاگرام    rahyaranlms            kishtech.ir
آپارات     kishtech