« دعوت به همکاری (مدیر فروش) | صفحه اصلی | اسلام ناظمي، مهندس استاد يا استاد مهندسي »
توليد نرم افزار، تفاوت ها با ديگر توليد هاي صنعتي
October 28, 2006 08:07 PM
نرم افزار هم مانند هر کالاي ديگري بايد ساخته شود. فرآيند توليد آن هم مانند همه فرآيند هاي توليد صنعتي، از "تفکر کارگاهي" تا "تفکر کارخانه اي" را طي کرده است.
به فرآيند صنعتي که دقت کنيد، مي بينيد که بعد از آنکه بشر به اين صرافت افتاد که خودش نمي تواند همه کار بکند و مثلا يک کلبه را به صورت کامل بسازد، ابتدا به صورت فردي و در مغازه ها و کارگاه هاي تخصصي کار شروع شد، آهنگري ها، نجاري ها یا در و پنجره سازي و .... و بعد ديد که نمي تواند با این روش برج بسازد، نمي تواند خودرو را در حجم انبوه توليد کند ، طرز فکرش را عوض کرد و کارخانه ها را ساخت تا بتوانند در يک خط توليد به صورت انبوه، کالاي استاندارد توليد کنند و مشتري ها هم عادت کردند که خود را با کالا تطبيق دهند.
همين اتفاق در نرم افزار افتاد، از جايي که به صورت اختصاصي براي هر مشتري پروژه توليد داشتيم، تا بسته هاي نرم افزاري (Package) که به صورت انبوه توليد مي شد و فروش مي رفت و تا ERP که مي گوييم استاندارد است و هر مشتري خودش را تطبيق مي دهد و يا سيستم به صورت کم، تغيير داده مي شود تا نياز مشتري را فراهم کند.اين توليد هم مانند توليد هاي ديگر نياز به تحليل، طراحي و پياده سازي دارد. مديريت پروژه مي خواهد توليدش و همان مسائل رادارد.
فرآیند مدیریت پروژه (سازماندهی، برنامه ریزی و نظارت) به عنوان یک اصل جدانشدنی از هر پروژه ای در همه صنایع (منجمله نرم افزار) هم وجود دارد.
اما نرم افزار به لحاظ عوامل ماهیتیش چنان با بقیه کالاهای صنعتی متفاوت است که می بینیم در روشهای توسعه آن تنوع زیادی وجود دارد و هر روز یک مدل جدید برای توسعه نرم افزار می بینیم. این تفاوت ها را به طور خلاصه می توانیم شامل موارد زیر بدانیم:
1- نرم افزار پیچیده است (Complexity): به تعبیری "کاهش پیچیدگی قلب توسعه نرم افزار است." یک برنامه کوچک گاهی هزاران خط فرمان می شود و توسعه آن به هر نحو مشکل است. روشهایی مانند ماژول بندی و .... آمده است، اما هنوز هم پیچیدگی یکی از مهمترین اجزاء جدانشدنی نرم افزار ها و فرآیند تولید آن است.
2- نرم افزار انتزاعی است (abstraction) : شما نمی توانید به شکل فیزیکی آن را لمس کنید و نشان دهید. نه خودتان واقعا می توانید همه آن را یکجا در دست بگیرید و مشکلتر آنکه مشتری ها عقلشان به چشمشان است! و شما عاجز از نمایش کار خود. نرم افزار انتزاعی ترین جزء تولید است.
3- نیازها کامل نیست. (Uncomplete Requirements) : اغلب موراد، پیش از ساخت واقعی نرم افزار، همه نیازهای مشتری یا استخراج نشده و یا هنوز معلوم نیست. در پایان پروژه، تازه مشتری می فهمد که واقعا چه می خواهد.
4- فنآوری به سرعت تغییر می کند (Technology Changes Rapidly): سرعت تغییرات در فنآوری های ساخت نرم افزار فوق العاده سریع است. هر روز بستر و سیستم عامل جدید، هر روز تغییر سخت افزار، تغییر زبانهای برنامه سازی و .... کدام فنآوری را می شناسید که به این سرعت تغییر کند.
5-تجربه های موفق بالغ نشده اند. (Immature Best Practices): به خاطر رشد سریع، اغلب تولید کنندگان به خوبی مهارت های تولید را کسب نکرده اند. معمولا در پروژه ها عوامل کیفی کمتر دیده می شود و بنابراین تجربه های موفق کمتر بدست می آیند.حتی در صورت وجود، به دلیل تغییرات سریع فنآوری، کمتر در پروژه های بعدی می توانند الگو باشند.
6- فناوری اطلاعات بسیار گسترده است. (Technology is a Vast Domain): در این که شک ندارید! کسی نیست در این زمینه که همه فن حریف باشد (علامه دهر در نرم افزار نداریم!) بنابراین کسی نمی تواند به تنهایی به همه قسمت های یک پروژه اشراف داشته باشد.
7-تجارب فنآوری ناقص هستند. (Incomplete Technology Experience) : فنآوری های جدید و نسخ های جدید ابزارها اغلب آنقدر با نسخه قبلیشان تفاوت دارد که به سرعت تجربه افراد در این زمینه خارج از رده می شود. تجارب اکثر در موقع کار بدست آمده و بعد از آن کمتر به درد می خورند.
8- توسعه نرم افزار اکتشافی است. (Software Development is Research) : به دلیل عدم شناسایی نیازها و عدم دانش مشتریان نرم افزار با آن، فرآیند تولید اغلب ماهیت تحقیقاتی و یا اکتشافی به خود می گیرد. ابزارها نیز جدیدند و توسعه دهنده باید آموزش استفاده از آنها را کسب کند. بنابراین فرآیند توسعه نرم افزار فقط ساخت آن نیست، یادگرفتن آن است که با چه راهی می توان به نتیجه رسید.
9- کارهای تکراری خودکار هستند. (Automated Repetetive works) : در نرم افزار و تولید آن، به حدی از خودکار سازی برای فرآیند های تکراری رسیده ایم که در تولید های دیگر هنوز بحث آن هم مطرح نشده است، حجم بالای استفاده مجدد (reuseability) از قطعات آماده، برون سپاری تولید (Outsourcing) و.... نمونه هایی از این خودکار سازی است.
10-ساختن در واقع طراحی است . (Construction is Actually Design) : همه فرآیند های صنعتی مراحل مشخصی دارند (تحلیل، طراحی و اجرا : یک مدل خطی خوش تعریف) اما نرم افزار چنین نیست، در مرحله پیاده سازی و اجرا، نیازها به مرور تشخیص داده می شوند و این باعث می شود طراحی تا پایان ادامه پیدا کند. حتی در زمان نگهداری و پشتیبانی نیز، فرآیند طراحی به شکل جدی مطرح است.
11- تغییرات راحت پنداشته می شوند. (Changes Considered easy) : تغییر نیاز در فرآیند های تولید دیگر توسط مشتری بسیار سخت دیده می شود و وی سختی تغییر طراحی را در پایان پیاده سازی می فهمد و بنابراین آن را مطرح نمی کند و یا اگر مطرح کرد هزینه آن را می پذیرد. اما در نرم افزار به خاطر ماهیت انتزاعی بودنش این تغییرات ساده فرض می شوند. چون نرم افزار به سادگی قابل توسعه است، مشتری متوجه نیست که چیزی که می خواهد واقعا چه هزینه ای برتولید کننده تحمیل می کند تا آن را اجرا کند. اغلب تغییرات ساختاری نیز بسیار ساده فرض می شوند و تولید کننده را وادار به ساخت آن.
12- تغییرات اجتناب ناپذیرند. (Inevitable Changes) : ایا در نرم افزار موقعیتی هست که تغییر نکند. همه چیز از فنآوری تا نیاز مشتری تا تیم تولید تغییر می کند و این تغییرات بسیار سریع و غیر قابل اجتناب می باشند. گریزی نیست که آنها را در نظر بگیریم.به قولی تنها چیز "ثابت" در نرم افزار خود مفهوم "تغییر" است. هیچ نرم افزاری در ابتدا کامل نیست و این تغییرات است که باعث می شود مطابق نیاز در بیاید.
این دوازده مورد و موارد دیگری از این دست، تفاوت های ماهوی و سختی و پرخطر بودن تولید نرم افزار را نسبت به سایر تولید های صنعتی نشان می دهد. نتایج یک تحقیق که در سال 2000 انجام شده است نشان می دهد که تنها 28 درصد پروژه های نرم افزاری موفق بوده اند، 23درصد متوقف شده اند و الباقی (یعنی 49%) با مشکلات جدی نظیر تاخیر تحویل، افزایش بودجه و یا عدم برآورده کردن نیازها مواجه بوده اند.
این مشکل است، اما راه حل کجاست؟ طبیعی است در "مدیریت پروژه"! در آینده به بحث مدیریت پروژه به صورت جدی تری خواهم پرداخت.
همین!
در نوشتن این مطالب، کمک زیادی گرفته ام از کتاب "Software Project Secrets: Why Software Projects Fail" . گرچند هنوز کامل نخواندمش، خواندنش را به همه توصیه می کنم. مخصوصا کسانی که تجربه کار در پروژه های مختلف را دارند و مسائل آن برایشان ملموس است.
George Stepanek, "Software Project Secrets: Why Software Projects Fail" , Apress, 2005
نظرخواهی