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

از ویکی‌پدیا، دانشنامهٔ آزاد
(تغییرمسیر از مهندسی نرم افزار)
پرش به: ناوبری، جستجو
یک مهندس نرم‌افزار درحال برنامه‌نویسی برای بنیاد ویکی‌مدیا

مهندسی نرم افزار (به انگلیسی: Software engineering) یعنی استفاده از اصول مهندسی بجا و مناسب برای تولید و ارائه محصول نرم افزاری با کیفیت که قابل اطمینان و با صرفه بوده و برروی ماشین های واقعی به طور کارآمدی عمل کند.

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

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

کاربردهای مهندسی نرم‌افزار دارای ارزش‌های اجتماعی و اقتصادی هستند، زیرا بهره‌وری مردم را بالا برده، چند و چون زندگی آنان را بهتر می‌کنند. مردم با بهره‌گیری از نرم‌افزار، توانایی انجام کارهایی را دارند که قبل از آن برای‌شان شدنی نبود. نمونه‌هایی از این دست نرم‌افزارها عبارت‌اند از: سامانه‌های توکار، نرم‌افزار اداری، بازی‌های رایانه‌ای و اینترنت.

فناوری‌ها و خدمات مهندسی نرم‌افزار به کاربران برای بهبود بهره‌وری و کیفیت یاری میرساند. نمونه‌هایی از زمینه‌های بهبود: پایگاه داده‌ها، زبان‌ها، کتابخانه‌ها، الگوها، فرآیندها و ابزار.

مهم ترین شاخص مهندسی نرم‌افزار[ویرایش]

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


پیشینه مهندسی نرم‌افزار[ویرایش]

اصطلاح مهندسی نرم‌افزار پس از سال ۱۹۶۸ میلادی شناخته شد. این اصطلاح طی نشست «مهندسی نرم‌افزار ناتو ۱۹۶۸» (که در گارمیش-پارتنکیرشن، آلمان برگزار شد) توسط ریاست نشست فریدریش ال باوئر معرفی شد و از آن پس به‌طور گسترده مورد استفاده قرار گرفت.

اصطلاح مهندسی‌نرم‌افزار عموماً به معانی مختلفی به‌کار می‌رود:

  • به‌عنوان یک اصطلاح غیر رسمی امروزی برای محدوده وسیع فعالیت‌هایی که پیش از این برنامه‌نویسی و تحلیل سامانه‌ها نامیده می‌شد.
  • به‌عنوان یک اصطلاح جامع برای تمامی جنبه‌های عملی برنامه‌نویسی رایانه، در مقابل تئوری برنامه‌نویسی رایانه، که علوم رایانه نامیده می‌شود.
  • به‌عنوان اصطلاح مجسم‌کننده طرفداری از یک رویکرد خاص نسبت به برنامه‌نویسی رایانه که اصرار می‌کند، مهندسی نرم‌افزار، به‌جای آنکه هنر یا مهارت باشد، باید به‌عنوان یک رشته عملی مهندسی تلقی شود و از جمع‌کردن و تدوین روش‌های عملی توصیه‌شده به شکل متدولوژی‌های مهندسی نرم‌افزار طرفداری می‌کند.
  • مهندسی نرم‌افزار عبارتست از:
  1. کاربرد یک رویکرد سامانه‌شناسی، انتظام‌یافته، قابل سنجش نسبت به توسعه، عملکرد و نگهداری نرم‌افزار، که کاربرد مهندسی در نرم‌افزار است.
  2. مطالعه روش‌های موجود در استاندارد IEEE

محدوده مهندسی نرم‌افزار و تمرکز آن[ویرایش]

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

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

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

نیاز به مهندسی نرم‌افزار[ویرایش]

نرم‌افزار عموماً از محصولات و موقعیت‌هایی شناخته می‌شود که قابلیت اطمینان زیادی از آن انتظار می‌رود، حتی در شرایط طاقت فرسا، مانند نظارت و کنترل نیروگاه‌های انرژی هسته‌ای، یا هدایت یک هواپیمای مسافربری در هوا، چنین برنامه‌هایی شامل هزاران خط کد هستند، که از نظر پیچیدگی با پیچیده‌ترین ماشین‌های نوین قابل مقایسه هستند. به‌عنوان مثال، یک هواپیمای مسافربری چند میلیون قطعه فیزیکی دارد (و یک شاتل فضایی حدود ده میلیون بخش دارد)، در حالی که نرم‌افزارِ هدایت چنین هواپیمایی می‌تواند تا ۴ میلیون خط کد داشته باشد.

با توجه به گسترش روزافزون دنیای رایانه امروزه بیش از هر زمان دیگری نیاز به متخصصان رایانه احساس می شود. متاسفانه این رشته در ایران بازار کار خوبی ندارد طبق آمارها ۶۳٫۲۷ درصد از فارغ‌التحصیلان در سال ۹۰ مشغول به کار در سایر مشاغل هستند. اما برای مهندسان سخت افزار هم امكان كار در شركت‌های تولیدكننده قطعات و دستگاه‌ها و مراكز صنعتی – تولیدی بسیار فراهم است و از نظر سطح درآمدی هم با توجه به دانش و پشتكار شخصی در حد متوسط قرار دارند. به طور کلی این رشته در ایران با استقبال چندانی رو به رو نیست؛ این نیز حاکی از نبود برخی از زیرساخت‌ها در ایران هست.

تکنولوژی‌ها و روش‌های عملی[ویرایش]

مهندسان نرم‌افزار طرفدار تکنولوژی‌ها و روشهای عملی بسیار متفاوت و مختلفی هستند، که با هم ناسازگار هستند. این بحث در سال‌های دهه ۶۰ میلادی شروع شد و ممکن است برای همیشه ادامه پیدا کند. مهندسان نرم‌افزار از تکنولوژی‌ها و روش‌های عملی بسیار متنوعی استفاده می‌کنند. کسانی که کار عملی می‌کنند از تکنولوژی‌های متنوعی استفاده می‌کنند: کامپایلرها، منابع کد، پردازشگرهای متن. کسانی که کار عملی می‌کنند از روش‌های عملی بسیار متنوعی استفاده می‌کنند تا تلاش‌هایشان را اجرا و هماهنگ کنند: برنامه‌نویسی در دسته‌های دونفری، بازبینی کد، و جلسات روزانه. هدف هر مهندس نرم‌افزار بایستی رسیدن به ایده‌های جدید خارج از الگوهای طراحی شده قبلی باشد، که باید شفاف بوده و به‌خوبی مستند شده باشد.

با وجود رشد فزاینده اقتصادی و قابلیت تولید فزاینده‌ای که توسط نرم‌افزار ایجاد شده، هنوز هم بحث و جدل‌های ماندگار درباره کیفیت نرم‌افزار ادامه دارند.

ماهیت مهندسی نرم‌افزار[ویرایش]

دیوید پارناس گفته‌است که مهندسی نرم‌افزار یک شکل از مهندسی است. استیو مک‌کانل گفته‌است که هنوز اینطور نیست، ولی مهندسی نرم‌افزار باید یک شکل از مهندسی شود. دونالد کنوت گفته‌است که برنامه‌نویسی یک هنر است.

دیوان فعالیت‌های آماری آمریکا مهندسان نرم‌افزار را به عنوان زیرگروهی از «متخصصان رایانه»، با فرصت‌های شغلی‌ای مانند «دانشمند رایانه»، «برنامه نویس» و «مدیر شبکه» دسته بندی کرده‌است. BLS تمام مهندسان دیگر این شاخه علمی، که شامل مهندسان سخت‌افزار رایانه نیز هست، را به‌عنوان «مهندسان» دسته بندی می‌کند.

جستارهای وابسته[ویرایش]

پانویس[ویرایش]

پیوند به بیرون[ویرایش]

جستجو در ویکی‌انبار در ویکی‌انبار پرونده‌هایی دربارهٔ مهندسی نرم‌افزار موجود است.