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