شما می توانید با ارسال ایمیل خود ، بصورت رایگان مشترک شده و از بروزسانی مطلع شوید.

ایمیل خود را وارد کنید:

در کتاب “Project Management Methodologies: Selecting, Implementing, and Supporting Methodologies and Processes for Projects” به مفهوم و جدول مرتبط جالبی برخوردم که بد ندیدم آن را در وبلاگ هم بگذارم. در این کتاب، “مدیریت پروژه” را جزیی از یک “اکو سیستم (ecosystem)” کامل می داند که از مولفه های (Component) مختلفی تشکیل شده است و [...]

باید بگویم آن انتظاری که از مشارکت در بحث پس از انتشار قسمت اول (اینجا) داشتم برآورده نشد. اگر چه دوستان دیگری در فضای وبلاگستان در یک رویداد تصادفا همزمان به بحث مواجهه با مقاومت در برابر تغییرات به صورت عمومی پرداخته بودند که جالب توجه است(برای مثال ۱ ، ۲ و ۳). اما برگردیم [...]

این نوشته آقای کمالیان را بخوانید: “پایان یک سازمان، چه زمانی و چرا؟” می بخشید که اینقدر صریح خواستم که آن نوشته را بخوانید، چون اولا اگر آن را نخوانید یک نوشته خوب را از دست داده اید و دوما بدون مطالعه آن قطعا خواندن ادامه این نوشته بی معنی است. اما بعد : اگر [...]

در سالیان اخیر و با طرح متدولوژی های چابک ، Agile Methodologies تقریبا همه عرصه های فرآیند توسعه نرم افزار (Software Development)  دستخوش تغییر شد، از جمله بحث مدیریت پروژه و به تبع آن مفهوم جدیدی ایجاد شد تحت عنوان مدیریت پروژه چابک یا Agile Project Management. اگر چه مبحث چابکی، فقط منحصر به صنعت [...]

در خبری مرتبط برای جذب همکار جدید برای رادمان آمده است(اینجا): برای بهبود فعالیتهای اجرایی شرکت رادمان،نیاز به حضور افراد پرانرژی و خلاق در پست های سازمانی زیر می باشد: منشی: فعال، مسلط به اینترنت و نرم افزارهای Office، آشنا به امور اداری و وظائف منشی در یک شرکت کامپیوتری، روابط عمومی بالا و قدرت بیان [...]

تولید نرم افزار، تفاوت ها با دیگر تولید های صنعتی

نرم افزار هم مانند هر کالای دیگری باید ساخته شود. فرآیند تولید آن هم مانند همه فرآیند های تولید صنعتی، از “تفکر کارگاهی” تا “تفکر کارخانه ای” را طی کرده است.
به فرآیند صنعتی که دقت کنید، می بینید که بعد از آنکه بشر به این صرافت افتاد که خودش نمی تواند همه کار بکند و مثلا یک کلبه را به صورت کامل بسازد،  ابتدا به صورت فردی و در مغازه ها و کارگاه های تخصصی کار شروع شد، آهنگری ها، نجاری ها یا در و پنجره سازی و …. و بعد دید که نمی تواند با این روش برج بسازد، نمی تواند خودرو را در حجم انبوه تولید کند ، طرز فکرش را عوض کرد و کارخانه ها را ساخت تا بتوانند در یک خط تولید به صورت انبوه، کالای استاندارد تولید کنند و مشتری ها هم عادت کردند که خود را با کالا تطبیق دهند.
همین اتفاق در نرم افزار افتاد، از جایی که به صورت اختصاصی برای هر مشتری پروژه تولید داشتیم، تا بسته های نرم افزاری (Package)  که به صورت انبوه تولید می شد و فروش می رفت و تا ERP که می گوییم استاندارد است و هر مشتری خودش را تطبیق می دهد و یا سیستم به صورت کم، تغییر داده می شود تا نیاز مشتری را فراهم کند.این تولید هم مانند تولید های دیگر نیاز به تحلیل، طراحی و پیاده سازی دارد. مدیریت پروژه می خواهد تولیدش و همان مسائل رادارد.


فرآیند مدیریت پروژه (سازماندهی، برنامه ریزی و نظارت) به عنوان یک اصل جدانشدنی از هر پروژه ای در همه صنایع (منجمله نرم افزار) هم وجود دارد.
اما نرم افزار به لحاظ عوامل ماهیتیش چنان با بقیه کالاهای صنعتی متفاوت است که می بینیم در روشهای توسعه آن تنوع زیادی وجود دارد و هر روز یک مدل جدید برای توسعه نرم افزار می بینیم. این تفاوت ها را به طور خلاصه می توانیم شامل موارد زیر بدانیم:
۱- نرم افزار پیچیده است (Complexity): به تعبیری “کاهش پیچیدگی قلب توسعه نرم افزار است.” یک برنامه کوچک گاهی هزاران خط فرمان می شود و توسعه آن به هر نحو مشکل است. روشهایی مانند ماژول بندی و …. آمده است، اما هنوز هم پیچیدگی یکی از مهمترین اجزاء جدانشدنی نرم افزار ها و فرآیند تولید آن است.
۲- نرم افزار انتزاعی است (abstraction) : شما نمی توانید به شکل فیزیکی آن را لمس کنید و نشان دهید. نه خودتان واقعا می توانید همه آن را یکجا در دست بگیرید و مشکلتر آنکه مشتری ها عقلشان به چشمشان است! و شما عاجز از نمایش کار خود. نرم افزار انتزاعی ترین جزء تولید است.
۳- نیازها کامل نیست. (Uncomplete Requirements) : اغلب موراد، پیش از ساخت واقعی نرم افزار، همه نیازهای مشتری یا استخراج نشده و یا هنوز معلوم نیست. در پایان پروژه، تازه مشتری می فهمد که واقعا چه می خواهد.
۴- فنآوری به سرعت تغییر می کند (Technology Changes Rapidly): سرعت تغییرات در فنآوری های ساخت نرم افزار فوق العاده سریع است. هر روز بستر و سیستم عامل جدید، هر روز تغییر سخت افزار، تغییر زبانهای برنامه سازی و …. کدام فنآوری را می شناسید که به این سرعت تغییر کند.
۵-تجربه های موفق بالغ نشده اند. (Immature Best Practices): به خاطر رشد سریع، اغلب تولید کنندگان به خوبی مهارت های تولید را کسب نکرده اند. معمولا در پروژه ها عوامل کیفی کمتر دیده می شود و بنابراین تجربه های موفق کمتر بدست می آیند.حتی در صورت وجود، به دلیل تغییرات سریع فنآوری، کمتر در پروژه های بعدی می توانند الگو باشند.
۶- فناوری اطلاعات بسیار گسترده است. (Technology is a Vast Domain): در این که شک ندارید! کسی نیست در این زمینه که همه فن حریف باشد (علامه دهر در نرم افزار نداریم!) بنابراین کسی نمی تواند به تنهایی به همه قسمت های یک پروژه اشراف داشته باشد.
۷-تجارب فنآوری ناقص هستند. (Incomplete Technology Experience) : فنآوری های جدید و نسخ های جدید ابزارها اغلب آنقدر با نسخه قبلیشان تفاوت دارد که به سرعت تجربه افراد در این زمینه خارج از رده می شود. تجارب اکثر در موقع کار بدست آمده و بعد از آن کمتر به درد می خورند.
۸- توسعه نرم افزار اکتشافی است. (Software Development is Research) : به دلیل عدم شناسایی نیازها و عدم دانش مشتریان نرم افزار با آن، فرآیند تولید اغلب ماهیت تحقیقاتی و یا اکتشافی به خود می گیرد. ابزارها نیز جدیدند و توسعه دهنده باید آموزش استفاده از آنها را کسب کند. بنابراین فرآیند توسعه نرم افزار فقط ساخت آن نیست، یادگرفتن آن است که با چه راهی می توان به نتیجه رسید.
۹- کارهای تکراری خودکار هستند. (Automated Repetetive works) : در نرم افزار و تولید آن، به حدی از خودکار سازی برای فرآیند های تکراری رسیده ایم که در تولید های دیگر هنوز بحث آن هم مطرح نشده است، حجم بالای استفاده مجدد (reuseability) از قطعات آماده، برون سپاری تولید (Outsourcing) و…. نمونه هایی از این خودکار سازی است.
۱۰-ساختن در واقع طراحی است . (Construction is Actually Design) : همه فرآیند های صنعتی مراحل مشخصی دارند (تحلیل، طراحی و اجرا : یک مدل خطی خوش تعریف) اما نرم افزار چنین نیست، در مرحله پیاده سازی و اجرا، نیازها به مرور تشخیص داده می شوند و این باعث می شود طراحی تا پایان ادامه پیدا کند. حتی در زمان نگهداری و پشتیبانی نیز، فرآیند طراحی به شکل جدی مطرح است.
۱۱- تغییرات راحت پنداشته می شوند. (Changes Considered easy) : تغییر نیاز در فرآیند های تولید دیگر توسط مشتری بسیار سخت دیده می شود و وی سختی تغییر طراحی را در پایان پیاده سازی می فهمد و بنابراین آن را مطرح نمی کند و یا اگر مطرح کرد هزینه آن را می پذیرد. اما در نرم افزار به خاطر ماهیت انتزاعی بودنش این تغییرات ساده فرض می شوند. چون نرم افزار به سادگی قابل توسعه است، مشتری متوجه نیست که چیزی که می خواهد واقعا چه هزینه ای برتولید کننده تحمیل می کند تا آن را اجرا کند. اغلب تغییرات ساختاری نیز بسیار ساده فرض می شوند و تولید کننده را وادار به ساخت آن.
۱۲- تغییرات اجتناب ناپذیرند. (Inevitable Changes) : ایا در نرم افزار موقعیتی هست که تغییر نکند. همه چیز از فنآوری تا نیاز مشتری تا تیم تولید تغییر می کند و این تغییرات بسیار سریع و غیر قابل اجتناب می باشند. گریزی نیست که آنها را در نظر بگیریم.به قولی تنها چیز “ثابت” در نرم افزار خود مفهوم “تغییر” است. هیچ نرم افزاری در ابتدا کامل نیست و این تغییرات است که باعث می شود مطابق نیاز در بیاید.
این دوازده مورد و موارد دیگری از این دست، تفاوت های ماهوی و سختی و پرخطر بودن تولید نرم افزار را نسبت به سایر تولید های صنعتی نشان می دهد. نتایج یک تحقیق که در سال ۲۰۰۰ انجام شده است نشان می دهد که تنها ۲۸ درصد پروژه های نرم افزاری موفق بوده اند، ۲۳درصد متوقف شده اند و الباقی (یعنی ۴۹%) با مشکلات جدی نظیر تاخیر تحویل، افزایش بودجه و یا عدم برآورده کردن نیازها مواجه بوده اند.
این مشکل است، اما راه حل کجاست؟ طبیعی است در “مدیریت پروژه”! در آینده به بحث مدیریت پروژه به صورت جدی تری خواهم پرداخت.
همین!
در نوشتن این مطالب، کمک زیادی گرفته ام از کتاب “Software Project Secrets: Why Software Projects Fail” . گرچند هنوز کامل نخواندمش، خواندنش را به همه توصیه می کنم. مخصوصا کسانی که تجربه کار در پروژه های مختلف را دارند و مسائل آن برایشان ملموس است.
George Stepanek, “Software Project Secrets: Why Software Projects Fail” , Apress, 2005

۲ دیدگاه نوشته شده است! می توانید دیدگاه خود را بنویسید

  1. [...] شکلی تولید نمایند که این هزینه ها در حداقل باشد. (در <اینجا> تفاوت های تولید نرم افزاری با سایر تولید های صنعتی [...]

  2. [...] تولید نرم افزار، تفاوت ها با دیگر تولیدات صنعتی [...]

دیدگاه خود را به ما بگویید.