مهندسی نرم افزار یا Software Engineering
زمان مطالعه 4 دقیقه
۲۱ مهر ۱۴۰۰
نویسنده پایدار سامانه
تعداد کامنت 0

با مفهوم مهندسی نرم افزار آشنا شوید

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

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

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

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

با افزایش پیچیدگی پروژه و تبدیل شدن آن به نرم افزار، به بیش از یک نفر برای کار روی آن نیاز است و گاهی اوقات حتی به بیش از یک زبان برنامه نویسی نیاز می شود، نقش مهندسی نرم افزار یا Software Engineering ظاهر می شود.

برنامه نویسی چیست؟
برنامه نویسی چیست؟

مهندسی نرم افزار یا Software Engineering چیست؟

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

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

مهندس نرم افزار کیست؟

مهندس نرم افزار (Software Engineer)، شخص مسئول سازماندهی کار گروهی از برنامه نویسان است که در ساخت برنامه کاربردی یا پروژه نرم افزاری مشارکت دارند.

مهندس نرم افزار باید موارد زیر را داشته باشد:

دانش فنی

مانند دانش برنامه نویسی، ریاضیات، نگهداری برنامه، تجزیه و تحلیل برنامه و آزمایش.

دانش غیر فنی

به عنوان مثال توانایی برقراری ارتباط با اعضای تیم، رهبری، شخصیت و انعطاف پذیری

تنوع پروژه های نرم افزاری

برنامه ها یا پروژه های نرم افزاری از جهات مختلف متنوع هستند، به دلیل تنوع زیاد انواع نیاز ها و درخواست های مشتری و هچنین روش های پیاده سازی، علم مهندسی نرم افزار (Software Engineering) باید توانایی پاسخ به نیازهای مشتریان و صاحبان محصول را در هر نوع به گونه ای دهد که نیاز های بیزینسی به خوبی در تحلیل، توسعه و پیاده سازی شکل بگیرد. به عنوان مثال:

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

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

انواع نرم افزار از نظر کاربرد

از نظر کاربرد دو نوع نرم افزار وجود دارد:

نرم افزار های عمومی یا Generic Software

که نرم تفزار هایی هستند که در جهت اهداف عمومی برای استفاده افراد یا شرکت ها تولید می شوند. نمونه هایی از این نرم افزار ها برنامه های مایکروسافت مانند مایکروسافت Word و سایر برنامه های شرکت Adobe مانند Photoshop هستند.

نرم افزار های سفارشی یا Custom Software

اینها نرم افزار هایی هستند که به طور خاص برای مشتری مطابق خواسته های وی آماده می شوند.

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

زمان

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

کیفیت

کیفیت را می توان از چند جهت به شرح زیر مشاهده کرد:

  1. کیفیت از دیدگاه مشتری یا Customer، از جمله تحویل به موقع سیستم، و همچنین اینکه برنامه عاری از خطا باشد، و اینکه موارد مورد نیاز را به طور کارآمد انجام می دهد و به راحتی قابل نگهداری است.
  2. کیفیت از دید کاربر، از جمله طراحی خوب نرم افزار، سهولت استفاده، انعطاف پذیری و کارایی.
  3. کیفیت از دیدگاه توسعه دهنده، Engineer Software یا Developer، این است که نرم افزار از هک در امان است و از امنیت خوبی برخوردار باشد، همچنین به راحتی قابل نگهداری باشد و قابلیت گسترش و توسعه نرم افزار یا افزودن قابلیت های بیشتری را داشته باشد که برنامه به راحتی انجام دهد و از پس آن بر بیاید.

با توجه به موارد فوق، می توان نتیجه گرفت که معیارهایی که بر اساس آنها می توان نرم افزار را خوب یا بهتر ارزیابی کرد عبارتند از:

قابلیت نگهداری (Maintainability)

سیستم پیاده سازی شده باید به گونه ای باشد که نگهداری و پشتیبانی از آن نیاز به دانش تخصصی نداشته باشد و برای سلامت نگه داشتن آن تدابیری دیده شده باشد.

بهره وری (Productivity)

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

قابلیت اطمینان (Reliability)

Reliability به این معنی است که نرم افزار عاری از خطا است و در شرایط خاص دچار مشکل نشود.

قابلیت استفاده (Usability)

به این معنی است که چگونه سیستم به راحتی می تواند مورد استفاده قرار گیرد.

تکامل نرم افزاری (Software Evolution)

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

تکامل با فرایند جمع آوری نیازهای مشتری آغاز می شود. سپس توسعه دهندگان نمونه اولیه پروژه مورد نیاز را ایجاد کرده و آن را به کاربران نشان می دهند تا بازخورد اولیه خود را در مورد پروژه دریافت کنند. کاربران تغییراتی را پیشنهاد می دهند که طی چندین به روزرسانی متوالی و نگهداری مداوم انجام می شود. تا برنامه مورد نیاز تکمیل شود.

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

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

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

بعنوان نمونه مدل ترتیبی خطی (linear sequential model) در 1970 برای ایجاد ساده تر شدن فرآیند توسعه نرم افزار توسعه یافت. این مدل یکی از قدیمی ترین و پرکاربردترین مدل ها در مهندسی نرم افزار محسوب می شود. این مدل از مهندسی، نیاز به یک رویکرد متوالی یا ترتیبی برای توسعه نرم افزار دارد که با تجزیه و تحلیل نیازها از طریق برنامه ریزی، طراحی، کدگذاری، آزمایش و تحویل آغاز می شود.

در زیر هر مرحله از این مدل توضیح داده شده است:

تجزیه و تحلیل الزامات

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

طراحی

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

کد نویسی

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

آزمایش

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

راه اندازی

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

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

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

  • مدل ترتیبی خطی (linear sequential model)
  • مدل توسعه آبشاری (Waterfall Development Model)
  • مدل ساخت نمونه اولیه (Prototyping)
  • مدل توليد سريع ( RAD)
  • مدل توسعه تدریجی (Incremental Development Model)
  • مدل تکرار پذیر (Iterative Development Model)
  • مدل توسعه چابک (Agile Development Model)
  • مدل توسعه همروند (Concurrent Development Model)
  • مدل توسعه حلزونی (Spiral Development Model)
  • مدل توسعه شی گرا (Object Oriented Development Model)
  • توسعه مبتنی بر مولفه ها (Component-Based Development)
  • توسعه نرم افزار به روش جنبه گرا (Aspect Oriented)
  • مدل روش های رسمی (Formal Methods Model)

اشتراک گذاری در شبکه های اجتماعی

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *