PDA

View Full Version : تولید نرم‌افزار و چالش‌های‌ آن



حرفه ای
پنج شنبه 10 اسفند 1385, 12:23 عصر
برخی بر این باوراند که تولید نرم‌افزار نوعی هنر است و همه با این نکته موافق هستند که "تولید نرم‌افزار کاری خلاق است" با این همه در کشور ما ساخت نرم‌افزار حتا در زمره‌ی کارهای تولیدی نیز به شمار نمی‌رود. مهم‌ترین ویژگی تولید نرم‌افزار که آن را از دیگر فعالیت‌های تولیدی یا خدماتی متمایز می‌کند، خلق و ایجاد دنیایی مجازی است که از طریق واسطه‌های مناسبی با دنیای واقعی مرتبط شده و بخشی از نیازهای ما را برطرف می‌سازد.

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

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

- تکمیل نکردن زیر ساخت‌های ضروری IT

- فراگیر نشدن فرهنگ استفاده از این فناوری در بخش وسیعی از حوزه‌ها

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

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

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

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



مدیر پروژه و چالش‌های پیش رو

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

* کارفرمایان (مشتریان)

* اعضای تیم یا کارکنان بخش‌های نرم‌افزار

* مدیران شرکت‌های نرم‌افزاری



1- کارفرمایان و مشتریان

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

- بخش‌هایIT همچنان در اغلب سازمان‌ها و مراکز صنعتی، خدماتی و بازرگانی سازمان ضعیفی دارند و از دانش و فناوری روز، در عرصه‌ای که تکامل و تحول در آن، ساعت به ساعت رخ می‌نماید، به دور هستند.

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

- نرم‌افزار هنوز به عنوان کالایی ارزشمند شناخته نشده و کارفرمایان و مشتریان نرم‌افزار اگر چه حاضر هستند بهای بالایی را برای یک سخت‌افزار، برای مثال یک مانیتور، بپردازند، در صرف هزینه برای نرم‌افزار به شدت خوددار اند.

- در مزایای خرید، تولید و استفاده از نرم‌افزار تردید دارند.

- دید روشنی از نیازهای خود و قابلیت مکانیزاسیون آن‌ها ندارند.

- دید روشنی از حجم تلاش لازم برای تولید یک نرم‌افزار ندارند.

- به ویژه در موازنه طرف‌های قرارداد ساخت و تولید نرم‌افزار، خود را طرف قدرتمند محسوب می‌کنند. حاصل چنین موازنه‌ای قراردادهایی غیر واقع‌ بینانه و یک طرفه است.

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

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

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

- کارکنان بخش نرم افزار

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

- محصول نرم‌افزاری به طور کامل انتزاعی است.

- تولید آن به خلاقیت نیاز دارد.

- گرایش به سمت پیچیدگی دارد.

- برآورد زمان و هزینه‌ی تولید آن بحث‌انگیز و مشکل است.



نیروی انسانی مهم‌ترین سرمایه

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



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



خروج از برآوردهای زمانی

برآورد تلاش‌های لازم برای تولید یک نرم‌افزار و برآورد زمان پروژه‌های نرم‌افزاری، یکی از بحث انگیز ترین مسایل مدیریت در پروژه های نرم‌افزاری است. بررسی روش‌های تخمین هزینه و زمان تولید یک نرم‌افزار از حوصله این نوشته خارج است. بسیاری از پروژه‌های نرم‌افزاری تنها بدلیل خروج از برآوردهای زمانی خود شکست خورده‌اند. بنا بر این بوضوح باید گفت که برآورد واقعی هزینه‌ی اجرای یک پروژه نرم‌افزاری یکی از بنیانی ترین قدمهای موفقیت یک پروژه نرم‌افزاری است [1].



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



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



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



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



انگیزه

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



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



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



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