وبلاگ

گاه نوشته های امین رشیدی

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

مهندسي نرم افزار، هزار راه نرفته

27th می ، 2009

به عقيده من مشكلات مهندسي شدن نرم افزار را در دو حوزه مي‌توان دسته بندي نمود:

  1. درك مفهوم و لزوم “مهندسي نرم افزار”
  2. ضعف آموزش در مراكز دانشگاهي و علمي

باز هم يادآور مي‌شوم اين موضوع با مشكلات پروژه‌هاي نرم افزاري متفاوت است، كه آن هم در جاي خود بررسي خواهد شد.

درك مفهوم و لزوم “مهندسي نرم افزار”

با توجه به اينكه بيشتر افرادي كه در حوزه توليد نرم افزار فعاليت مي‌كنند، مدركي غير از “مهندسي نرم افزار” (Software Engineering) دارند، نبايد از وجود اختلاف نظر در زمينه مفهوم مهندسي نرم افزار تعجب كرد.[McC03]

نويسنده‌اي مي‌گويد:

ديدگاه ماشيني [رويكرد قائده‌مند، منظم و قابل سنجش] اين واقعيت را كه توسعه دهندگان ماهرتر خطاي كمتري مرتكب مي‌شوند و بهتر عيب يابي مي‌كنند را در نظر نمي‌گيرد. مهندسي نرم افزار باعث مي‌شود فراموش كنيم كه چيزي كه در پروژه اهميت دارد مهارت، دانش و تجربة توسعه دهندگان نرم افزار است. [McB01]

ديدگاهاي مشابه‌اي وجود دارند كه معتفد هستند كه تعريف IEEE از مهندسي نرم افزار براي پروژه‌هاي بزرگ مناسب است. عده‌اي هم در مقابل به شيوه‌هاي رسمي (Formal) اعتقاد دارند.

به نظر مي‌آيد با تعديل تعريف “مهندسي نرم افزار” و در نظر گرفتن اندازه و شرايط پروژه بتوان به نقطه مشتركي رسيد.

بدون شك تعريف مهندسي نرم افزار هرچه باشد، نهادينه كردن استفاده از روشهاي تست شده و استفاده از تجربه چند ميليون نفر ساعته ديگر فعالان عرصه مهندسي نرم افزار كار عاقلانه‌اي است. عدم رعايت اين مسئله مشكلي است كه به وضوح در بين توسعه دهندگان نرم افزار مخصوصاً در ايران ديده مي‌شود و ريشه در درك مفهموم و كاربرد مهندسي دارد.

آموزش آكادميك مي‌تواند نقش اساسي در اصلاح ديدگاه توليد كنندگان نرم افزار در مورد مهندسي نرم افزار داشته باشد.

ضعف آموزش در مراكز دانشگاهي و علمي

تصور كنيد كه دبيرستاني هستيد و تمايل داريد در آينده “مهندس نرم افزار” شويد. خوب بايد درس بخوانيد و در دانشگاه رشتة “مهندسي كامپيوتر” گرايش نرم افزار قبول شويد و بعد از چهار سال شما مهندس نرم افزار…

آرزو داشتم كه بگويم “مي‌شويد” ولي متأسفانه واقعيت چيز ديگريست. با كمال تأسف به رشتة مهندسي نرم افزار آنگونه كه بايد در دانشگاه‌ها (منظورم بيشتر كشور خودمان ايران است) پرداخته نشده است.

همانگونه كه مشاهده خواهيد كرد، دانشجو در رشتة مهندسي نرم افزار بيشتر با “علوم كامپيوتر” (Computer Science) آشنا مي‌شود تا مهندسي نرم افزار. آيا مي‌شود از اين فرد انتظار داشت با تمام شاخه‌هاي مهندسي نرم افزار آشنايي داشته باشد و آنها را بكار برد؟ اجازه دهيد كمي دقيقتر مشكلات اين رشته را در ايران مطرح كنم.

  • دروس ارائه شده ديدگاه مهندسي ندارد و بيشتر به دنبال علم توليد نرم افزار است.
  • واحدهاي درسي مهندسي نرم ۱ و ۲ در بهترين حالت مي‌تواند نمايي از مهندسي نرم افزار را ارائه دهد. بقيه درسهاي مرتبط فقط به بخش ساخت (Construction) ارتباط دارند.
  • منابع درسي مهندسي نرم افزار بسيار محدود است و بيشتر كتابهاي مهندسي نرم افزار Pressman و Sommerville استفاده مي‌شوند كه كلي و غير كاربردي هستند.
  • در كلاسهايي كه سعي به ارائه مطالب بروز مي‌كنند بيشتر به مباحث “مد” پرداخته مي‌شود. مانند UML و شئي گرايي يا روش شناسيهاي (Methodology) معروف، كه تنها بخش كوچكي از دانش مهندسي نرم افزار است.
  • كارگاه مشخص و هدفمندي براي مهندسي نرم افزار تعريف نشده است.
  • با احترام به تمام اساتيد محترم، متأسفانه كمتر استاد مسلط به اين حوزه وجود دارد.

بي شك اين نقصان با عنايت بانيان امور بايد مرتفع گردد. در آينده با ارائه سرفصلهاي مهندسي نرم افزار بيشتر در اين مورد صحبت خواهم كرد.

نتيجه؟

فقط بايد صبر كرد تا صنعت نرم افزار مانند ديگر صنايع به بلوغ برسد. از سال ۱۹۶۸ تا كنون پيشرفتهاي زيادي حاصل شده است ولي هنوز راه بس درازي پيش روست.