اشاره :
در ادامه مبحث Agile Software Development يا برنامهنويسي چابكانه كه در شماره قبل (شماره73) به آن اشاره كوتاهي شد، در اين يادداشت مبحث اكسپي كه يكي از روشهاي قدرتمند اين نوع برنامهنويسي است، مورد بررسي قرار ميگيرد. اشتباه نكنيد! منظور از اكسپي ويندوز اكسپي نيست.
در ادامه مبحث Agile Software Development يا برنامهنويسي چابكانه كه در شماره قبل (شماره73) به آن اشاره كوتاهي شد، در اين يادداشت مبحث اكسپي كه يكي از روشهاي قدرتمند اين نوع برنامهنويسي است، مورد بررسي قرار ميگيرد. اشتباه نكنيد! منظور از اكسپي ويندوز اكسپي نيست. اكسپي مخفف Extreme Programming يا برنامهنويسي سريع است كه مانند Scrum روشي هوشمند در توليد نرمافزار است. اكسپي شامل يك سري تمرينات ساده و اصول مرتبط به هم است كه وقتي آنها را اجرا و رعايت كنيم، روش اكسپي را انجام دادهايم. شكل 1 اين اصول را نشان ميدهد.
اعضاي تيم در پروژه
در روش اكسپي مشتري نرمافزار بايد جزئي از تيم اجرايي پروژه باشد و برنامهنويس و مشتري بايد با هم كار كنند و از مشكلات و نيازهاي هم مطلع باشند. در اكسپي مشتري به كسي يا گروهي گفته ميشود كه نيازهاي برنامه و اولويتهاي آن نيازها را خوب ميداند. در اين روش مشتري و برنامهنويسان بايد در يك اتاق كار كنند (البته تبصرهاي نيز در اين قسمت وجود دارد كه ميگويد مشتري ميتواند تا حداكثر پنجاه متر از برنامهنويسان دور باشد).
داستانهاي كاربران يا User Stories
براي اينكه بتوانيم براي پروژهاي برنامهريزي كنيم، بايد از نيازهاي كاربران مطلع باشيم. البته نيازي نيست كه همه چيز را از همان اول بدانيم و از جزئيات نيازهاي كاربران اطلاعاتي كسب كنيم؛ زيرا آن جزئيات به احتمال زياد در طول پروژه تغيير پيدا ميكنند. در اكسپي بايد در مورد هر نياز كاربر يا Requirement مقداري با مشتري صحبت كنيم و از مشتري بخواهيم چند كلمهاي در مورد هر يك از نيازها روي فيش يا كاغذهاي يادداشت چسبدار (Post-it) بنويسد. همزمان برنامهنويس نيز ميتواند برداشت خود را از آن موضوع روي كاغذي مشابه بنويسد و هر دو برگه را روي ديوار اتاق بچسبانند. اين برگهها ميتوانند باعث يادآوري اعضاي تيم از نيازهاي اوليه و همچنين سهولت در تخمين زمان و هزينه پروژه شوند.
دورههاي زماني كوتاه
پروژه اكسپي هر دوهفته يك بار يك قسمت از نرمافزار كه كارايي بالايي دارد و قسمتي از نيازهاي اوليه مشتري بوده است را تحويل ميدهد و از مشتري در مورد آن قسمت نظرخواهي ميشود و اگر نياز بود، نظر مشتري سريعاً اعمال ميگردد. به اين دوره دو هفتهاي Iteration نيز ميگويند. هر Iteration قسمتي از نرمافزار را با توجه به User Storiesها توليد ميكند كه چند نياز كاربر را برآورده ميسازد. وقتي يك Iteration شروع شد، ديگر مشتري حق عوض كردن نيازهايي كه بر سر آنها توافق كرده است را ندارد.
تست هاي قبول شده
جزئيات نيازهاي كاربران كه در User Stories وجود دارد، در قالب Acceptance Tests) AT) كه مشتري تعيين ميكند برداشت ميشود. اين تست همزمان با Iteration ميتواند انجام گردد و در قالب زبانهاي اسكريپتي نوشته ميشود تا بتوان آن را چندين بار تكرار كرد. هدف اصلي ATها تست كردن برنامه و حصول اطمينان از اين است كه آن قسمت از برنامه نوشته ميشود كه صددرصد نياز مشتري را برآورده ميسازد.
اين تستها هر وقت كه قسمت جديدي به برنامه اضافه ميشود و برنامه كامپايل ميگردد، دوباره اجرا ميشوند و اگر اشكالي داشته باشند، پيغام خطا ميدهند. در نتيجه وقتي سيستم به اتمام رسيد، ميتوان مطمئن بود كه سيستم بدون خطا است.
به علاوه، در اكسپي تمامي كدها به روش Test-Driven Development توليد ميشوند. يعني قبل از نوشتن هر قطعه كد، بايد تست آن توليد شود و كاري كرد كه كد در پاس كردن Unit Test ناتوان باشد. بدينمعني كه اول يك قطعه كد مثلاً براي افزودن دانشجوي جديد به فهرست دانشجويان مينويسيم، ولي چون در آن كد قطعهاي از كد كلاسي كه insert را انجام ميدهد وجود ندارد، برنامه اشكال ميگيرد. حال كار گروه اكسپي اين است كه برنامه را طوري درست كنند كه اين تست پاس شود و به قدري روي برنامه كار كنند تا برنامه دلخواه به دست آيد.
برنامه نويسي دوتايي (Pair Programming)
معمولاً در اكسپي برنامهنويسان در گروههاي دوتايي قرار ميگيرند و وظيفه تكميل قسمتي از برنامه را به عهده ميگيرند. هر دو برنامهنويس در مورد هر كدام از نيازهاي كاربران با هم بحث ميكنند و قدم به قدم كلاسهاي برنامه را آماده ميكنند. بدين ترتيب كه در ابتدا كلاسي را به صورت خيلي ابتدايي و بدون هيچ طراحي اوليه به وجود ميآورند و اين كلاس را امتحان مي كنند و در صورتي كه اين كلاس فاقد هر گونه اشكال باشد، كد اصلي برنامه را بر اساس اين امتحان كلاس مينويسند. وقتي يكي از برنامهنويسان مشغول نوشتن قسمتي از برنامه است، برنامهنويس ديگر وظيفه كنترل صحت اين كدها را عهدهدار است و در صورت مشاهده هر گونه اشكال، نويسنده كد را مطلع مي كند.
تيم همه كاره
در اكسپي همه اعضاي تيم همه كار ميكنند. همه روي GUI، پايگاه اطلاعات و ... كار مي كنند. اين بدين منظور نيست كه اعضاي تيم نميتوانند در كار مشخصي حرفهاي باشند، بلكه همكاري در تمامي بخشهاي پروژه باعث خواهد شد كه تجربه جديدي كسب كنند. اين تيم حق دارد كدهايي كه ديگران نوشتهاند را بارها چك كند، اشكالات آن را مشخص نمايد و اگر اصلاحي دارد، آن را متذكر شود.
محيط كاري باز
تيم بايد در مكاني باز كار كند. در اتاق پروژه بايد ميزهايي فراهم شوند كه روي آن چند كامپيوتر قرار دارد. در جلوي هر كامپيوتر هم بايد دو صندلي براي اعضاي Pair تعبيه شود. ديوارهاي اتاق بايد از نقشهها و طرحهاي نرمافزاري به همراه UML مملو باشد. صداي اتاقي كه در آن كار انجام ميشود، معمولاً پر از زمزمههاي اعضاي تيم است. شايد بگوييد كه در محيطي پر زمزمه كه نميشود كار كرد. در جواب اين سؤال بايد گفت طبق تحقيقاتي كه در دانشگاه ميشيگان انجام شده است، راندمان كار در محيطهاي كارياي كه در آن زمزمه باشد و سكوت محض نباشد، به دو برابر حالت عادي ميرسد.
طراحي ساده نرمافزار
در اكسپي تيم سعي مي كند طراحي نرمافزار را تا حد ممكن ساده انجام دهد. اعضاي تيم تمام انرژي خود را فقط روي نيازهاي فعلي كاربران ميگذارند و نگران نيازهاي جديدي كه ممكن است در آينده مطرح شوند، نيستند. در ابتداي كار تمركز برنامهنويسان تيم به انتخاب پايگاه اطلاعاتي، انتخاب معماري نرمافزار و ... نيست و تمام سعي تيم اين است كه قسمتي از نرمافزار را به ساده ترين راه ممكن تحويل مشتري دهد و وقتي واقعاً به تغييرات نياز پيدا شد، ميتوانند تغييرات لازم را اعمال نمايند.
در اكسپي اعضاي گروه ميتوانند روند تكميلي توليد نرمافزار را مشاهده كنند و در جريان كار قرار گيرند. اكسپي روش مناسبي براي پروژههاي كوچك است كه اعضاي تيم از دو تا دوازده برنامهنويس تشكيل شده است؛ هرچند اصولاً اكسپي هيچ رويه خاص و مراحل پيوستهاي را مشخص نكرده است. ميتوان گفت كه اكسپي چهار مرحله اصلي دارد:
●مرحله زمانبندي پروژه
●طراحي ابتدايي
●نوشتن كدهاي برنامه
●امتحان كدهاي نوشته شده
طبق تحقيقات انجام شده مشخص شده است كه اكسپي تنها در پروژههاي كوچك نرمافزاري ميتواند مفيد باشد و در پروژههاي بزرگ، اصلاً موفق نخواهد بود. شايد به اين دليل كه در اين روش مستندات چنداني براي نرمافزار وجود ندارد و چند نفر بيشتر نميتوانند در مورد قسمتي از نرمافزار اطلاعاتي داشته باشند. همچنين نرمافزار توليد شده با اين روش هيچگونه طراحي سازمان يافتهاي ندارد و اين امر ميتواند براي مراحل پس از نصب، يعني تعميرات و نگهداري سيستم، باعث بروز مشكلاتي گردد.
از جمله مزاياي اكسپي اين است كه از آن جايي كه يك برنامهنويس به صورت مستقيم كدهاي برنامه را چك ميكند، كيفيت نرمافزارهاي توليدي بالاتر ميرود. همچنين از آن جايي كه دو برنامهنويس با هم كار ميكنند، آموزش كمتري نياز است و در نتيجه هزينه توليد نرمافزار پايين ميآيد، اما اين روش مشكلات خاصي نيز دارد. مثلاً تصور كنيد اگر در يك گروه يك برنامهنويس تمايلي براي كار با ديگر برنامهنويسان نداشته باشد، چه اتفاقي خواهد افتاد؟!
متخصصان نرمافزار پس از تحقيقات زياد روي اين روش به اين نتيجه رسيدهاند كه وقتي برنامهنويسي در كدهاي برنامه به دنبال اشكال ميگردد، حداكثر ميتواند پانزده درصد از اشكالات برنامه را پيدا كند، ولي در روشهايي مانند اكسپي كه دو برنامهنويس با هم كار ميكنند و يكي از اين برنامهنويسان كدها را چك ميكند، تا چهل درصد از اشكالات ساختاري برنامه مشخص ميشود.
هیچ نظری موجود نیست:
ارسال یک نظر