مهندسی نرمافزار یعنی استفاده از اصول مهندسی بجا و مناسب برای تولید و ارائه محصول نرمافزاری با کیفیت که قابل اطمینان و با صرفه بوده و برروی ماشینهای واقعی به طور کارآمدی عمل کند.
مهندسی نرمافزار یک روش سیستماتیک، منظم و دقیق برای ساخت و ارائه محصولی نرمافزاری با کیفیت است.
مهندسی نرمافزار اغلب شامل فرایند خطی تحلیل، طراحی، پیادهسازی و آزمون است؛ که با به کارگیری روشهای فنی و علمی از علوم مهندسی موجب تولید نرمافزاری با کیفیت مطلوب در طول یک فرایند انتخابی مناسب پروژه میشود.
کاربردهای مهندسی نرمافزار دارای ارزشهای اجتماعی و اقتصادی هستند، زیرا بهرهوری مردم را بالا برده، چند و چون زندگی آنان را بهتر میکنند. مردم با بهرهگیری از نرمافزار، توانایی انجام کارهایی را دارند که قبل از آن برایشان شدنی نبود. نمونههایی از این دست نرمافزارها عبارتاند از: سامانههای توکار، نرمافزار اداری، بازیهای رایانهای و اینترنت.
فناوریها و خدمات مهندسی نرمافزار به کاربران برای بهبود بهرهوری و کیفیت یاری میرساند. نمونههایی از زمینههای بهبود: پایگاه دادهها، زبانها، کتابخانهها، الگوها، فرایندها و ابزار.
مهندسی نرمافزار عبارت است از کاربرد مهندسی برای طراحی، توسعه، پیادهسازی و نگهداری از نرمافزار در یک روش سیستماتیک.
تعاریف رسمی مهندسی نرمافزار عبارتند از:
- «تحقیقات، طراحی، توسعه و تست سیستمهای عامل در سطح نرمافزار، کامپایلر، نرمافزار شبکه توزیع برای پزشکی، صنعتی، نظامی، ارتباطات، هوا فضا، کسب و کار، علمی و به طور کلی برنامههای کاربردی محاسباتی.»
- «برنامه سیستماتیک علمی و دانش فن آوری و روشها و تجربههایی برای طراحی، پیادهسازی و تست و مستندسازی نرمافزار»
- «برنامهای سیستماتیک و منظم با قابلیت سنجش توسعه و عملکرد و نگهداری از نرمافزار»
- "یک از رشتههای مهندسی است که در رابطه با تمام جنبههای تولید نرم افزار است "
- و «ایجاد و استفاده از اصول درست مهندسی برای بدست آوردن نرمافزاری که از لحاظ اقتصادی، قابل اعتماد و صرفه است ودر ماشینهای واقعی بصورت کارایی عمل میکند.»
- مهندسی نرمافزار (به انگلیسی: Software engineering) یعنی استفاده از اصول مهندسی بجا و مناسب برای تولید و ارائه محصول نرمافزاری با کیفیت که قابل اطمینان و با صرفه بوده و برروی ماشینهای واقعی به طور کارآمدی عمل کند. مهندسی نرمافزار یک روش سیستماتیک، منظم و دقیق برای ساخت و ارائه محصولی نرمافزاری با کیفیت است. مهندسی نرمافزار اغلب شامل فرایند خطی تحلیل، طراحی، پیادهسازی و آزمون است؛ که با به کارگیری روشهای فنی و علمی از علوم مهندسی موجب تولید نرمافزاری با کیفیت مطلوب در طول یک فرایند انتخابی مناسب پروژه میشود. کاربردهای مهندسی نرمافزار دارای ارزشهای اجتماعی و اقتصادی هستند، زیرا بهرهوری مردم را بالا برده، چند و چون زندگی آنان را بهتر میکنند. مردم با بهرهگیری از نرمافزار، توانایی انجام کارهایی را دارند که قبل از آن برایشان شدنی نبود. نمونههایی از این دست نرمافزارها عبارتاند از: سامانههای توکار، نرمافزار اداری، بازیهای رایانهای و اینترنت. فناوریها و خدمات مهندسی نرمافزار به کاربران برای بهبود بهرهوری و کیفیت یاری میرساند. نمونههایی از زمینههای بهبود: پایگاه دادهها، زبانها، کتابخانهها، الگوها، فرایندها و ابزار.
نیاز به مهندسی نرمافزار
نرمافزار عموماً از محصولات و موقعیتهایی شناخته میشود که قابلیت اطمینان زیادی از آن انتظار میرود، حتی در شرایط طاقت فرسا، مانند نظارت و کنترل نیروگاههای انرژی هستهای، یا هدایت یک هواپیمای مسافربری در هوا، چنین برنامههایی شامل هزاران خط کد هستند، که از نظر پیچیدگی با پیچیدهترین ماشینهای نوین قابل مقایسه هستند. بهعنوان مثال، یک هواپیمای مسافربری چند میلیون قطعه فیزیکی دارد (و یک شاتل فضایی حدود ده میلیون بخش دارد)، در حالی که نرمافزارِ هدایت چنین هواپیمایی میتواند تا ۴ میلیون خط کد داشته باشد.
با توجه به گسترش روزافزون دنیای رایانه امروزه بیش از هر زمان دیگری نیاز به متخصصان رایانه احساس میشود. متأسفانه این رشته در ایران بازار کار خوبی ندارد طبق آمارها ۶۳٫۲۷ درصد از فارغالتحصیلان در سال ۹۰ مشغول به کار در سایر مشاغل هستند. اما برای مهندسان سختافزار هم امکان کار در شرکتهای تولیدکننده قطعات و دستگاهها و مراکز صنعتی – تولیدی بسیار فراهم است و از نظر سطح درآمدی هم با توجه به دانش و پشتکار شخصی در حد متوسط قرار دارند. به طور کلی این رشته در ایران با استقبال چندانی رو به رو نیست؛ این نیز حاکی از نبود برخی از زیرساختها در ایران هست.
تکنولوژیها و روشهای عملی
مهندسان نرمافزار طرفدار تکنولوژیها و روشهای عملی بسیار متفاوت و مختلفی هستند، که با هم ناسازگار هستند. این بحث در سالهای دهه ۶۰ میلادی شروع شد و ممکن است برای همیشه ادامه پیدا کند. مهندسان نرمافزار از تکنولوژیها و روشهای عملی بسیار متنوعی استفاده میکنند. کسانی که کار عملی میکنند از تکنولوژیهای متنوعی استفاده میکنند: کامپایلرها، منابع کد، پردازشگرهای متن. کسانی که کار عملی میکنند از روشهای عملی بسیار متنوعی استفاده میکنند تا تلاشهایشان را اجرا و هماهنگ کنند: برنامهنویسی در دستههای دونفری، بازبینی کد، و جلسات روزانه. هدف هر مهندس نرمافزار بایستی رسیدن به ایدههای جدید خارج از الگوهای طراحی شده قبلی باشد، که باید شفاف بوده و بهخوبی مستند شده باشد.
با وجود رشد فزاینده اقتصادی و قابلیت تولید فزایندهای که توسط نرمافزار ایجاد شده، هنوز هم بحث و جدلهای ماندگار دربارهٔ کیفیت نرمافزار ادامه دارند.
فهرست مطالب:
فصل اول: FAQ هایی راجع به مهندسی نرم افزار
نرم افزار چیست؟
مهندسی نرم افزار چیست؟
تفاوت مهندسی نرم افزار و علوم کامپیوتر
فرآیند نرم افزار
و...
فصل دوم: سیستم های اجتماعی-تکنیکی
سیستم
ویژگی های اصلی سیستم های اجتماعی-تکنیکی
ویژگی های جدید سیستم
عوامل موثر در قابلیت اعتماد سیستم
مهندسی سیستم ها
و...
فصل سوم: سیستم های حیاتی
انواع سیستم حیاتی
قابلیت اتکای سیستم
ابعاد قابلیت اتکا
قابلیت دسترسی
قابلیت اعتماد
اصطلاحات قابلیت اتکا
و...
فصل چهارم: فرآیندهای نرم افزار
فعالیت های اساسی در فرآیند نرم افزار
مدل های فرآیند نرم افزار
چرخه حیات نرم افزار
مدل آبشاری
و...
فصل پنجم: مدیریت پروژه
مسئولیت های مدیران
برنامه ریزی پروژه
نقاط عطف قطعات قابل تحویل
زمان بندی پروژه
مدیریت ریسک
و...
فصل ششم: خواسته های نرم افزار
خواسته های سیستم نرم افزاری
خواسته های عملکردی
خواسته های غیرعملکردی
خواسته های دامنه کاربرد
و...
فصل هفتم: فرآیندهای مهندسی خواسته ها
فرآیند مهندسی خواسته ها
مطالعات امکان سنجی
استخراج و تحلیل خواسته ها
دیدگاهها
مصاحبه
و...
فصل هشتم: مدل های سیستم
ابعاد مختلف سیستم
انواع مختلف مدل سیستم
مدل های رفتاری
مدل های جریان داده
مدل های ماشین حالت
مدل های داده ها
مدل های شی
و...
فصل نهم: مشخصات سیستم های حیاتی
تعیین مشخصات مبتنی بر ریسک
شناسایی ریسک
تحلیل و دسته بندی ریسک ها
تجزیه ریسک
برآورد کاهش ریسک
و...
فصل دهم: مشخصات رسمی
روش های تعیین مشخصات رسمی
مشخصات و طراحی
مشخصات رسمی در فرآیند نرم افزار
تعیین مشخصات واسط زیرسیستم
و...
فصل یازدهم: طراحی معماری
امتیازات طراحی و مستند سازی معماری نرم افزار
مدل های معماری
سازمان سیستم
مدل مخزن
و...
فصل دوازدهم: معماری های سیستم های توزیعی
ویژگی های مهم سیستم های توزیعی
معایب سیستم های توزیعی
انواع معماری سیستم های توزیعی
معماری های چندپردازنده ای
معماری های مشتری-کارگزار
و...
فصل سیزدهم: معماری کاربرد
موارد استفاده از معماری کاربرد
معماری چهار نوع کاربرد گسترده
سیستم های پردازش داده
و...
فصل چهاردهم: طراحی شی گرا
اشیا و کلاس های شی
اشیای همزمان
فرآیند طراحی شی گرا
حیطه سیستم و مدل های کاربرد
شناسایی اشیا
و...
پاورپوینت کامل و جامع با عنوان مهندسی نرم افزار 1 در 241 اسلاید