تجربه توسعه نرم افزار همراه با تست

[font="Tahoma"][rtl]

سلام. از بین دوستان کسی هست که تجربه پیاده سازی یک پروژه واقعی، همراه با نوشتن unit test داشته باشه؟

تست ها با phpunit و یا ترجیحا codeception نوشته شده باشند

اگر از TDD هم استفاده کرده باشه که چه بهتر

لطفا اگر کسی یک نرم افزار واقعی ـ و نه برنامه های کوچک که جنبه یادگیری و مثال داره ـ با استفاده از این تکنیک ها پیاده کرده اینجا اعلام کنه که من ازش سوالاتم رو بپرسم

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

اگر یک سایت یا یک tutorial خوب هم سراغ دارید که این روش هارو با استفاده از Yii یاد میده و باهاش یک نرم افزار هم توسعه میده لطفا به من معرفی کنید

ممنون

[/rtl][/font]

[rtl]سلام،

من تجربه نوشتن یک اپلیکیشن بزرگ با coverage 96% در سیمفونی، 86% در فلکن، و بالای 40% در Yii دارم. کار من چون back-end هست بیشترین کمک رو توی TDD می تونم بهتون بکنم، ولی تست اپلیکیشن فلکن رو کاملا با Codeception نوشتم.

اگر سؤالی دارید خوشحال می شم بتونم جواب بدم.

ممنون.[/rtl]

[font="Tahoma"][rtl]

سلام پرهام عزیز

ممنون از پاسخ ات

من قبل از هرچیز یک سوال بپرسم، راستش کمی درصد هایی که دادی نگرانم کرد :)

علت اینکه coverage پروژه Yii بطور چشمگیری کمتر از سایرین هست مشکل ساختاری در تست پذیری برنامه های تحت Yii هست یا که اون پروژه خاص در همون حد تست لازم داشته؟

بطور خاص راجع به Yii2 صحبت میکنم.

ضمنا هدفم نوشتن تست برای برنامه ای هست که از تعداد زیادی ماژول و کامپوننت ها و behavior های متعدد ساخته شده و مشخصا بسیار با دیتابیس در ارتباط هست

[/rtl][/font]

اون پروژه با Yii 1.X نوشته شده بود. دلیل پایین بودن coverage توی اون پروژه این بود که همه تست نمی نوشتن، و بله، structureِ خود فریمورک هم خیلی جاها دست و پای ما رو می بست.

Yii 2.X وضعش خیلی بهتره، به شرط اینکه از Dependency Injection Container همیشه استفاده کرده باشید. مشکلاتی که احتمالا بهشون بر بخورید اینها هستن:

  1. تستهای شما چون fixture لود می کنن و query می زنن، سرعت اجرای تستهاتون میاد پایین. توی فریمورکهایی مثل Symfony میشه لایه دیتابیس رو کلا mock (شبیهسازی) کرد، اما توی Yii همچین امکانی نیست.

  2. اگر حواستون نباشه، مدلهاتون خیلی بزرگ میشن، و تست کردن و تغییرشون هم سختتر میشه. این به خاطر Active Record هست که ارتباط با دیتابیس رو با تبدیل دیتابیس به اشیا با هم مخلوط میکنه. خیلی حواستون باشه که تا میتونید از service oriented architecture، کامپوننتها، و همون behavior هایی که خودتون اشاره کردید استفاده کنید.

همین که شما میخواید راجع به تست نوشتن اطلاعات بیشتر داشته باشید 60% راهه، که شما اومدید! بقیش دیگه اینه که 1( تیمتون رو هم تشویق کنید که TDD کار کنن، و 2( تا می تونید همه چیز رو mock کنید، تا مشکلات designِ ساختاری برنامتون زودتر خودشو نشون بده.

[/rtl][/font]

[font="Tahoma"][rtl]

ممنون از توضیحاتت

واقعیتش در برنامه مورد بحث تا حد زیادی از service locator استفاده شده. منتها تقریبا هیچ استفاده مستقیمی از dependency injection نکردیم.

در منابع خارجی زیاد دیده بودم از DI نام برده بشه و الان هم که شما هم اشاره کردی مقاله معروف مارتین فاولر رو در این زمینه خوندم و تازه فهمیدم قضیه چیه :)

نظر شما راجع به تست کنترلر ها و ویو ها چی هست؟ قائل به استفاده از unit test برای کنترلر ها هم هستید یا integration و functional تست رو برای اونها مناسب تر میدونی؟ خودم که هنوز تجربه عملی اش رو ندارم منتها گویا بحث های زیادی در این زمینه بین توسعه دهنده ها هست

اون ۳ تا پروژه که اشاره کردید سیاسیت تست اش درباره کنترلر ها چی بوده؟

پ.ن: دوستان دیگری هم اگر تجربه نوشتن تست و TDD با Yii دارند اگر در بحث مشارکت کنند بسیار خوشحال میشیم

[/rtl][/font]

[rtl]

ما با Yii که کار می کردیم مجبور بودیم functional test رو بیشتر بنویسیم. متاسفانه Yii کلا اجازه نمیده که شما controllerها رو unit test بکنید. توی Symfony این قضیه راحتتره چون controllerها هم کلاسهای عادی هستن و میشه کاملا به اونها عین یه کلاسی نگاه کرد که یه Response برمیگردونه.

اون پروژه فلکن هم بیشترش یه API بود که میشد با Guyهای Codeception خیلی راحت بهش درخواست زد. قسمتهای UI که بیشتر روی controllerها تمرکز داشتن هم همون قسمتهایی هستن که باعث شدن coverage 100% نباشه، وگرنه back-end برنامه coverageِ نزدیک 100% داره.

[/rtl]

[size="2"][font=Tahoma][rtl][/font][/size][size="2"][font=Tahoma]سلام دوستان[/font][/size][size="2"][font=Tahoma]راستش ما هم مدتی هست میخواهیم برای پروژه هامون تست بنویسیم. و من طی تلاش هایی که تا الآن کردم موفق شدم یک چیزهایی بنویسم. مثلا برای یکی از مدل های ساده پروژه یه چند تا تست مثل ایجاد و تغییر وضعیت و حذف نوشتم. فقط از اونجایی که قبلا این کار رو نکردم و تجربه ای درباره اش ندارم ذهنتیم راجع به تست کامل نیست. مثلا نمیدونم سناریو های تست رو بر چه اساسی تعریف کنم و همینجوری تست حذف و اضافه نوشتم آیا درست نوشتم؟ یا نه؟ یا چه تست های دیگه ای برای این مدلم میتونستم بنویسم؟[/font][/size][size="2"][font=Tahoma]

[/font][/size][font="Tahoma"][size="2"][size="2"]سوال دیگرم درباره fixture ها هست! که این ها رو بر چه اساسی ایجاد کنم؟ آیا از faker استفاده کنم بهتر هست؟[/size][size="2"]گویا این fixture هر بار که اضافه میشوند جای اون دیتای قبلی ریخته میشن و این یه جاهایی مشکل میشه! مثلا من یه جایی کانتر متن رو میآوردم بالا بعد این فیکسچر ریستش میکرد بعد تو یه تست دیگه این کانتر رو کم میکرد بعد دیتابیس میترکید چون unsigned بود و نمیتونست منفی بگیره![/size] [/size][size=2]خلاصه هرچی توی این زمینه بتونید بیشتر راهنمایی ام کنید ممنون میشم [/size][size="2"][/rtl][/size][/font]

مرسی از راهنمایی خوبتون . درسته تست در مرحله اموزش ساخت برنامه اندروید با کامپیوتر یکی از مراحل مهمه