توسعه آزمایش محور روشی نو در تولید و مهندسی نرم افزار
s: تجربیات | تخصصی | نرم افزار برنامه بدون خطا مثل آدم بدون عیبه که پیدا کردنش محاله حتی حرفهایترین برنامه نویسان هم مصون از خطا نیستند چون بررسی همه حالات ممکن در یک برنامه جدید میسر نیست و تا برنامه کار نکند و در دنیای واقعی قرار نگیرد، خطا خود را نشان نمیدهد. از طرفی تغییرات در دنیای نرم افزار بسیار هزینه بر و باعث خطاهای مستمر بعدی هستند. فرض کنید شما قسمتی از یک برنامه را نوشته و به مشتری تحویل دادهاید و عیبهای اصلی آن نیز برطرف شده است. قسمت دوم کار را که شروع میکنید مجبور میشوید قسمتی از بانک اطلاعاتی بخش اول را تغییر دهید. مطمئنا برای این تغییر قسمتی از کد آن قسمت را هم تغییر خواهید داد. با همین تغییر کوچک، ممکن است کل برنامه دچار اشکال شود. در هر صورت، نیاز به تست و آزمایش برنامهها روز بروز بیشتر محسوس میشود بخصوص در روشهای سریع تولید نرم افزار که وقت کافی برای تحلیل پروژه نداریم مانند روش اسکرام این نیاز ملموس تر است . ابزارها و کتابخانههای مختلفی برای این منظور بوجود آمده و توسعه یافتهاند. که از معروفترین آنها میتوان به JUnit برای جاوا و NUnit برای زبانهای دات نت اشاره کرد . اما علاوه بر این ابزار و کتابخانه ها، یک متدولوژی در تولید نرم افزار داریم به نام TDD که مخفف « برنامه نویسی آزمایش محور » است. این روش که برای خودم به عنوان یک علاقهمند به مباحث مهندسی نرم افزار در ابتدا کمی عجیب مینمود، جزء روشهای رو به گسترش و در حال رواج تولید نرم افزار است. مهم ترین اصل این روش تولید نرم افزار این است که " اول تست را بنویس بعد کدی بنویس که آنرا از سر بگذراند " به صورت خلاصه مراحل کار در این متدولوژی بدین شرح است : 1- نوشتن تست : قبل از نوشتن هر قطعه کدی، ابتدا کد لازم برای تست آن قسمت نوشته میشود. (البته با این فرض که نیازمندیهای نرم افزار شناسایی و تحلیل شدهاند). هنگام نوشتن این تست، حواسمان به تمام ورودیها، خطاها و خروجیها خواهد بود . 2- اجرای تست : در اولین بار، با اجرای تست (توسط ابزارهای مربوطه) به خطایی بر خواهیم خورد مبنی بر عدم وجود کد که طبیعیست . 3- نوشتن کد : در این مرحله، کدنویسی میکنیم و چون برای هر قسمت، تست آن نوشته شده است تا زمانی به کد نویسی را ادامه میدهیم که اجرای تست، خطایی به همراه نداشته باشد . 4- بهینه سازی کد : بعد از اینکه کد نوشته شده، عاری از خطا شد، میتوانیم آنرا بهینه سازی کنیم. (مثلاً قسمتهایی را با تابع یا کلاس بنویسیم) تا زمانی که تغییرات داده شده خطایی را گزارش نمیکنند، میتوانیم به کارمان ادامه دهیم . البته اگر وقت کم آوردیم ، این مرحله را کلا بیخیال می شویم. 5- تحویل کد و شروع مجدد چرخه : در این مرحله میتوانیم کد را به مشتری تحویل دهیم و برای بقیه قسمتها مجدد همین فرآیند را از سر بگیریم . یکی از مهمترین مزایای این روش، هزینه بسیار پائین تغییرات در برنامه است. چون با هر تغییر میتوان مجدد تمام تستها را به صورت خودکار اجرا کرد و خطاهای احتمالی را همان ابتدای کار شناسایی و رفع کرد . هر چند اکثر ما معمولاً تست یا آزمایش حرفهای را به « شاید وقتی دیگر » منتقل میکنیم و ضربههایش را هم معمولا نوش جان میکنیم اما اگر از متدولوژی فوق استفاده کنیم مجبور به انجام این فاز مهم از تولید نرم افزار خواهیم شد . برای طراحان وبی که از پی اچ پی و مدلهای شی گرای آن استفاده میکنند SimpleTest و یا PHPUnit را برای اتوماسیون آزمایش و تست نرم افزار توصیه میکنم .