اسکرام SCRUM - بخش هشتم
چهارشنبه بیست و چهارم مهر ۱۳۹۲ ساعت 20:59 | نویسنده: یوسف مهرداد | ( )

مترجم: مهندس علیرضا اسماعیلی

بخش اول
بخش دوم
بخش سوم

بخش چهارم
بخش پنجم
بخش ششم
بخش هفتم

ادامه ....

 


:: ادامه مطلب
:: موضوعات مرتبط: چابک Agile، مقاله چابک Agile
اسکرام SCRUM - بخش هفتم
شنبه سی ام شهریور ۱۳۹۲ ساعت 22:7 | نویسنده: یوسف مهرداد | ( )

مترجم: مهندس علیرضا اسماعیلی

بخش اول
بخش دوم
بخش سوم

بخش چهارم
بخش پنجم
بخش ششم

ادامه ....

 


:: ادامه مطلب
:: موضوعات مرتبط: چابک Agile، مقاله چابک Agile
اسکرام SCRUM - بخش ششم
جمعه بیست و دوم شهریور ۱۳۹۲ ساعت 9:57 | نویسنده: یوسف مهرداد | ( )

مترجم: مهندس شهاب‌الدین فرحبخش

بخش اول
بخش دوم
بخش سوم

بخش چهارم
بخش پنجم

ادامه ....

 


:: ادامه مطلب
:: موضوعات مرتبط: چابک Agile، مقاله چابک Agile
نیازمندی‌های چابک (Agile Requirements) - بخش دوم
سه شنبه هفدهم اردیبهشت ۱۳۹۲ ساعت 22:51 | نویسنده: یوسف مهرداد | ( )

مترجم: خانم مهندس فاطمه اردستانی

بخش اول

ادامه ....

 


:: ادامه مطلب
:: موضوعات مرتبط: چابک Agile، مقاله چابک Agile، تحلیل
:: برچسب‌ها: چابک Agile, نیازمندی‌ها Requirements
دریافت ترجمه مقاله Embracing Change with XP
جمعه بیست و سوم فروردین ۱۳۹۲ ساعت 21:5 | نویسنده: یوسف مهرداد | ( )
ضمن تشکر از دوست گرامی جناب آقای مهندس مهدی نگاهی، ترجمه مقاله  "در آغوش گرفتن تغییرات با XP"
 یا  Embracing Change with Extreme Programming  نوشته Kent Beck را می‌توانید از اینجا دریافت فرمایید.

 

گزیده:
«هرگز نباید چیزی را که نمی‌توانید بهتر از آن جایگزینش سازید، از بین ببرید.» پلوتارخ



:: موضوعات مرتبط: چابک Agile، مقاله چابک Agile
:: برچسب‌ها: چابک Agile
نیازمندی‌های چابک (Agile Requirements) - بخش اول
جمعه بیست و سوم فروردین ۱۳۹۲ ساعت 18:26 | نویسنده: یوسف مهرداد | ( )

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


مجموعه جدید مقاله‌ها، به حوزه نیازمندی‌ها در متدهای چابک اختصاص داده شده است. مرجع فعلی مطالب، کتاب  Agile Software Requirements: Lean Requirements Practices for Teams, Programs, and the Enterprise  نوشته‌ی Dean Leffingwell است.

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


:: ادامه مطلب
:: موضوعات مرتبط: چابک Agile، مقاله چابک Agile، تحلیل
:: برچسب‌ها: چابک Agile, نیازمندی‌ها Requirements
اسکرام SCRUM - بخش سوم
یکشنبه بیستم اسفند ۱۳۹۱ ساعت 23:53 | نویسنده: یوسف مهرداد | ( )

مترجم: مهندس شهاب‌الدین فرحبخش

۳-۲-تیم توسعه

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

.....


:: ادامه مطلب
:: موضوعات مرتبط: مقاله چابک Agile
:: برچسب‌ها: Scrum اسکرام, Agile چابک
اسکرام SCRUM - بخش دوم
شنبه دوازدهم اسفند ۱۳۹۱ ساعت 22:54 | نویسنده: یوسف مهرداد | ( )

مترجم: مهندس شهاب‌الدین فرحبخش

۱-۲-مالک محصول(Product Owner)
مالک محصول، نفر اصلی و صاحب صلاحیت در رهبری محصول است. وی تنها مرجع تصمیم-گیری برای انتخاب ویژگی‏های محصول و ترتیب ساخت آنها است. مالک محصول، چشم‏انداز روشنی از کار تیم اسکرام را با همکاری ذینفعان تهیه و همواره به‏روز نگه‏ می‏دارد. به همین دلیل، وی مسئول موفقیت کلی راهکار است که می‏تواند توسعه سیستمی جدید یا نگهداری سیستم موجود باشد.
....


:: ادامه مطلب
:: موضوعات مرتبط: مقاله چابک Agile
:: برچسب‌ها: Scrum اسکرام, Agile چابک
اسکرام SCRUM - بخش اول
دوشنبه هفتم اسفند ۱۳۹۱ ساعت 23:14 | نویسنده: یوسف مهرداد | ( )

پیش گفتار

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

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

۱- مرور

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

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


۲- نقش‌های اسکرام

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

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

گزیده:
«انسان باید مانند اقلیت فکر کند و مثل اکثریت سخن گوید.» آرتور شوپنهاور



:: موضوعات مرتبط: مقاله چابک Agile
:: برچسب‌ها: Scrum اسکرام, Agile چابک
در آغوش گرفتن تغییرات با XP - بخش هفتم و پایانی
چهارشنبه هجدهم بهمن ۱۳۹۱ ساعت 23:1 | نویسنده: یوسف مهرداد | ( )

مترجم: آقای مهندس مهدی نگاهی

تغییر نیازمندها
غول [بزرگ‌ترین و ترسناک‌ترین] مشکلات بسیاری از روشهای توسعه نرم‌افزار، فقط در حد یک مشکل ساده در XP است. با به کارگیری دستورالعمل «انجام طراحی فقط برای مسأله‌های امروز»، سیستمی که بر اساس XP در حال ساخت است، روز بعد برای پیمودن هر مسیری آمادگی دارد. انجام کارهای مشابه با کارهای قبلی، به دلیل ماهیت تکنیک بازسازی( Refactoring) در برآورده کردن اصل «یک بار و فقط یک بار»، ساده تر خواهد بود. لازم به یادآوری است که کارهای مشابه در یک پروژه زیاد است. با این حال، با اعلام یک نیازمندی اساسی و متفاوت-نامشابه-، برای انجام آن مجبور نیستید پای‌بند بسیاری از مکانیزمهای قبلی باشید.
در ابتدا درکی از میزان توانایی XP برای مواجهه با تغییر نیازمندی‌ها نداشتم. در اولین نسخه XP، تعیین این که هر داستان در کدام تکرار انجام شود، بخشی از برنامه‌ریزی انتشار(Release Planning) بود. تیم به مرور به این نتیجه رسید که می‌توان با کاهش زمان برنامه‌ریزی به نتایج بهتری دست یافت؛ کافی است از مشتری بخواهید فقط داستانهای تکرار جاری را انتخاب کند. در این روش، با شناسایی هر داستان جدید، نیازی نیست ترتیب داستانهای موجود در تکرارهای باقی‌مانده را بهم ریخته و دوباره مرتب کنید تا تکرار انجام داستان جدید مشخص شود. تنها کاری که باید انجام دهید، قراردادن داستان جدید در بین داستانهای انجام‌نشده است. یک یا دو هفته بعد، اگر داستان جدید هنوز هم برای مشتری اهمیت داشته باشد، وی آن را برای انجام در تکرار پیش‌رو انتخاب خواهد کرد.
(مترجم:
فرض کنید که در سه تکرار پیش رو، قرار است داستانهای زیر انجام شود(اندازه هر داستان جلوی آن مشخص شده است). سرعت تیم برای هر تکرار را 7 فرض کنید.
تکرار 1:
               داستان A‏ = 3                        داستان B‏ = 4
تکرار 2:
               داستان C‏ = 5                         داستان D‏ = 2
تکرار 3:
               داستان E‏ = 2                         داستان F‏ = 3                 داستان G‏ = 2

حال اگر داستان Z با اندازه 2 به تازگی شناسایی شود و مشخص گردد باید که بعد از داستان A انجام شود، ترتیب انجام داستان‌ها و تکرارهای متناظر آنها دچار تغییر می‌شود که در زیر نمایش داده شده است. این تغییر فقط یک جابه‌جایی ساده نیست، بلکه واقعاً به‌هم ریختن داستان‌ها و مرتب‌سازی دوباره است(به ترتیب حروف الفبای انگلیسی در بالا و پایین دقت کنید).
تکرار 1:
                داستان A‏ = 3                       داستان Z‏ = 2                    داستان D‏ = 2
تکرار 2:
                داستان B‏ = 4                        داستان F‏ = 3
تکرار 3:
                داستان C‏ = 5                        داستان E‏ = 2
تکرار 4:
                داستان G‏ = 2
)

این روش برنامه‌ریزی که در آن هر بار فقط تکرار بعدی برنامه‌ریزی می‌شود، موجب خودمانایی (self-similarity) مطلوبی می‌گردد. بدین شکل که در بازه‌ ماهانه و سالانه، با دو دسته داستان روبرو هستید: داستانهای انتشار جاری و داستانهای باقی‌مانده برای انتشارهای بعدی. در بازه هفتگی و ماهیانه نیز با دو دسته داستان روبرو هستید: داستانهای تکرار جاری و داستان‌های باقی‌مانده از انتشار جاری. در بازه روزانه و هفتگی هم با دو دسته کار(وظیفه) سروکار دارید: کارهای در دست انجام و کارهای باقی‌مانده از تکرار جاری. همچنین در بازه دقیقه و روزانه نیز با دو دسته مورد آزمون روبرو هستید: موردهای آزمون در دست انجام و موردهای آزمون باقی‌مانده.


Ron Jeffries

سخن پایانی
XP به هیچ‌وجه ایده‌ای کامل، بی‌عیب و پایان‌یافته‌ای نیست. محدوده و گستره کاربرد آن شفاف و مشخص نیست. در شرایط فعلی، پذیرش و استفاده از آن نیازمند شجاعت و انعطاف‌پذیری است وگرنه تمایل به بی‌توجهی و رهاکردن پروژه‌‌ انتخاب شده، موجب شکست XP خواهد شد.
استراتژی‌ من در استفاده از XP این است که ابتدا آن را در جایی که شرایط مناسب دارد، اجرا کنم: پروژه‌های برون‌سپاری یا داخل سازمانی مربوط به سیستم‌های کوچک و متوسط که نیازمندی‌های آن نامشخص و احتمالاً متغیر هستند. با شروع اجرای XP، می‌توانیم تلاش برای کاهش هزینه تغییرات در محیط‌های پرتنش و چالش را نیز شروع کنیم.
اگر قصد دارید از XP استفاده کنید، به خاطر خدا سعی نکنید آن را یک مرتبه قورت دهید. ابتدا یک مشکل حاد را در فرایند جاری انتخاب کنید و سعی کنید آن را با XP حل کنید. وقتی که مشکل حل شد، این کار را دوباره تکرار کنید. در هر لحظه، اگر پی‌بردید که اقدامات قبلی دیگر مفید نیستند، انجام آنها را متوقف کنید[کاری که قبلاً مشکلی را حل می‌کرده، ولی در حال حاضر کمکی نمی‌کند].
این روند به‌کارگیری XP، به شما امکان می‌دهد تا سبک(style) توسعه مختص خودتان را ایجاد کنید-کاری که نه تنها در استفاده از XP، بلکه همواره باید در پی انجام آن باشید. این شیوه به‌کارگیری به شما کمک می‌کند تا ریسکهای ناشی از نامناسب بودن XP برای تیم خود را مدیریت کنید و در کنار تغییر فرایند، تحویل محصول نیز دچار مشکل بیشتری نشود.

گزیده:
روياهاي كوچك نداشته باشيد، چون آن‌ها قدرت حركت دادن قلب انسان را ندارند.
يوهان ولفگانگ فان گوته



:: موضوعات مرتبط: چابک Agile، مقاله چابک Agile
در آغوش گرفتن تغییرات با XP - بخش ششم
شنبه بیست و سوم دی ۱۳۹۱ ساعت 20:46 | نویسنده: یوسف مهرداد | ( )

 مترجم: آقای مهندس مهدی نگاهی

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

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

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


Ward Cunningham

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

گزیده:
چرا بعضی آدمها برای آن که خودشان را «ثابت» کنند، دیگران را «متغیر» می‌کنند؟

متغیر: آشفته و ناراحت



:: موضوعات مرتبط: مقاله چابک Agile
در آغوش گرفتن تغییرات با XP - بخش پنجم
جمعه پانزدهم دی ۱۳۹۱ ساعت 17:25 | نویسنده: یوسف مهرداد | ( )

 مترجم: آقای مهندس مهدی نگاهی

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

برخی از متدولوژی‌ها مانند Cleanroom، برنامه‌نویسان را از آزمایش و بعضی مواقع حتی از کامپایل برنامه خود منع می‌کنند. فرایند معمولی بدین گونه است که برنامه‌نویس کدی را می‌نویسد، آن را کامپایل می‌کند، مطمئن می‌شود که درست کار می‌کند و سپس آن را به واحد سازمانی مسئول آزمون می‌فرستد. سپس آزمایش میزکار۱ (bench test)  در یک مرحله‌ روی همه کد انجام می‌شود. در این آزمایش، متغیرهای کد بررسی می‌گردند، خروجی دستورات چاپی تفسیر و کنترل می‌شوند و چندین دکمه فشار داده می‌‌شود تا چک لیست آزمون‌ تکمیل و تأیید گردد.

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

 همانطور که قبلا اشاره شد، آزمون‌ها توسط مشتریان نیز تعیین می‌شوند. مشتریان در ابتدای هر تکرار اعلام می‌کنند که در چه صورتی خواهند پذیرفت که داستان‌های کاربر به درستی  پیاده‌سازی شده‌اند. نظرات مشتریان به آزمون سطح سیستم (system-wide test) تبدیل می‌شود. تبدیل می‌تواند مستقیماً توسط خود مشتری با استفاده از زبانهای اسکریپتی متنی یا گرافیکی یا توسط برنامه‌نویسان با استفاده از ابزارهای آزمون انجام شود. این گونه آزمون‌ها نیز موجب افزایش اطمینان به سیستم می‌شوند با این تفاوت که اطمینان مشتری را نسبت به عملیات درست سیستم افزایش می‌دهند[آزمونهای واحد اطمینان برنامه‌نویسان را افزایش می‌دهند].

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

پانوشت: آقای مهندس نگاهی عزیز برای ادامه تحصیل به کشور کانادا نقل مکان کرده‌اند. بهترین شادباش‌ها تقدیم ایشان باد. امیدوارم همواره شاد، تندرست و پیروز باشند.

 گزیده:
«در حکومت سه عمل مختلف است: تهیه، مشورت، اجرا؛ اگر می‌خواهی کار سریع‌تر انجام بگیرد برای مرحله تهیه و اجرا اشخاص کم برگزین اما مرحله مشورت و آزمایش را به عهده اشخاص متعدد واگذار کن.»
فرانسیس بیکن



:: موضوعات مرتبط: چابک Agile، مقاله چابک Agile
در آغوش گرفتن تغییرات با XP - بخش چهارم
دوشنبه ششم آذر ۱۳۹۱ ساعت 20:13 | نویسنده: یوسف مهرداد | ( )

مترجم: آقای مهندس مهدی نگاهی

وظیفه (Task)
برای پیاده‌سازی هر وظیفه، برنامه‌نویسِ مسئول ابتدا باید یک همکار پیدا کند، زیرا همه کدهای برنامه به صورت دو نفره پشت یک کامپیوتر نوشته می‌شود. اگر پرسشی در مورد محدوده یا روش پیاده‌سازی به وجود آید، دو همکار(برنامه‌نویس و همکار وی) جلسه کوتاهی (15 دقیقه‌ای) با مشتری، برنامه‌نویسان مرتبط یا هر دو برگزار می‌کند. برنامه‌نویسان مرتبط کسانی هستند که دانش بیشتری در مورد کدی دارند که در طول پیاده‌سازی وظیفه تغییر خواهد کرد.

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

 وقتی مورد آزمونی وجود دارد که اجرا نمی‌شود:
+ یا یک راه تمیز برای اجرای مورد آزمون پیدا شده، که در این صورت همان راه پیش برده می‌شود؛

+ یا یک راه ناپسند برای اجرای مورد آزمون پیدا شده، اما راه تمیزی هم وجود دارد که نیاز به تغییر طراحی فعلی دارد. در این حالت، سیستم بازسازی (Refactor) می‌شود تا راه تمیز قابل اجرا شود؛

+ یا یک راه ناپسند برای اجرای مورد آزمون پیدا شده و راه تمیزی حتی با بازسازی سیستم نیز متصور نیست. در این حالت، همان راه ناپسند پیش برده می‌شود تا مورد آزمون اجرا شود.

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

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

گزیده:
مابک(کریستوفر پلامر): خدای من اینها دیگه کی‌یند؟
لوول(ال پاچینو): آدمهای عادی در یک شرایط غیرعادی. چه انتظاری داری مرد !
گفت‌وگویی از فیلم تماشایی Insider



:: موضوعات مرتبط: چابک Agile، مقاله چابک Agile
در آغوش گرفتن تغییرات با XP - بخش سوم
شنبه بیست و هفتم آبان ۱۳۹۱ ساعت 0:4 | نویسنده: یوسف مهرداد | ( )

بخش دوم ترجمه مقاله Embracing Change with Extreme Programming نوشته Kent Beck را می‌توانید در اینجا مطالعه نمایید.
مترجم: آقای مهندس مهدی نگاهی

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

انتخاب داستانهای هر انتشار تا حدودی شبیه خرید مواد غذایی از فروشگاه است. وقتی با 100 دلار به فروشگاه  می‌رویم، به خریدهای ضروری(با الویت) فکر می‌کنیم، به قیمت اجناس نگاه می‌کنیم و بعد تصمیم می‌گیریم که چه چیزهایی خریداری کنیم. [در اینجا بودجه موجود برای خرید -100 دلار- قابل افزایش نیست. رویکرد دیگر این است که ابتدا اجناس ضروری انتخاب می‌شوند و بعد بودجه لازم برای خرید آنها با جمع قیمتها، براورد می‌شود-مثلاً 150 دلار-].

در بازی برنامه‌ریزی(فرایند برنامه‌ریزی XP)، داستانها معادل اجناس و برآورد هر داستان معادل قیمت است[به عنوان مثال اگر براورد پیاده‌سازی داستانی، 3 نفر-روز باشد، یعنی قیمت آن 3 واحد است]. بودجه با اندازه‌گیری خروجی تیم  محاسبه می‌شود که مبنای آن جمع  برآورد داستانهای انجام شده در واحد زمان است.

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

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

برنامه‌ریزی تکرار با درخواست دوباره از مشتری برای انتخاب باارزش‌ترین داستان‌ها آغاز می‌شود با این تفاوت که این‌بار، داستانها از بین داستانهای باقی‌مانده از انتشار انتخاب می‌شوند. داستان‌ها توسط تیم به مجموعه‌ای از وظایف (tasks) شکسته می‌شوند –وظیفه کاری است که یک نفر می‌تواند طی چند روز انجام دهد. در صورت وجود وظایف  فنی– مانند ارتقاء (upgrade) پایگاه داده به نسخه جدید-، آنها نیز به لیست وظایف افزوده می‌شوند.

 پس از آن، برنامه‌نویسان برای پذیرش انجام وظایف، اعلام آمادگی می‌کنند. وقتی گفت‌وگو درباره وظایف به پایان می‌رسد، برنامه‌نویس مسئول، زمان انجام وظیفه‌‌اش را بر مبنای روز ایده‌آل (ideal day) برآورد و اعلام می‌کند[روز ایده‌آل یکی از واحدهای براورد اندازه(سایز) داستان است. روز ایده‌ال مدت زمان انجام یک کار است به شرطی که مجری فقط همان یک کار را انجام دهد، وقفه‌ای در انجام کار به وجود نیاید و منابع لازم برای کار نیز فوراً آماده گردد].

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

برنامه نویسان وظایف خود را طی تکرار انجام می‌دهند. با پایان یافتن هر وظیفه، برنامه‌نویس کد نوشته شده را با کد سیستم یکپارچه کرده و آزمون‌ها را اجرا می‌کند. همه آزمونها باید اجرا و پشت سر گذاشته شوند، در غیر این صورت کدها اجازه یکپارچه‌شدن با سیستم را نخواهند داشت.

در طول تکرار، آزمونهای کارکردی تحویل شده‌ توسط مشتری به مجموعه موجود افزوده می‌شوند. همه آزمونهای واحد و آزمونهای کارکردی در پایان تکرار اجرا می‌شوند.

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



:: موضوعات مرتبط: چابک Agile، مقاله چابک Agile
در آغوش گرفتن تغییرات با XP - بخش دوم
یکشنبه هفتم آبان ۱۳۹۱ ساعت 22:30 | نویسنده: یوسف مهرداد | ( )

بخش اول ترجمه مقاله Embracing Change with Extreme Programming نوشته  Kent Beck را می‌توانید در اینجا  مطالعه نمایید.
مترجم: آقای مهندس مهدی نگاهی  


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

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

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

سپس هر برنامه‌نویس یک وظیفه را به مجموعه‌ای از موردهای آزمون(test cases) تبدیل می‌کند. موردهای آزمون نشان‌دهنده پایان درست هر وظیفه هستند. هر برنامه‌نویس با همراهی یکی دیگر از برنامه‌نویسان -همکار-، ابتدا موردهای آزمون را می‌نویسد(در این مرحله اجرای آنها مؤفقیت‌آمیز نیست چون کد برنامه نوشته نشده است) و سپس با طراحی و نوشتن کدهای برنامه باعث اجرای درست موردهای آزمون و پشت‌سر گذاشتن آنها می‌شود. طراحی با رعایت اصل "حفظ ساده‌ترین طراحی ممکن برای کل سیستم" انجام می‌شود.

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

 داستان
XP  به دوره‌ قبل از اولین ورود سیستم به مرحله بهره‌برداری(Production) توجه ویژه‌ای دارد[دوره منجر به تولید نسخه یک نرم‌افزار]. این دوره می‌تواند منجر به ناهنجاری خطرناکی در پروژه شود و از این رو باید در سریع‌ترین زمان ممکن طی گردد. به هر حال پروژه باید از جایی شروع شود.

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

نتایج تحلیل در قالب داستانها در کنار هم قرار می‌گیرند. می‌توانید آنها را مجموعه‌ای از موردهای کاربرد(use case) فرض کنید که هر یک روی کارتی (index card) نوشته شده است. هر داستان باید کسب‌وکار محور (business-oriented)، آزمون‌پذیر و قابل برآورد باشد.

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

گزیده:
«کشنده‌تر از نیش مار، بچه حق‌ناشناس است.»
ویلیام شکسپیر



:: موضوعات مرتبط: چابک Agile، مقاله چابک Agile
در آغوش گرفتن تغییرات با XP - بخش اول
دوشنبه بیست و چهارم مهر ۱۳۹۱ ساعت 7:37 | نویسنده: یوسف مهرداد | ( )

متن زیر بخش اول ترجمه مقاله Embracing Change with Extreme Programming نوشته  Kent Beck است در  IEEE Software در سال 1999 منتشر شده است.
این مقاله توسط دوست گرامی جناب آقای مهندس مهدی نگاهی ترجمه شده است. 

 -------------------------------------------------------------------------------------------------

در آغوش گرفتن تغییرات با XP
XP مسیر فرایند توسعه نرم‌افزار رایج را تغییر می‌دهد. به جای برنامه‌ریزی، تحلیل و طراحی برای آینده بسیار دور [یک‌باره برای کل پروژه]، برنامه‌نویسان XP همه این کارها را در تمام مدت توسعه انجام می‌دهند – در هر بار مقدار کمی از آن را-.

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

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

چرخه‌های بلندمدت توسعه خوب نبودند چرا که نتوانستند خود را با تغییرات سازگار کنند. این موضوع شاید بدین معناست که آن چه نیاز داشتیم ایجاد چرخه‌های کوتاه‌تر بود. بنابراین همان طور که شکل 2 نیز نشان می‌دهد مدل آبشاری عامل ایجاد تکرارها۱ بوده است.

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

جامعه دانشگاهی مهندسین نرم‌افزار که هزینه زیاد تغییر نرم‌افزار را به عنوان یک چالش معرفی کرده است، تکنولوژی‌هایی نظیر پایگاه داده‌ رابطه‌ای، برنامه‌نویسی ماژولار۲ و مخفی‌سازی اطلاعات را ایجاد کرده‌ است. چه می‌شد اگر این تلاش‌های دشوار نتیجه می‌داد؟ چه می‌شد که ما در کاهش هزینه‌ تغییرات مداوم، خوب عمل می‌کردیم؟ چه می‌شد که مجبور نبودیم برای تسویه‌حساب با ساطور به جان مدل آبشاری بیفتیم؟ چه می‌شد اگر می‌توانستیم مدل آبشاری را در مخلوط‌کن بریزیم [و با هر چیز دیگری مخلوط کنیم]؟

 
تصویر 1: تکامل مدل آبشاری (a) و چرخه طولانی آن (تحلیل، طراحی، پیاده‌سازی و آزمایش) به مدل کوتاه‌تر با چرخه‌های تکرارشونده به عنوان مثال مدل حلزونی۳(b) و از آنجا به XP (c) با ترکیب فعالیت‌ها و انجام مقدار کمی از آنها در هر بار ولی مدوام در طول فرایند توسعه نرم افزار

 

اقدامات۴  XP
در زیر توضیح مختصری در مورد اقدامات مهم XP آورده شده است.
1- بازی برنامه‌ریزی(Planning Game)
مشتریان محدوده و زمان‌بندی انتشار۵ را بر اساس برآورد برنامه‌نویسان تعیین می‌کنند و برنامه‌نویسان فقط کارکردهای درخواست‌شده در استوری۶‌ها  را در تکرار جاری پیاده‌سازی می‌کنند.

2- انتشارهای کوچک(Small Releases)
سیستم طی چند ماه –کوتاه‌ترین زمان ممکن- و قبل از حل کل مسأله برای استفاده آماده و راه‌اندازی می‌شود. انتشارهای جدید به کرات در بازه‌های روزانه تا ماهانه ساخته و منتشر می‌شوند.

3- استعاره (Metaphor)
چارچوب سیستم با استفاده از استعاره یا مجموعه‌ای از استعاره‌ها که بین مشتری و برنامه‌نویسان به اشتراک گذاشته شده، تعریف می‌شود.

4- طراحی ساده(Simple Design)
در هر لحظه، طراحی همه آزمونها را پشت سر می‌گذارد، هر آن چه که برنامه‌نویسان نیاز دارند، در اختیارشان قرار می‌دهد و کد تکراری در آن وجود ندارد و حاوی کمترین تعداد کلاس و متد است. خلاصه این قاعده این است: "هر چیزی را یک بار و فقط یک بار بیان کنید."

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

6- بازسازی(Refactoring)
طراحی سیستم با تغییر طراحی موجود که همه آزمونها را پشت‌سر گذاشته، تکامل می‌یابد.

7- برنامه‌نویسی دو نفره(Pair Programming)
همه کد برنامه به صورت دو نفره با یک نمایشگر، صفحه کلید و موشواره -یک دستگاه- نوشته می‌شود.

8- یکپارچه‌سازی مداوم(Continuous Integration)
کد جدید حداکثر بعد از چند ساعت با سیستم موجود یکپارچه می‌شود. پس از آن، سیستم دوباره ساخته۹  و همه آزمونها اجرا می‌شود، در صورت نامؤفق بودن آزمایش، کد جدید رد می‌شود.

9- مالکیت جمعی(Collective Ownership)
در صورت امکان بهبود، هر برنامه‌نویس موظف است هر کدی را در هر جایی از سیستم و در هر زمانی اصلاح کرده و بهبود بخشد.

10- مشتری مقیم(On-Site Customer)
مشتری به صورت تمام وقت در کنار تیم تولید است.

11- کارهفتگی 40 ساعته(40-hour Weeks)
هیچ کس نمی‌تواند دو هفته متوالی اضافه‌کاری داشته باشد. حتی اضافه‌کاری غیرمتوالی بیش از حد، نشانه وجود مشکلی عمیق است که نیاز به شناسایی و رسیدگی دارد.

12- محیط کار باز(Open Workspace)
اعضای تیم در یک سالن بزرگ کار می‌کنند که دور تا دور آن دارای پارتیشن‌های کوچک است. برنامه‌نویسی دونفره بر روی کامیپوترهایی انجام می‌شود که در وسط سالن قرار دارند.

13-  فقط قواعد(Just Rules)
به عنوان بخشی از تیم XP متعهد به اجرای قواعد هستید. اما به یاد داشته باشید که اینها فقط یک سری قاعده‌اند. اعضای تیم می‌توانند قواعد را در هر زمانی تغییر دهند به شرطی که بر سر روش ارزیابی تغییرات ناشی از آنها توافق داشته باشند.


[۱] Iterations
[۲] Modular Programming
[۳] Spiral Model
[۴] Practices
[۵] Release
[۶] Story
[۷] Unit test
[۸] Functional tests
[۹] Build

گزیده:

Testing is not the point. The point is about responsibility. Kent Beck



:: موضوعات مرتبط: مقاله چابک Agile
دریافت ترجمه مقاله توسعه نرم افزار چابک: کسب و کار نوآوری
شنبه بیست و دوم مهر ۱۳۹۱ ساعت 21:45 | نویسنده: یوسف مهرداد | ( )
ضمن تشکر از دوست گرامی جناب آقای مهندس امیرجلیلی‌فرد، ترجمه مقاله  Agile Software Development: The Business of Innovation را می‌توانید از اینجا دریافت فرمایید.

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

 



:: موضوعات مرتبط: مقاله چابک Agile
توسعه نرم افزار چابک: کسب و کار نوآوری – بخش سوم و آخر
یکشنبه شانزدهم مهر ۱۳۹۱ ساعت 23:0 | نویسنده: یوسف مهرداد | ( )

مترجم: مهندس امیر جلیلی‌فرد
 فهرست
+ مسأله
+ پاسخ متدهای چابک
++ اصول بنیادی
+ بیانیه نرم‌افزار چابک
+ قواعد زاینده
+ اقدامات چابک
++ برنامه‌ریزی ویژگی و اولویت‌بندی پویا
++ بازخورد و تغیییر
++ تأکید بر کارتیمی

توسعه نرم افزار چابک: کسب و کار نوآوری – بخش سوم و آخر
اقدامات چابک(Agile Practices)

تیمی که حلقه بازخورد* با مشتریان و مدیرانش بیش از شش ماه باشد، چابک نیست. رویکردهای چابک برای اتخاذ تصمیمات بینابینی** و انطباق با اطلاعات جدید، تکرارهای کوتاهِ دو تا شش هفته‌ای را پیشنهاد می‌کنند .XP و Scrum دوره‌های مشخص‌تری -دو تا سه هفته در XP و سی روز در Scrum- دارند. در دیگر متدها مانند Crystal و ASD دوره‌های متنوع‌تری قابل تعریف است.

برنامه‌ریزی ویژگی و اولویت‌بندی پویا(Feature Planning and Dynamic Prioritization)
رویکردهای چابک، دوره‌های تکرار کوتاه‌مدت را با برنامه‌ریزی ویژگی و اولویت٬بندی پویا ترکیب می‌کنند. XP از کارتهای استوری (story)، ‏Scrum از واژه بک‌لاگ(backlog)،‏ ASD و FDD از ویژگی‌ (Feature) استفاده می‌کنند. نکته اصلی این است که رویکردهای چابک در وهله نخست ویژگی‌ها را به جای وظیفه‌ها(Task) برنامه‌ریزی می‌کنند، زیرا آن چه مشتری می‌فهمد، ویژگی است.
اولویت‌بندی پویا بدین معناست که مشتری در پایان هر تکرار می‌تواند ویژگی‌های دلخواه خود برای دوره بعدی را صرف‌نظر از ویژگی‌های برنامه‌ریزی‌شده قبلی و با افزودن ویژگی‌های جدید، دوباره اولویت‌بندی کند. 
در Scrum اولویت‌ها فقط می‌توانند در پایان هر تکرار تغییر کنند و تغییر آنها در طول تکرار مجاز نیست. DSDM از قواعد MoSCoW ‏–Must have، Should have، Could have، Would have- برای اولویت‌بندی ویژگی‌ها استفاده می‌کند. روش اولویت XP، دوگزینه‌ای  است: در این دوره هست یا نه؟ [مهم نیست در کدام یک از دوره‌های بعدی خواهد بود. فقط بودن در این دوره اهمیت دارد].

بازخورد و تغییر(Feedback and Change)
از آنجا که متدهای چابک برای محیط‌های پرتلاطم و پرتغییر کاربرد بیشتری دارند، اقدامات متنوعی را برای دریافت بازخورد دائمی از تصمیمات فنی، نیازمندی‌های مشتری و محدودیت‌های مدیریتی پیشنهاد می‌کنند.
XP  برنامه‌نویسی دو نفره را برای دریافت بازخورد پیشنهاد کرده و DSDM نمونه‌سازی(پروتوتایپ) زود به زود را پررنگ کرده است. Crystal و ASD  طرفدار بازنگری فرایند و تیم در پایان هر تکرار هستند. ASD و Scrum بازنگری پایان هر تکرار با گروه کارشناسی (گروه تمرکز ) مشتری را انجام می‌دهند.
اقدامات چابک به جای مقاومت در برابر تغییرات، تشویق به ایجاد آنها می‌کنند. در موقعیت‌های پرتلاطم کسب‌وکار، حد مجاز تغییرات در متدلوژِی باید متناسب با میزان تغییرات محیط باشد و نه مبتنی بر نگاه داخلی و میزان تغییرات قابل پذیرش در تیم. برای مثال تغییر اولویت‌بندی ویژگی‌ها و نیازمندی‌ها بدون نقض تغییرات، محدوده، زمان‌بندی و محدودیتهای کلان تعیین شده از سوی خریدار، بر اساس فضای تیم و شرکاء  مشخص می‌شود. 


تأکید بر کار گروهی
پیش هم بودن اعضای تیم [مشتریان، تیم توسعه و سایر ذینفعان] و شدت تعامل بین آنها از نشانه‌های متدهای چابک است. XP برنامه‌نویسی دو نفره را که سالها با نامهای متفاوتی وجود داشته، به کارگرفته است. Crystal، Scrum و ADS  طرفدار اقدامات مبتنی بر مشارکت زیاد از جمله تیمهای پیش‌هم و بدون مرزبندی هستند و  Lead Development نیز بر تعامل اعضای تیم تأکید دارد.
به‌کارگیری متدهای چابک نیازمند مشارکت زیاد مشتریان است. چنانچه مشتریان‌ اعم از نمایندگان واحدهای داخلی یا مدیران محصول واحد بازاریابی، برداشت درستی از مسیر محصول نداشته و بین الگو‌های ناشناخته سرگردان باشند، توسعه‌دهندگان چابک ناچارند از آنها پیروی کنند (و البته با تذکر و راهنمایی‌های موردی)  و شکی نیست که پیامد مشتریان ضعیف، سیستم‌های ضعیف خواهد بود.

سخن آخر:
در سال 1995،   Goldman،Nagel و Preiss نویسندگان کتاب  Agile Competitors and Virtual Organizations  تعریف زیر را برای چابکی پیشنهاد کرده‌اند:
چابکی عبارت است از پویایی، توجه به شرایط، پذیرش بی‌باکانه تغییرات و ترقی‌گرایی. چابکی درباره بهبود بهره‌وری، کاهش هزینه‌ها یا کوچک‌سازی کسب‌وکار برای گذر از طوفانهای ترسناک بازارهای رقابتی نیست. چابکی درباره موفقیت و پیروزی است: درباره موفقیت در عرصه‌‌های رقابتی نوظهور و پیروزی در کسب سود، سهم بازار و مشتریان در اوج طوفانهای بازارهای رقابتی است –هم‌اکنون این موارد، بسیاری از شرکتها را به هراس انداخته.
هر چند این کتاب درباره تولید نوشته شده، اما تعریف چابکی برای محیط توسعه نرم‎‌افزار کنونی، کاملاً صادق است. 
خلاصه این که چابکی درباره ایجاد و پاسخگویی به تغییرات است. آنچه که درباره متدهای چابک تازگی دارد، اقدامات به‌کارگرفته شده در آنها نیست، بلکه به رسمیت شناختن افراد به عنوان حرکت‌دهندگان اصلی پروژه به سوی موفقیت به همراه تأکید فراوان بر اثربخشی و قدرت مانور است. این امر  منجر به مجموعه‌ای از ارزشها و اصولی می‌شود که جهان‌بینی چابک را تشکیل می‌دهند.
توسعه نرم‌افزار چابک بیانگر دو عامل فشار بر کسب‌وکار و تکنولوژِی کنونی است: نیاز به «رویکردهای پویا همراه با نوآوری» و تمایل به «ایجاد محل‌کاری» که در کاریکاتورهای Dilbert *** وجود نداشته باشد.


----------------------------
*پسخورد یا بازخورد، اندازه‌گیری متغیرهای خروجی و استفاده از آنها در اعمال ورودی به سیستم است. اعمال ورودی، عملیات سیستم، اندازه‌گیری خروجی و  استفاده از آن در اعمال مجدد ورودی سیستم، حلقه‌ای را شکل می‌دهد که آن را حلقه پسخورد/بازخورد گویند.

** trade-off به معنای سبک‌وسنگین کردن و هم چنین معاوضه آمده است به عنوان مثال «انتخاب بین کوه رفتن یا خرید کردن در صبح روز جمعه این هفته».

*** www.Dilbert.com


گزیده:
عادت دستان ما را هوشمندتر  و هوش ما را بی‌دست‌وپاتر می‌سازد.



:: موضوعات مرتبط: مقاله چابک Agile
توسعه نرم افزار چابک: کسب و کار نوآوری - بخش دوم
جمعه هفتم مهر ۱۳۹۱ ساعت 16:23 | نویسنده: یوسف مهرداد | ( )

مترجم: مهندس امیر جلیلی‌فرد
 فهرست
+ مسأله
+ پاسخ متدهای چابک
++ اصول بنیادی
+ بیانیه نرم‌افزار چابک
+ قواعد زاینده

+ اقدامات چابک
++ برنامه‌ریزی ویژگی و اولویت‌بندی پویا
++ بازخورد و تغیییر
++ تأکید بر کارتیمی

توسعه نرم افزار چابک: کسب و کار نوآوری – بخش دوم
پاسخ متدهای چابک
متدهای چابک پاسخی به این انتظار بازار هستند. استراتژی متدهای چابک، کاهش هزینه تغییرات در طول پروژه است. برای مثال XP از تیم توسعه نرم­‌افزار می­‌خواهد:
-- اولین تحویل[1] را طی چند هفته با هدف کسب موفقیت زودهنگام  و بازخورد سریع  آماده کنید.
-- راه­‌حل­های ساده  ابداع کنید. در نتیجه، نیاز به تغییرات، کمتر و  اعمال آنها نیز ساده­‌تر خواهد بود.
-- کیفیت طراحی را مدام بهبود دهید و پیاده­‌سازی story بعدی را کم­‌هزینه­‌تر از فعلی کنید.
-- برای شناسایی زودتر و کم­‌هزینه­‌تر عیبها، مدام آزمایش[2] کنید.

کیفیت طراحی در توسعه نرم­‌افزار چابک اهمیت داشته و بر آن تاکید می‌شود. گاهی متدهای چابک با کدنویسی موردی(ad hoc) یا کدنویسی گاوچرانی(cowboy) اشتباه گرفته می­‌شوند.  دلیل این اشتباه این است که طراحی در این متدها نه به صورت یک‌باره و پیش‌هنگام[3] -خیلی زودتر از زمان پیاده‌سازی-، بلکه به تدریج و در بخشهای کوچک انجام می‌شود. 

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

اصول بنیادی
متدهای چابک بر دو مفهوم تاکید دارند:
-- درستی بی‌چون و چرای کدی که کار می­‌کند
-- اثربخشی[3] افرادی که با حسن نیت با یکدیگر کار می­‌کنند

کدی که کار می­‌کند به توسعه­‌دهندگان و حامیان مالی[4] نشان می­‌دهد  چه چیزی واقعاً در پیش رویشان قرار دارد. (به جای اینکه داشتن چیزی در آینده به آنها قول داده شده باشد). کدی که کار می­‌کند می­‌تواند ارسال، اصلاح  یا دور انداخته شود. اما هرچه که باشد، واقعی  و ملموس است.

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

 بیانیه نرم افزار چابک
 
برای رسمیت بخشیدن به ایده­‌ها، ما – Highsmith و Cockburn- در فوریه 2001 با 15 نفر دیگر که نمایندگان XP، Scrum، DSDM، ASD، Crystal، Feature Driven Development، Pragmatic Programming و  سایرینی که بر ضرورت تعریف متدهای جایگزینی برای توسعه نرم‌افزار توافق نظر داشتند با هدف امضای بیانیه توسعه نرم‌افزار چابک گرد هم آمدیم. ما نوشتیم:

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

 

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

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

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

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

 
قواعد زاینده(Generative Rules)
یکی از جنبه­‌های توسعه چابک که اغلب فراموش شده یا از نظر دور مانده، این است که:
سازمان­ها، سیستم­‌های انطباق­‌پذیرِ پیچیده هستند. سیستم انطباق­‌پذیر پیچیده، سیستمی است که در آن اجزای مستقل و غیرمتمرکز از طریق روشهای خودسازماندهی و تحت مجموعه­‌ای از قواعد ساده و زاینده، نتایج نو، ابداعی و فوری ایجاد می­‌کنند.

برای مثال، هدف از معرفی 12 اقدام(Practice) در XP این نبوده که قواعدی جامع و فراگیر تعریف شود که در هرموقعیت و شرایطی به کار گرفته شوند. بلکه هدف این است که وقتی تیمی این اقدامات را انجام می‌دهد، آنها قواعد زاینده­‌ای باشند که با هماهنگی و هارمونی عمل ‌می‌کنند.

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


[1]Delivery
[2] Test
[3] Effectiveness
[4] Sponser
[5] Up-front
[6] Situation

گزیده:
«امید غریزه‌ای است که تنها ذهن استدلالی و معقول بشر می‌تواند آن را از بین ببرد.»
گراهام گرین



:: موضوعات مرتبط: مقاله چابک Agile
توسعه نرم افزار چابک: کسب و کار نوآوری - بخش اول
یکشنبه دوم مهر ۱۳۹۱ ساعت 21:30 | نویسنده: یوسف مهرداد | ( )

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

مقدمه
مقاله Agile Software Development: The Business of Innovation نوشته Jim Highsmith و Alistair Cockburn دو تن از امضاءکنندگان بیانیه چابک(Agile Manifest) است. این مقاله در سپتامبر سال 2001 یعنی حدود هفت ماه پس از امضای بیانیه در مجله IEEE Computer چاپ شده است.

این مقاله شامل بخشهای زیر است:
+ مسأله
+ پاسخ متدهای چابک
++ اصول بنیادی
+ بیانیه نرم‌افزار چابک
+ قواعد زاینده
+ اقدامات چابک
++ برنامه‌ریزی ویژگی و اولویت‌بندی پویا
++ بازخورد و تغیییر
++ تأکید بر کارتیمی

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

رویکردهای چابک از جمله XP‏ ،Crystal،‏ Lean Development،‏ Scrum و‏ ASD از دریچه­ای به تغییر می­نگرند که نشانگر آشفتگی محیط کسب­وکار و تکنولوژی کنونی است. 

مسئله
به تازگی در تحقیقی که Michael Mah در QSM Associates بر روی بیش از 200 پروژه توسعه نرم افزار
انجام داده، گزارش داده است  محققان قادر به یافتن تقریباً نیمی از طرحهای[1] اولیه پروژه­ها برای مقایسه با یکدیگر نشدند. چرا ؟ زیرا هدف اصلی، اجرای پروژه مطابق با طرح اولیه نبوده و  به جای آن، راضی نگه­داشتن مشتری -در هنگام تحویل پروژه و نه در آغاز آن– اولویت پیدا کرده است.

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

پذیرش اعتبار نظریه "ضرایب متغیر هزینه­ Barry Boehm"مبنی بر اینکه  هزینه تغییرات در طول چرخه حیات پروژه ثابت نبوده و افزایش می­یابد، بدین معناست که پرسش اصلی، چگونگی مدیریت تغییرات ناخواسته در پروژه است و نه چگونگی جلوگیری از بروز آنها.

روش­های رایج فرض می­کنند فقط با تلاش بیشتر می­توان مجموعه کاملی از نیازمندی­ها را در اسرع وقت شناسایی و پیش‌بینی کرد و از این رو هزینه‌ها را با جلوگیری از ایجاد تغییرات کاهش داد. امروزه نپذیرفتن و انجام ندادن سریع  تغییرات به معنی بی توجهی به شرایط و موفقیت کسب­وکار است.

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

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


[1] Plan

گزیده:
لازم نيست آدم از كوهي بالا رود تا بفهمد بلند است.  پائولو كوئيلو
مرجع: اس.جی.



:: موضوعات مرتبط: چابک Agile، مقاله چابک Agile
آيا طراحی فنا شده است؟ (Is Design Dead)
سه شنبه پنجم تیر ۱۳۸۶ ساعت 21:44 | نویسنده: یوسف مهرداد | ( )
اين موضوع، عنوان مقاله‏ای از مارتين فاولر به سال 2004 است. مشغول بررسی مطلبی بودم که آن را مجدداً خواندم. در اصل اين مقاله همان طور که خود فاولر ذکر کرده، به بررسی نقدی که به روس اکس-پی وارد شده پرداخته است. هر چند که اين بررسی بسيار آموزنده و مفيد است، اما بخش اول آن که بررسی دو روش طراحی برنامه‏ريزی شده و طراحی تکاملی می‏پردازد، نکات ظريفی را بيان داشته که هر روز با آن مواجه هستيم و حتی هر يک از ما برای دوری از آن، روشهایی نيز به تجربه برای خود تبیین کرده‏ايم. به لحاظ اهميت اين نکات، بخش اول مقاله را به همان صورت در زير آورده و آدرس مقاله را نيز در ادامه ذکر کرده‏ام.

Planned and Evolutionary Design

For this paper I'm going to describe two styles how design is done in software development. Perhaps the most common is evolutionary design. Essentially evolutionary design means that the design of the system grows as the system is implemented. Design is part of the programming processes and as the program evolves the design changes.

In its common usage, evolutionary design is a disaster. The design ends up being the aggregation of a bunch of ad-hoc tactical decisions, each of which makes the code harder to alter. In many ways you might argue this is no design, certainly it usually leads to a poor design. As Kent puts it, design is there to enable you to keep changing the software easily in the long term. As design deteriorates, so does your ability to make changes effectively. You have the state of software entropy, over time the design gets worse and worse. Not only does this make the software harder to change, it also makes bugs both easier to breed and harder to find and safely kill. This is the "code and fix" nightmare, where the bugs become exponentially more expensive to fix as the project goes on.

Planned Design is a counter to this, and contains a notion born from other branches of engineering. If you want to build a doghouse, you can just get some wood together and get a rough shape. However if you want to build a skyscraper, you can't work that way - it'll just collapse before you even get half way up. So you begin with engineering drawings, done in an engineering office like the one my wife works at in downtown Boston. As she does the design she figures out all the issues, partly by mathematical analysis, but mostly by using building codes. Building codes are rules about how you design structures based on experience of what works (and some underlying math). Once the design is done, then her engineering company can hand the design off to another company that builds it.

Planned design in software should work the same way. Designers think out the big issues in advance. They don't need to write code because they aren't building the software, they are designing it. So they can use a design technique like the UML that gets away from some of the details of programming and allows the designers to work at a more abstract level. Once the design is done they can hand it off to a separate group (or even a separate company) to build. Since the designers are thinking on a larger scale, they can avoid the series of tactical decisions that lead to software entropy. The programmers can follow the direction of the design and, providing they follow the design, have a well built system

Now the planned design approach has been around since the 70s, and lots of people have used it. It is better in many ways than code and fix evolutionary design. But it has some faults. The first fault is that it's impossible to think through all the issues that you need to deal with when you are programming. So it's inevitable that when programming you will find things that question the design. However if the designers are done, moved onto another project, what happens? The programmers start coding around the design and entropy sets in. Even if the designer isn't gone, it takes time to sort out the design issues, change the drawings, and then alter the code. There's usually a quicker fix and time pressure. Hence entropy (again).

Furthermore there's often a cultural problem. Designers are made designers due to skill and experience, but they are so busy working on designs they don't get much time to code any more. However the tools and materials of software development change at a rapid rate. When you no longer code not just can you miss out on changes that occur with this technological flux, you also lose the respect of those who do code.

This tension between builders and designers happens in building too, but it's more intense in software. It's intense because there is a key difference. In building there is a clearer division in skills between those who design and those who build, but in software that's less the case. Any programmer working in high design environments needs to be very skilled. Skilled enough to question the designer's designs, especially when the designer is less knowledgeable about the day to day realities of the development platform.

Now these issues could be fixed. Maybe we can deal with the human tension. Maybe we can get designers skillful enough to deal with most issues and have a process disciplined enough to change the drawings. There's still another problem: changing requirements. Changing requirements are the number one big issue that causes headaches in software projects that I run into.

One way to deal with changing requirements is to build flexibility into the design so that you can easily change it as the requirements change. However this requires insight into what kind of changes you expect. A design can be planned to deal with areas of volatility, but while that will help for foreseen requirements changes, it won't help (and can hurt) for unforeseen changes. So you have to understand the requirements well enough to separate the volatile areas, and my observation is that this is very hard.

Now some of these requirements problems are due to not understanding requirements clearly enough. So a lot of people focus on requirements engineering processes to get better requirements in the hope that this will prevent the need to change the design later on. But even this direction is one that may not lead to a cure. Many unforeseen requirements changes occur due to changes in the business. Those can't be prevented, however careful your requirements engineering process.

So all this makes planned design sound impossible. Certainly they are big challenges. But I'm not inclined to claim that planned design is worse than evolutionary design as it is most commonly practiced in a "code and fix" manner. Indeed I prefer planned design to "code and fix". However I'm aware of the problems of planned design and am seeking a new direction.

آدرس مقاله:

http://martinfowler.com/articles/designDead.html

گزیده:

She said that she usually cried at least once each day not because she was sad but because the world was so beautiful and life was so short.
Brian Andreas - Reference: Booch Blog



:: موضوعات مرتبط: مقاله چابک Agile