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

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

مهندسی نرم‌افزار (Software Engineering)، شاخه‌ای است از مهندسی، که با بهره‌گیری از دانشِ علمی، به ارائه‌ی راه‌حل‌هایی مقرون به‌صرفه، در قالبِ دستاوردهای نرم‌افزاری و به منظور حل مسائل و مشکلاتِ عملی و خدمت به جامعه‌ی بشری، اقدام می‌نماید.
مهندسی نرم‌افزار یک حرفه است نه یک شغل. حرفه گسترده‌تر از شغل است و در آن فرد به یادگیری و گسترش دانسته‌های خود می‌پردازد. شغل از پیش‌تعریف‌شده و محدود است؛ بستن پیچ‌های یک دستگاه و نوشتن یک تکه از برنامه برای اتصال به بانک اطلاعاتی. حرفه بر گرداگردِ فرد به‌وجود می‌آید. در حالی که، شغل متعلق به کارفرماست.
یک فردِ حرفه‌ای، کسی است که به جای انجام وظیفه‌های جداگانه، مسئول نتیجه‌گیری از کلِ کار است. بیمار برای معاینه‌ی گلو، گرفتن فشار خون، و یا بازدید قلب به نزد پزشک نمی‌رود. هدف از مراجعه به پزشک، خوب شدن و به دست آوردن سلامتیِ دوباره است. توجه پزشک به نتیجه ‌نهایی و نه فعالیت‌هایی است که در راه رسیدن به آن انجام می‌دهد. در میدان کارهای حرفه‌ای، بالاترین احترام از آنِ کسی است که دانش و توانمندی بیشتری دارد؛ بهترین وکیل دادگستری، بهترین مهندس معمار، بهترین پزشک، و بهترین مهندس نرم‌افزار.
از دید کلّی، سه واژه ویژگی‌های کار حرفه‌ای را روشن و آشکار می‌کنند: مشتری، فرایند، و نتیجه. مهندسی نرم‌افزار نیز یک کارِ حرفه‌ای به شمار می‌آید. بنابراین، مهندسِ نرم‌افزار فردی است حرفه‌ای، که خود را در برابرِ مشتری مسئول می‌داند و همواره در پی دستیابی به ارزش (value) موردِ نیاز اوست. رسالت و مأموریت یک مهندسِ نرم‌افزار، حل مشکل مشتری است. بنابراین، بایستی سراسرِ فرایندِ کار را اجرا نماید و به نتیجه‌ی دلخواه مشتری دست یابد.

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

فعالیت‌های مهندسی، عمدتاً دو گونه‌اند:

۱- طراحی روتین که شامل ارائه‌ی راه‌حل برای مسائلی آشنا و استفاده‌ی مجدد از راه‌حل‌های قبلی می‌باشد و

۲- طراحی نوآورانه که عبارت است از ارائه‌ی راه‌حل‌هایی نو و بدیع برای مسائلی نا آشنا.

مهندسی نرم‌افزار، اغلب با فعالیت‌های دسته‌ی دوم، یعنی طراحی نوآورانه سر و کار دارد.

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

تفاوت‌های مهندسی نرم‌افزار با سایر حوزه‌های مهندسی

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

  • مهندسی نرم‌افزار هنوز در حال بکارگیری (و آموزش) به روشی غیرِ اصولی می‌باشد.
  • نسبت به سایر تخصص‌های مهندسی، از سازماندهی کمتری برخوردار می‌باشد.
  • نسبت به برخی از رشته‌های مهندسی، استانداردهای کمتری برای طراحی نرم‌افزار وجود دارد.
  • بسیار جوان‌تر از دیگر رشته‌های مهندسی است.
  • در بسیاری از رشته‌ها و تخصص‌های مهندسی، در مقطعی از زمان، طراحی کامل شده و اصطلاحاً بسته می‌شود؛ بعد از آن، پیمانکار کمتر در طراحی مذکور، دخل و تصرف خواهد داشت. در صورتی‌که در مهندسی نرم‌افزار، بستن طراحی و کامل شدن آن، تا انتهای پروژه‌ به طول می‌انجامد.
  • در مهندسی و تولید نرم‌افزار، فرآیندهای استاندارد، کمتر استفاده می‌شود.
  • معمولاً، دستاوردهایی مانند ساختمان‌ها و پل‌ها با هزینه‌ی پیش‌بینی‌ شده و سر موعدِ مقرر ساخته‌ می‌شوند؛ در حالی‌که نرم‌افزار به ندرت، سر موقع و با هزینه‌ی از قبل پیش‌بینی شده ایجاد می‌گردد.
  • فراورده و دستاورد اصلی مهندسی نرم‌افزار (یعنی فراورده‌ی نرم‌افزاری)، دارای ماهیتی غیرقابل لمس می‌باشد.
  • اثرات ناشی از شکست یک پروژه‌ی نرم‌افزاری برای همگان قابل لمس نیست. در مقابل اثرات ناشی از فرو ریختن یک پل یا خرابی یک اتوموبیل را همه می‌توانند درک نمایند.
  • ایجاد نرم‌افزارعمدتاْ فعالیتی دانش‌محور است.

چالش‌های فرا روی صنعت نرم‌افزار

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

یک پروژه‌ی موفق نرم‌افزاری، پروژه‌ای است که در یک محدوده‌ی زمانی از قبل برنامه‌ریزی شده و با بودجه‌ا‌ی از قبل ‌پیش‌بینی‌شده‌، یک فراورده‌ی نرم‌افزاریِ دارای کیفیتِ مطلوب (یعنی کیفیتی مطابق با خواسته‌ها و نیازهای واقعی کاربران) در آن تولید می‌شود.
البته برای تکمیل تعریف ارائه‌شده از یک پروژه‌ی موفق، لازم است برای دو مفهوم اساسی در این تعریف، یعنی فراورده‌ی نرم‌افزاری و نیز مفهومِ کیفیت، تعاریفی ارائه نماییم.
به زبان ساده، یک فراورده‌ی نرم‌افزاری عبارتست از یک برنامه‌ی نرم‌افزاری قابل اجرا به علاوه‌ی مجموعه‌ی مستندات و دستْ‌نامه‌های کاربران آن (البته گاهاً مجموعه‌ی کد‌های برنامه نیز در قالب فراورده‌ی نهایی ارائه می‌شود). توجه داشته باشید که یک فراورده‌ی نرم‌افزاری باید به اصطلاح، قابلیتِ خودپشتیبانی داشته باشد؛ بر اساس این قابلیت، همه‌ی کاربران یک سیستمِ نرم‌افزاری، اَعم از کاربران ساده، مدیران سیستم، و یا مسئولین نگهداری و به‌روز رسانی آن، باید قادر باشند بدون نیاز به حضورِ تولیدکنندگان و پدیدآورندگان آن، تمام انتظاراتشان را از سیستم برآورده نمایند.
کیفیت (Quality)، مفهوم بسیار پیچیده‌ای است. مسلم است که همه کیفیت را می‌پسندند. اما شاید کمتر کسی بتواند تعریف کاملی از آن ارائه نماید. دو تعریف کلّیِ مفهوم کیفیت، عبارتند از: تطابق با نیازمندی‌ها و متناسب‌بودن برای استفاده. این دو تعریف که تا حد زیادی به هم مرتبط می‌باشند، تفاوت کوچکی نیز دارند؛ متناسب بودن برای استفاده، تأکید بیشتری بر نقشِ نیازمندی‌ها و انتظاراتِ مشتری و کاربر دارد.
شاید از خود بپرسید که حد و اندازه‌های کیفیت چه میزان است و یا چگونه می‌توان کیفیت را سنجید؟ دیدگاه موردِ پذیرشِ امروزی از این مفهوم، کیفیتِ مطلوب و کافی (Good-Enough Quality) است و نه بهترین کیفیت. داشتن معیارهایی برای سنجش کیفیت، شرط اطمینان از موفقیت یک پروژه می‌باشد.

تماس با ما

در حال ارسال

Log in with your credentials

Forgot your details?