یکشنبه, ۹ اردیبهشت, ۱۴۰۳ / 28 April, 2024
مجله ویستا

شیوه‌ای جدید در تولید نرم‌افزار


شیوه‌ای جدید در تولید نرم‌افزار
● Agile Software Development
قصد دارم یكی از مباحث جدید در مهندسی نرم‌افزار را به صورت مختصر توضیح دهم. این مدل تولیدی نرم‌افزار را بارها در پروژه‌های نرم‌افزاری‌ای كه مدیریت و اجرا كرده‌ام اعمال كردم و تجربه نشان داده است كه خیلی از مواقع این روش توانسته است گوی سبقت را از روش‌های معمول و متداول برباید.
در طراحی یك نرم‌افزار رعایت اصول استاندارد طراحی، استفاده از الگوهای آماده و بهره‌گیری از روش‌های نوین بسیار مهم است، ولی نكته مهم این است كه در اصل كاربران، باعث می‌شوند یك پروژه نرم‌افزاری به نتیجه برسد. یعنی فناوری و پروسه استفاده شده، در حقیقت در رده دوم اهمیت قرار دارند.
بسیاری از ما با پروژه‌های نرم‌افزاری‌ای كه بدون هیچ‌گونه اصولی تهیه می‌شوند، مواجه شده‌ایم و دیده‌ایم كه كار با این گونه پروژه‌ها تا چه اندازه مشكل است. در این پروژه‌ها مشكلات عمده‌ای كه پیش میآیند عبارتند از: عدم توانایی تولیدكنندگان در تشخیص نیازهای كاربران، وجود ایرادها و error های تكراری، تأخیر در ارائه محصول و... . از طرف دیگر، مشتریان این‌گونه نرم‌افزارها از عدم دقت در ارائه برنامه زمانبندی دقیق از طرف طراحان سیستم، كیفیت كمِ نرم‌افزارهای تولیدی و افزایش هزینه‌ها شكایت دارند.
در این پروژه‌ها برنامه‌نویسان ساعت‌های زیادی را صرف تهیه نرم‌افزاری می كنند كه مملو از مشكل است و تلاش آنان چنان كه باید، مؤثر نیست. وقتی با این مشكلات مواجه می‌شویم، به این فكر می‌افتیم كه باید در كار خود روش و رویه‌ای درست داشته باشیم كه فعالیت‌های مربوط به پروژه در آن مشخص و منظم باشد، نیازهای كاربران در آن مشخص باشد و خروجی نرم‌افزار و محصولات پروژه با موفقیت تولید شوند.
برای این كار می‌توانیم به تجربیات كسب شده در پروژه‌های گذشته خود مراجعه كنیم و فعالیت‌های موفقی كه در آن پروژه‌ها انجام شده است را دوباره انجام دهیم و از كارهایی كه باعث مشكل در آن پروژه‌ها گشته‌اند، پرهیز كنیم. البته نمی‌توانیم با این كار از وجود مشكل در نرم‌افزار خود مطمئن باشیم؛ زیرا مشكلات، چه بخواهیم چه نخواهیم، بروز خواهند كرد و از آن جایی كه در كار رویه‌ای ثابت نداریم و تنها از تجربیات قدیمی خود استفاده می‌كنیم، نمی‌توانیم انتظار داشته باشیم كه نرم‌افزارهای ما بدون اشكال باشند؛ زیرا ممكن است با مشكلی برخورد كنیم كه تا به حال با آن برنخورده‌ایم و تجربه‌ای در رفع آن نداریم.
اوایل سال ۲۰۰۱ تعدادی از محققان و صاحب‌نظران نرم‌افزار، گروهی به نام Agile Alliance را تشكیل دادند كه توانست راه‌حلی برای تیم‌های نرم‌افزاری پیدا كند تا به سرعت و با كیفیت بالا نرم افزار تولید كنند و بتوانند اگر تغییری در قسمتی از نرم‌افزار به وجود آمد، آن را كنترل كنند و اصلاحات لازم را اعمال نمایند. آن‌ها مدعی هستند كه راه بهتری برای تولید نرم‌افزار پیشنهاد كرده‌اند كه كار ما برنامه‌نویسان را آسان كرده است.
آن‌ها چند اصل مهم را به عنوان مانیفیست یا بیانیه خود در نظر گرفته‌اند. از جمله: اهمیت نقش اعضای تیم در پروژه نرم‌افزاری، تولید مستندات مناسب برای نرم‌افزار، اهمیت نقش كاربران سیستم و استفاده از آن‌ها در مراحل ساخت نرم‌افزار، و توانایی اعمال تغییرات در نرم‌افزار در تمامی مراحل تولیدی آن.
● اهمیت نقش اعضای تیم در پروژه نرم‌افزاری‌
یك رویه صحیح و مناسب در تولید نرم‌افزار به تنهایی نمی‌تواند از شكست پروژه جلوگیری نماید، اگر از افراد مناسب در پروژه استفاده نشود. البته انتخاب رویه‌ای نامناسب نیز می‌تواند باعث عدم كارایی اعضای تیم شود؛ حتی اگر بسیار كاركشته هم باشند. به طوری كه حتی گروهی از بهترین برنامه‌نویسان نیز اگر در تیم منسجم كار نكنند، نمی‌توانند تمام كارایی خود را در اختیار پروژه قرار دهند.
یك عضو مؤثر و قوی در تیم نیازی ندارد كه یك برنامه‌نویس سطح بالا و قوی باشد. او می‌تواند یك برنامه‌نویس معمولی باشد، اما كسی باشد كه با دیگر اعضای تیم به خوبی كار كند و با آنان رابطه خوبی داشته باشد. یك تیم با برنامه‌نویسان معمولی‌ای كه می‌توانند به صورت منسجم كار كنند و با هم ارتباط خوبی داشته باشند، بهتر از گروهی از بهترین برنامه‌نویسان است كه نمی توانند كار تیمی انجام دهند و با موفقیت پروژه‌ای را به اتمام برسانند.
البته نباید نقش مهم ابزارهای برنامه‌نویسی مناسب و ابزار CASE را در موفقیت پروژه‌های نرم‌افزاری نادیده گرفت. كامپایلرها، IDEها، سیستم‌های كنترلی سورس كدهای برنامه و ... همگی می‌توانند باعث شوند اعضای تیم به خوبی و با دقت بیشتری كار خود را انجام دهند. البته استفاده زیاد از ابزارهای برنامه‌نویسی و كمكیِ مهندسان نرم‌افزار می‌تواند اثر معكوس نیز داشته باشد. یكی از نكات قابل اهمیت كه مدیران پروژه‌ها باید بدانند این است كه اولین كاری كه باید انجام دهند، ایجاد تیمی مناسب برای پروژه است؛ حتی قبل از این‌كه محیط كاری مناسب را برای آن تیم فراهم آورند. ابتدا باید تیمی كارا و همگام با هم تشكیل داد. سپس اجازه داده شود خود اعضای آن تیم در مورد نیازهای ابزاری و محیطی خود تصمیم بگیرد.
● تولید مستندات
نرم‌افزار بدون مستندات را می‌توان مانند خانه‌ای تجسم كرد كه نقشه سیم‌كشی برق، لوله‌كشی و هیچ‌گونه نقشه‌ دیگری ندارد. حال تجسم كنید كه اگر قسمتی از برق این ساختمان ایراد پیدا كند، چه كاری می‌توانیم انجام دهیم؟ یا باید از برقكاری كه آن ساختمان را قبلاً برق كشی كرده است درخواست كنیم كه به ما كمك كند (البته پیدا كردن او نیز كار آسانی نیست و ممكن است هیچ‌وقت او را پیدا نكنیم). راه‌حل بعدی این است كه دیوارهای خانه را خراب كنیم تا سیم‌ها را پیدا كنیم و نقص سیم‌كشی را برطرف نماییم و به این صورت در حقیقت یك فاجعه به تمام معنی برای صاحبخانه پیش میآید.
برای پیدا كردن اشكالی كوچك یا ارتقای سیستم برقی چه مشكلاتی سر راه خواهند بود؛ اگر نقشه برق ساختمان موجود نباشد. حال تجسم كنید نرم‌افزاری فاقد مستندات باشد و برنامه‌نویس آن نیز در دسترس نباشد.
كدهای برنامه نمی‌توانند به تنهایی و بدون راهنما و مستندات توسط دیگر افراد قابل فهم باشند. طراحان نرم‌افزار باید مستنداتی فراهم كنند كه بتواند به كسی كه بعدها به آن كدها مراجعه می‌كند نشان دهد كه طراحان اولیه این سیستم چگونه ساختار برنامه را درست كرده‌اند. البته درست كردن مستنداتِ زیاد و غیرضروری كار درستی نیست و وقت تلف كردن است.
مهندسان نرم‌افزار اصطلاح خوبی برای مستندات دارند و می‌گویند: مستندات نرم‌افزار باید <كوتاه> و <ساكت> باشد. منظور از كوتاه این است كه باید مختصر و دقیق باشد و منظور از ساكت این است كه نباید خیلی به جزئیات غیرضروری بپردازد و خواننده را خسته نماید.
● اهمیت نقش كاربران سیستم در پروژه‌
نرم‌افزار را نمی‌توان مانند اجناس دیگر سفارش داد. نمی‌توانید انتظار داشته باشید كه شرح فنی نرم‌افزاری را بنویسید و از كسی بخواهید آن را در مدت زمان معین و با قیمت معین به اتمام برساند. پروژه‌های نرم‌افزاری كه این‌گونه سفارش داده شده‌اند، اكثراً شكست خورده‌اند. پروژه‌های موفق پروژه‌هایی هستند كه در آن كاربران به صورت مستقیم در مراحل اجرایی پروژه دخیلند و نظرات مشتریان كه همان كاربران سیستم باشند، از ابتدا مورد توجه قرار گرفته است. اگر كاربران سیستم در تمامی مراحل تولید نرم‌افزار حضور داشته باشند و در مورد كار و محصول به دست آمده تا آن زمان اعلام نظر كنند، می‌توان مطمئن بود پس از اتمام كار انتظار بالاتری از سیستم نخواهد داشت.
● توانایی اعمال تغییرات در نرم‌افزار و برنامه‌ریزی موقت‌
به راستی می‌توان عامل موفقیت یا عدم موفقیت یك پروژه نرم‌افزاری را در توانایی یا عدم توانایی آن در پاسخ به تغییرات دانست؟ برنامه اجرایی پروژه باید انعطاف‌پذیری مناسبی داشته باشد و بتوان آن را متناسب با تغییرات احتمالی آینده تغییر داد. معمولاً مدیران پروژه‌ها چارت و برنامه زمان‌بندی پروژه را روی دیوار نصب می‌كنند. با این كار می‌توانند تكالیف هر شخص در تیم را كنترل نمایند و قسمت‌های انجام شده را با خط قرمز روی آن برنامه مشخص كنند. اما مشكلی كه در این قسمت ممكن است پیش آید این است كه بعد از مدتی ساختار این برنامه به هم خواهد خورد؛ چرا كه اولاً اعضای تیم در مورد پروژه اطلاعات خوبی كسب كرده‌اند و برخی از تكالیف آنان غیرضروری خواهد شد.
از طرف دیگر، مشتری و كاربران آینده سیستم نیز در جریان كار قرار می‌گیرند و ممكن است نیازهای خود را افزایش دهند و تكالیف بیشتری برای اعضای تیم به ارمغان بیاورند. با این كار تمام برنامه زمانبندی پروژه به هم خواهد خورد. راه بهتری كه می‌توان پیش گرفت این است كه برنامه‌ای دقیق برای مثلاً دوهفته در نظر بگیریم، برنامه‌ای تقریبی برای دو یا سه ماه آینده مشخص كنیم و برنامه‌ای باز هم تقریبی‌تر برای بعد از آن. دلیل منطقیِ این‌گونه برنامه‌ریزی این است كه با این كار می‌توانیم اگر مثلاً نیازهای كاربر تغییر كرد، در مرحله بعدی برنامه خود آن تغییر را در نظر بگیریم.
● اصول تولید نرم‌افزار به روش Agile Development
▪ جلب رضایت كاربر سیستم با ارائه نرم‌افزارهای با كیفیت‌
▪‌ نیازهای كاربران ممكن است عوض شود؛ حتی در مراحل پایانی پروژه. در Agile Development گروه آمادگی قبول هرگونه تغییری را در هر مرحله از پروژه دارد.
▪ تولید سریع نرم‌افزار با تبدیل آن به چند قطعه و ارایه آن به مشتری
▪‌ ایجاد محیط كاری مناسب برای اعضای تیم در پروژه
▪ یكی از بهترین روش‌ها برای گرفتن اطلاعات و تبادل آن، ایجاد ارتباط گفتاری با دیگر اعضای تیم در پروژه است.
▪‌ در پروژه‌هایی كه به روش Agile تولید می‌شوند، معیار موفقیت پروژه و رویه انتخابی، میزان رضایت مشتری از نرم‌افزار تولید شده و نیازهایی است كه برآورده شده‌اند.
▪‌ اعضای تیم در این روش در كار خود آهسته و پیوسته عمل می‌كنند.
▪ اعضای تیم در این روش باید بیشترین تلاش خود را برای نوشتن نرم‌افزارهایی با كیفیت بالا به عمل آورند.
▪ انتخاب بهترین و آسان‌ترین راه برای رسیدن به هدف اصلی پروژه‌
در حقیقت هدف اصلی هر برنامه‌نویس و تمامی تیم‌های نرم‌افزاری، ارائه بهترین سرویس و محصولی با كیفیت بالا به مشتریان خود است. Agile Software Development راهی است برای رسیدن به این منظور. چندین روش مانندScrum ،Adaptive Software Development و‌ Extreme Programming) XP) می‌توانند به شما كمك كنند.
نرم‌افزارهایی با كیفیت بالا بسازید و اطمینان حاصل كنید كه پروژه نرم‌افزاری شما با موفقیت به پایان می‌رسد. اگر می‌خواهید در مورد روش‌های ذكر شده اطلاعات بیشتری كسب نمایید می‌توانید، به مقاله‌ای با همین قلم با نام <مناسب‌ترین روش برای تولید نرم‌افزارهای كوچك> در شماره ۶۶ ماهنامه مراجعه كنید.
امین صفایی
منبع : ماهنامه شبکه


همچنین مشاهده کنید