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

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

امتیاز 5 از 5

تولید نرم افزار بر پایه استانداردهای مهندسی نرم افزار بسیار امر مهمی است.

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

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

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

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

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

نمونه‌هایی از این دست نرم‌افزارها عبارت‌اند از: سامانه‌های توکار، نرم‌افزار اداری، بازی‌های رایانه‌ای و اینترنت.

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

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

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

تعاریف رسمی مهندسی نرم‌افزار عبارتند از:

«تحقیقات، طراحی، توسعه و تست سیستم‌های عامل در سطح نرم‌افزار، کامپایلر، نرم‌افزار شبکه توزیع برای پزشکی، صنعتی، نظامی، ارتباطات، هوا فضا، کسب و کار، علمی و به‌طور کلی برنامه‌های کاربردی محاسباتی.»

«برنامه سیستماتیک علمی و دانش فناوری و روش‌ها و تجربه‌هایی برای طراحی، پیاده‌سازی و تست و مستندسازی نرم‌افزار»

«برنامه‌ای سیستماتیک و منظم با قابلیت سنجش توسعه و عملکرد و نگهداری از نرم‌افزار»

پیشینه مهندسی نرم افزار

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

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

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

مهندسی نرم‌افزار عبارت است از:

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

محدوده مهندسی نرم افزار و تمرکز آن

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

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

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

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

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

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

کسانی که کار عملی می‌کنند از روش‌های عملی بسیار متنوعی استفاده می‌کنند تا تلاش‌هایشان را اجرا و هماهنگ کنند:

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

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

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

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

تست نرم افزار

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

چرخه تولید نرم افزار

فرایند تولید نرم‌افزار که به چرخهٔ حیات تولید نرم‌افزار معروف است یکی از موضوعات مهم در تولید یک سیستم است که اکثرا در ایران مورد توجه قرار نمی‌گیرد این فرایند باعث می‌شود محصول نهایی ما نه تنها از لحاظ فنی بلکه از لحاظ علمی و مهندسی نیز صحیح طراحی شود.

فرایند توسعه نرم‌افزار به یک سری از فعالیت‌های مهندسی نرم‌افزار اطلاق می‌شود که با هدف مدیریت چرخه حیات (life) یک سیستم نرم‌افزاری برنامه ریزی و طراحی می‌شود.

در کل می‌توان گفت مراحلی را که در طی توسعه و تولید نرم‌افزار سپری می‌شوند را چرخه حیات تولید وتوسعه نرم افزار (SDLC) می‌گویند.

چرخه حیات سیستم به دو نوع تقسیم می‌شود:

1. TLC یا چرخه حیات سیستم‌های قدیمی

2. OODLC یا چرخه حیات سیستم‌های شی گرا :(TLC) Traditional Life Cycle در گذشته از روش TLC استفاده می‌شد به دلیل اینکه اکثر برنامه‌ها بر اساس روش فرایندگرا ساخته می‌شدند. در این روش تمرکز بر روی فعالیت‌های سیستم است. البته گفتی است که اکنون هم بسیاری از شرکت‌ها از این روش استفاده می‌کنند که این موضوع دلایل مختلفی دارد که در بیشتر مواقع به دلیل کمبود دانش کارفرما و یا برنامه‌نویس است.

OODLC) Object-Oriented Development Life Cycle):

چرخه حیات سیستم‌های شی‌گرا در مهندسی نرم‌افزار است. که بعد از به وجود آمدن سیستم برنامه‌نویسی شی‌گرا شکل گرفت.

روش شناسی (Methodology):

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

Waterfall | آبشاری:

مدل آبشاری یک مدل ترتیبی توسعه نرم‌افزار است و درآن مراحل تولید به شکل یک جریان مداوم متمایل به سمت پايین است. شامل فازهای تحلیل خواسته‌ها، طراحی، پیاده‌سازی (Implementation)، آزمایش (Test) کردن، یکپارچه سازی (Integration)، و ارائه محصول به بازار است.

Agile | چابک:

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

V-Shaped | وی شکل:

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

اهداف زیر در هنگام اجرای پروژه توسط این مدل مد نظر است.

۱- حداقل میزان ریسک.

۲- تضمین بهبود کیفیت.

۳- کاهش هزینه در کل چرخه حیات.

۴- بهبود بخشیدن ارتباط بین همه اعضای پروژه

چند دلیل از دلایل شکست پروژه‌های نرم افزاری:

۱- زمان بندی غیر اصولی و غیر واقعی

۲- مشخص نشدن نیازهای پروژه در ابتدا

۳- مشتری درگیر پروژه نمی‌شود

۴- تست ناصحیح پروژه

۵- عدم مدیریت پروژه در اوایل انتشار

حال چگونه SDLC این مشکلات را بر طرف می‌کند:

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

برنامه ریزی:

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

تجزیه و تحلیل:

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

طراحی:

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

اجرا:

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