- عنوان کتاب: Test-Driven Development with Python Obey the Testing Goat, 3rd Edition
- نویسنده: Harry J.W. Percival
- حوزه: توسعه آزمون محور
- سال انتشار: 2025
- تعداد صفحه: 713
- زبان اصلی: انگلیسی
- نوع فایل: pdf
- حجم فایل: 13.5 مگابایت
این کتاب تلاش من برای به اشتراک گذاشتن سفری بود که از «هک کردن» تا «مهندسی نرمافزار» طی کردم. این کتاب عمدتاً در مورد تست است، اما همانطور که به زودی خواهید دید، چیزهای بسیار بیشتری در آن وجود دارد. میخواهم از شما برای خواندن آن تشکر کنم. اگر یک نسخه از آن را خریداری کردهاید، بسیار سپاسگزارم. اگر نسخه آنلاین رایگان آن را میخوانید، همچنان سپاسگزارم که تصمیم گرفتهاید وقت خود را صرف آن کنید. چه کسی میداند؛ شاید وقتی به پایان آن رسیدید، تصمیم بگیرید که خرید یک نسخه فیزیکی برای خود یا دوستتان به اندازه کافی خوب است. اگر نظر، سوال یا پیشنهادی دارید، دوست دارم از شما بشنوم. میتوانید مستقیماً از طریق obeythetestinggoat@gmail.com یا در Mastodon @hjwp با من تماس بگیرید. همچنین میتوانید وبسایت و وبلاگ من را بررسی کنید. امیدوارم از خواندن این کتاب به همان اندازه که من از نوشتن آن لذت بردم، لذت ببرید. چرا کتابی در مورد توسعه مبتنی بر تست نوشتم؟ میشنوم که میپرسید: «شما چه کسی هستید، چرا این کتاب را نوشتهاید و چرا باید آن را بخوانم؟» من در اوایل دوران حرفهایام به اندازه کافی خوششانس بودم که با گروهی از طرفداران پروپاقرص توسعه مبتنی بر تست (TDD) آشنا شدم و این موضوع چنان تأثیر بزرگی بر برنامهنویسی من گذاشت که بیصبرانه منتظر بودم آن را با همه به اشتراک بگذارم. میتوان گفت که من شور و شوق یک تازهوارد را داشتم و تجربه یادگیری هنوز برایم یک خاطره جدید بود، بنابراین همین موضوع منجر به انتشار اولین نسخه در سال ۲۰۱۴ شد. وقتی برای اولین بار پایتون را یاد گرفتم (از کتاب عالی «شیرجه در پایتون» نوشته مارک پیلگریم)، با مفهوم TDD آشنا شدم و با خودم فکر کردم: «بله. قطعاً میتوانم حس آن را ببینم». شاید شما هم وقتی برای اولین بار درباره TDD شنیدید، واکنش مشابهی داشتید؟ به نظر میرسید که یک رویکرد واقعاً معقول، یک عادت واقعاً خوب برای انجام دادن باشد – مثل نخ دندان کشیدن منظم. سپس اولین پروژه بزرگ من از راه رسید و میتوانید حدس بزنید چه اتفاقی افتاد – یک مشتری وجود داشت، مهلتهایی وجود داشت، کارهای زیادی برای انجام دادن وجود داشت و هرگونه نیت خوبی در مورد TDD کاملاً از بین رفت. و در واقع، همه چیز خوب بود. من خوب بودم. در ابتدا. اولش فکر میکردم واقعاً به TDD نیاز ندارم چون وبسایت کوچک بود و میتوانستم به راحتی با بررسی دستی آن، عملکردش را آزمایش کنم. روی این لینک اینجا کلیک کنید، آن آیتم کشویی را آنجا انتخاب کنید، و این اتفاق باید میافتاد. آسان. کل این ماجرای «نوشتن تست» به نظر میرسید که سالها طول بکشد. و علاوه بر این، من خودم را، از اوج سه هفته تجربه کدنویسی بزرگسالانهام، یک برنامهنویس خیلی خوب تصور میکردم. میتوانستم از پسش بربیایم. آسان. سپس الهه ترسناک پیچیدگی از راه رسید. او خیلی زود محدودیتهای تجربهام را به من نشان داد. پروژه بزرگ شد. بخشهایی از سیستم شروع به وابستگی به بخشهای دیگر کرد. من تمام تلاشم را کردم تا از اصول خوبی مانند DRY (تکرار نکنید) پیروی کنم، اما این فقط به یک قلمرو بسیار خطرناک منجر شد. خیلی زود، من با وراثت چندگانه بازی میکردم. سلسله مراتب کلاسها هشت سطح عمق دارد. دستورات eval. از ایجاد تغییرات در کدم میترسیدم. دیگر مطمئن نبودم چه چیزی به چه چیزی وابسته است و اگر این کد را اینجا تغییر دهم چه اتفاقی ممکن است بیفتد… خدای من، فکر میکنم آن بخش آنجا از آن ارث میبرد… نه، ارث نمیبرد؛ بازنویسی شده است. اوه، اما بستگی به آن متغیر کلاس دارد. خب، تا زمانی که بازنویسی را بازنویسی کنم، باید خوب باشد. فقط بررسی میکنم – اما بررسی خیلی سختتر میشد. حالا بخشهای زیادی برای سایت وجود داشت و کلیک کردن روی همه آنها به صورت دستی داشت غیرعملی میشد. بهتر بود به همین بسنده کنم. بازنویسی را فراموش کنید. فقط به آن بسنده کنید. خیلی زود با انبوهی از کد زشت و زننده مواجه شدم. توسعه جدید دردناک شد. مدت کوتاهی پس از این، به اندازه کافی خوش شانس بودم که در شرکتی به نام Resolver Systems (که اکنون PythonAnywhere نام دارد) شغلی پیدا کنم، جایی که برنامهنویسی افراطی (XP) هنجار بود. افراد آنجا من را با TDD دقیق آشنا کردند. اگرچه تجربه قبلی من مطمئناً ذهن من را به مزایای احتمالی تست خودکار باز کرده بود، اما هنوز در هر مرحله تعلل میکردم. «منظورم این است که تست کردن به طور کلی ممکن است ایده خوبی باشد، اما واقعاً؟ همه این تستها؟ بعضی از آنها به نظر اتلاف وقت میآیند… چی؟ تستهای عملکردی و همچنین تستهای واحد؟ بیخیال، این زیادهروی است! و این تست TDD/تغییر حداقل کد/چرخه تست؟ این فقط احمقانه است! ما به همه این مراحل کوچک نیازی نداریم! بیخیال – میتوانیم ببینیم جواب درست چیست؛ چرا فقط به آخر نمیرویم؟»
This book has been my attempt to share with the world the journey I took from “hacking” to “software engineering”. It’s mainly about testing, but there’s a lot more to it, as you’ll soon see. I want to thank you for reading it. If you bought a copy, then I’m very grateful. If you’re reading the free online version, then I’m still grateful that you’ve decided it’s worth spending your time on. Who knows; perhaps once you get to the end, you’ll decide it’s good enough to buy a physical copy for yourself or a friend. If you have any comments, questions, or suggestions, I’d love to hear from you. You can reach me directly via obeythetestinggoat@gmail.com, or on Mastodon @hjwp. You can also check out the website and my blog. I hope you’ll enjoy reading this book as much as I enjoyed writing it. Why I Wrote a Book About Test-Driven Development “Who are you, why have you written this book, and why should I read it?” I hear you ask. I was lucky enough early on in my career to fall in with a bunch of test-driven development (TDD) fanatics, and it made such a big impact on my programming that I was burning to share it with everyone. You might say I had the enthusiasm of a recent convert, and the learning experience was still a recent memory for me, so that’s what led to the first edition, back in 2014. When I first learned Python (from Mark Pilgrim’s excellent Dive Into Python), I came across the concept of TDD, and thought, “Yes. I can definitely see the sense in that”. Perhaps you had a similar reaction when you first heard about TDD? It seemed like a really sensible approach, a really good habit to get into—like regularly flossing your teeth. Then came my first big project, and you can guess what happened—there was a client, there were deadlines, there was lots to do, and any good intentions about TDD went straight out of the window. And, actually, it was fine. I was fine. At first. At first I thought I didn’t really need TDD because the website was small, and I could easily test whether things worked by just manually checking it out. Click this link here, choose that drop-down item there, and this should happen. Easy. This whole “writing tests” thing sounded like it would have taken ages. And besides, I fancied myself, from the full height of my three weeks of adult coding experience, as being a pretty good programmer. I could handle it. Easy. Then came the fearful goddess Complexity. She soon showed me the limits of my experience. The project grew. Parts of the system started to depend on other parts. I did my best to follow good principles like DRY (don’t repeat yourself), but that just led to some pretty dangerous territory. Soon, I was playing with multiple inheritance. Class hierarchies eight levels deep. eval statements. I became scared of making changes to my code. I was no longer sure what depended on what, and what might happen if I changed this code over here…oh gosh, I think that bit over there inherits from it…no, it doesn’t; it’s overridden. Oh, but it depends on that class variable. Right, well, as long as I override the override it should be fine. I’ll just check—but checking was getting much harder. There were lots of sections for the site now, and clicking through them all manually was starting to get impractical. Better to leave well enough alone. Forget refactoring. Just make do. Soon I had a hideous, ugly mess of code. New development became painful. Not too long after this, I was lucky enough to get a job with a company called Resolver Systems (now PythonAnywhere), where extreme programming (XP) was the norm. The people there introduced me to rigorous TDD. Although my previous experience had certainly opened my mind to the possible benefits of automated testing, I still dragged my feet at every stage. “I mean, testing in general might be a good idea, but really? All these tests? Some of them seem like a total waste of time…what? Functional tests as well as unit tests? Come on, that’s overdoing it! And this TDD test/minimal-code-change/test cycle? This is just silly! We don’t need all these baby steps! Come on—we can see what the right answer is; why don’t we just skip to the end?”
این کتاب را میتوانید از لینک زیر بصورت رایگان دانلود کنید:
Download: Test-Driven Development with Python Obey the Testing Goat, 3rd Edition

نظرات کاربران