مهندسی نرم افزار یک رویکرد سیستماتیک برای طراحی ، توسعه ، بهره برداری و نگهداری از سیستم نرم افزاری است.
مهندسی نرمافزار به مفهوم توسعه و بازبینی یک سامانه نرمافزاری مربوط میباشد. این رشته علمی با شناسایی، تعریف، فهمیدن و بازبینی خصوصیات مورد نیاز نرمافزار حاصل سر و کار دارد. این خصوصیات نرمافزاری ممکن است شامل پاسخگویی به نیازها، اطمینانپذیری، قابلیت نگهداری، در دسترس بودن، آزمونپذیری، استفاده آسان، قابلیت حمل و سایر خصوصیات باشد.
مهندسی نرمافزار ضمن اشاره به خصوصیات فوق، مشخصات معین طراحی و فنی را آماده میکند که اگر بهدرستی پیادهسازی شود، نرمافزاری را تولید خواهد کرد که میتواند بررسی شود که آیا این نیازمندیها را تأمین میکند یا خیر.
نرمافزار عموماً از محصولات و موقعیتهایی شناخته میشود که قابلیت اطمینان زیادی از آن انتظار میرود، حتی در شرایط طاقت فرسا، مانند نظارت و کنترل نیروگاههای انرژی هستهای، یا هدایت یک هواپیمای مسافربری در هوا، چنین برنامههایی شامل هزاران خط کد هستند، که از نظر پیچیدگی با پیچیدهترین ماشینهای نوین قابل مقایسه هستند. بهعنوان مثال، یک هواپیمای مسافربری چند میلیون قطعه فیزیکی دارد (و یک شاتل فضایی حدود ده میلیون بخش دارد)، در حالی که نرمافزارِ هدایت چنین هواپیمایی میتواند تا ۴ میلیون خط کد داشته باشد.
اهداف مهندسی نرم افزار
قابلیت نگهداری (Maintainability ) محصول نرم افزاری
۲ صحت و درستی (Correctness ) وظایف محصول
.۳ قابلیت استفاده مجدد (Reusability )
.۴ قابلیت تست (Testability )
.۵ قابلیت اطمینان (Reliability )
.۶ قابلیت حمل (Portability )
.۷ وفق پذیری (Adaptability )
طبقه بندی نرم افزارها
نرم افزارها را می توان با توجه به نیاز و عملکر آنها به چند بخش تقسیم کرد.
- نرم افزار های سیستمی (System Software)
- نرم افزارهای شبکه ای و تحت وب (Networking and Web Applications Software)
- نرم افزارهای embedded
مثل نرم افزارهایی که برای یک قطعه ی خاص که درون یک سیستم جاسازی می شوند.
- نرم افزار رزرواسیون (Reservation Software)
- نرم افزار های تجاری و مالی (Business Software)
- نرم افزارهای سرگرمی (Entertainment Software)
مانند بازی های کامپیوتری
- نرم افزار های هوش مصنوعی (Artificial Intelligence Software)
- نرم افزار های علمی (Scientific Software)
- نرم افزار های مدیریت اسناد و مدارک (Document Management Software)
چرخه حیات نرم افزار
چرخه حیات نرم افزار از فاز تعریف پروژه آغاز شده و پس از پیاده سازی نرم افزار در فاز توسعه، وارد فاز نگهداری می شود.
عدم توجه کامل به هر یک از این بخش ها، سبب بروز مشکل در چرخه حیات نرم افزار می شود. عدم شناخت و تعریف درست نرم افزار در فاز اول، سبب تولید نرم افزارهایی با قابلیت محدود و ناهمگون با نیاز کاربران خواهد شد. نداشتن برنامه و متدولوژی کارآمد در فاز توسعه و همچنین تهیه نکردن مستندات کافی از نرم افزار، سبب تولید نرم افزارهای بدون پشتیبانی مستمر شده و به تبع آن، عدم امکان رفع اشکالات برنامه ای موجود و ناتوانی در افزایش قابلیت های جدید به آنها، از مهمترین مشخصات این نرم افزارها است.
یک روش نظام مند برای تعین وظایف و مسئولیت های اعضای تیم توسعه نرم افزار بوده و هدف آن تولید نرم افزاری با کیفیت در کمترین زمان ممکن و در محدوده بودجه مد نظر است.
سه مبحث کیفیت، بودجه و زمان مسائل اصلی در مهندسی نرم افزار هستند.