Software Engineer Labdon
660 subscribers
43 photos
5 videos
6 files
870 links
👑 Software Labdon

حمایت مالی:
https://www.coffeete.ir/mrbardia72

ادمین:
@mrbardia72
Download Telegram
🔵 عنوان مقاله
Testing and Programming Are Not Separate Disciplines

🟢 خلاصه مقاله:
** این یادآوری از Ravisuriya Eswara تأکید می‌کند که توسعه و تست نرم‌افزار باید یک فرایند یکپارچه باشند، نه دو رشته جدا. با وارد کردن تست در متن کار روزانه—از تعریف معیارهای پذیرش و شناسایی ریسک‌ها تا نوشتن تست‌ها کنار کد، اجرای TDD و پایپ‌لاین‌های CI/CD—کیفیت از ابتدا طراحی می‌شود، نه در انتها ارزیابی.

این رویکرد مزایایی مانند کاهش نقیصه‌های تولید، بازخورد سریع‌تر، تحویل قابل‌پیش‌بینی، تجربه کاربری بهتر و هزینه نگه‌داری کمتر دارد. همکاری جایگزین تحویل‌های مرحله‌ای می‌شود: توسعه‌دهندگان بر طراحیِ قابل‌تست تمرکز می‌کنند و تسترها با نگاه اکتشافی و کل‌نگر کیفیت را غنی می‌کنند؛ اتوماسیون و تست اکتشافی مکمل هم‌اند. نتیجه، چرخه‌ای سالم‌تر و محصولی پایدارتر در راستای اصول Agile و DevOps است.

#تست_نرم‌افزار #برنامه‌نویسی #کیفیت #DevOps #TDD #CI_CD #Agile #مهندسی_نرم‌افزار

🟣لینک مقاله:
https://cur.at/N39OqUZ?m=web


👑 @software_Labdon
1
🔵 عنوان مقاله
Windows (GitHub Repo)

🟢 خلاصه مقاله:
** این GitHub Repo راه‌اندازی Windows داخل یک محیط Docker را ساده می‌کند: با دانلود خودکار ISO و بهره‌گیری از شتاب‌دهی KVM، یک ماشین مجازی Windows با کارایی نزدیک به بومی اجرا می‌شود. هدف، ارائه محیطی تکرارپذیر، قابل‌حمل و یک‌بارمصرف برای توسعه و تست است؛ با امکان دسترسی از راه دور (مثلاً RDP/VNC) و نگه‌داری داده‌ها از طریق volumeها. این راه‌حل برای CI/CD، تست میان‌سکویی و اجرای ابزارهای مخصوص Windows مفید است. نیازمندی‌ها معمولاً شامل یک میزبان Linux با پشتیبانی KVM و رعایت الزامات لایسنس Windows است.

#Windows #Docker #KVM #Virtualization #DevOps #ISO #CloudNative #CI_CD

🟣لینک مقاله:
https://github.com/dockur/windows?utm_source=tldrinfosec


👑 @software_Labdon
🤝1
🔵 عنوان مقاله
How Playwright Runs Workers and Test Fixtures (Parallel vs Serial vs Default)!

🟢 خلاصه مقاله:
این مقاله از Thananjayan Rajasekaran به‌صورت عملی نشان می‌دهد Playwright Test چگونه workers و test fixtures را مدیریت می‌کند و تفاوت حالت‌های default، parallel و serial چیست. ابتدا توضیح می‌دهد که به‌طور پیش‌فرض فایل‌های تست روی چند worker به‌صورت موازی اجرا می‌شوند اما تست‌های داخل هر فایل به‌صورت ترتیبی اجرا می‌گردند؛ همچنین به تعامل retries، projects و گزینه‌هایی مانند --workers و sharding برای کنترل سرعت و پایداری اشاره می‌کند. سپس روش‌های افزایش همزمانی را بررسی می‌کند: فعال‌کردن fullyParallel در تنظیمات یا استفاده از test.describe.configure({ mode: 'parallel' }) برای موازی‌سازی بخشی از تست‌ها، همراه با هشدار درباره ریسک‌های وضعیت مشترک و flaky شدن. در بخش serial، با test.describe.serial یا تنظیم mode: 'serial' می‌توان اجرای ترتیبی و توقف زنجیره پس از شکست را تضمین کرد؛ راهکاری که برای گردش‌کارهای وابسته یا منابع غیرقابل‌اشتراک میان workers مفید است، هرچند توصیه می‌شود فقط در صورت نیاز استفاده شود. بخش مهم دیگر به fixtures می‌پردازد: تفاوت بین per-test و worker-scoped و تأثیر مستقیم آن‌ها بر موازی‌سازی؛ اینکه worker-scoped بین workers به‌اشتراک گذاشته نمی‌شود و ممکن است چند نمونه مستقل از یک منبع ایجاد شود. مقاله با نمونه‌کدهای روشن برای تنظیم workers، فعال‌سازی fullyParallel، علامت‌گذاری suiteها به‌صورت serial یا parallel و ترکیب آن‌ها با projects و retries، یک الگوی ذهنی شفاف برای انتخاب بهینه بین default، parallel و serial ارائه می‌دهد تا هم سرعت اجرا بالا برود و هم پایداری CI حفظ شود.

#Playwright #Testing #E2E #ParallelTesting #TestAutomation #JavaScript #Fixtures #CI

🟣لینک مقاله:
https://cur.at/93wY1jL?m=web


👑 @software_Labdon
1
🔵 عنوان مقاله
Building Smarter Tests with Custom Annotations and Listeners in TestNG — A Practical Guide

🟢 خلاصه مقاله:
**این مقاله نشان می‌دهد چگونه با ترکیب annotationهای سفارشی و listenerها در TestNG می‌توان تست‌هایی هوشمندتر، پایدارتر و مقیاس‌پذیرتر ساخت. با افزودن متادیتا مانند مالک، شدت، مؤلفه یا شرایط اجرا به‌صورت annotation، اجرای تست‌ها قابل کنترل‌تر می‌شود: فیلترکردن در CI، تنظیم داینامیک retry برای تست‌های flaky، اعمال timeout و skipهای شرطی—all بدون شلوغ‌کردن بدنه تست‌ها. در سوی دیگر، listenerها از رویدادهای چرخه عمر TestNG برای لاگ‌گیری یکدست، ثبت اسکرین‌شات و آرتیفکت در خطا، جمع‌آوری متریک زمان، قرنطینه‌کردن تست‌های flaky، fail-fast و یکپارچه‌سازی با گزارش‌دهی‌هایی مثل Allure استفاده می‌کنند؛ بنابراین کد تست تمیزتر و رفتار مقطعی یکپارچه می‌شود. مقاله همچنین نکات اجرای موازی را پوشش می‌دهد: پرهیز از state مشترک، استفاده از منابع thread-local (مثل WebDriver)، جداسازی داده و تنظیم timeout برای حفظ ایزولیشن و کاهش flakiness در مقیاس CI. جمع‌بندی توصیه می‌کند مجموعه‌ای کوچک و شفاف از annotationها و یک listener عمومی بسازید که سیاست‌ها را از روی متادیتا اعمال کند، از بازتاب کنترل‌شده و قابل‌آزمون بهره ببرد و به‌تدریج قابلیت‌های باارزش مثل لاگ منسجم، آرتیفکت‌های خطا و retry هدفمند را اضافه کند. در پایان، Vaibhav Chavan نکات کلیدی و راهنمای تکمیلی Parallel Testing with TestNG را معرفی می‌کند.

#TestNG #JavaTesting #Annotations #Listeners #ParallelTesting #AutomationTesting #QA #CI/CD

🟣لینک مقاله:
https://cur.at/2uhpDOO?m=web


👑 @software_Labdon
🔵 عنوان مقاله
trdl (GitHub Repo)

🟢 خلاصه مقاله:
خلاصه‌ای متن‌باز به نام trdl با تمرکز بر «تحویل مطمئن» آخرین مرحله‌ی توزیع نرم‌افزار را امن می‌کند: رساندن به‌روزرسانی‌ها از Git به کاربر نهایی با کانالی قابل‌اعتماد و قابل‌راستی‌آزمایی. این راهکار با اتصال طبیعی به فرآیندهای مبتنی بر Git و ادغام در اتوماسیون انتشار، تضمین می‌کند آنچه نصب می‌شود همان چیزی است که نگه‌دارندگان منتشر کرده‌اند. با تکیه بر امضا و راستی‌آزمایی رمزنگاری، اصالت، تمامیت و مبدأ به‌روزرسانی‌ها قبل از اعمال بررسی می‌شود؛ در نتیجه ریسک‌های زنجیره تأمین کاهش می‌یابد و امکان انتشارهای قابل‌ممیزی، بازگشت نسخه و سیاست‌های به‌روزرسانی (مانند stable یا pre-release) فراهم می‌شود. trdl متن‌باز است، می‌تواند self-hosted اجرا شود، و از طریق GitHub Repo در دسترس است؛ کاربران و تیم‌های عملیاتی نیز می‌توانند با یک رابط ساده مانند CLI به‌روزرسانی‌های مورد اعتماد را دریافت و اعمال کنند.

#trdl #SupplyChainSecurity #SecureUpdates #Git #OpenSource #DevOps #SoftwareDelivery #CI/CD

🟣لینک مقاله:
https://github.com/werf/trdl?utm_source=tldrinfosec


👑 @software_Labdon
🔵 عنوان مقاله
In Sprint Test Automation

🟢 خلاصه مقاله:
در آزمون‌سازی درون‌اسپرینت در Agile، هدف این است که تست‌ها همزمان با توسعه نوشته و اجرا شوند تا بازخورد سریع و خطاهای انباشته کاهش یابد. تجربه‌ها نشان می‌دهد موفقیت به چند عامل وابسته است: خرد کردن قصه‌ها به قطعات کوچک و قابل‌آزمون، پذیرش «Definition of Ready» و «Definition of Done» که شامل آزمون خودکار است، همکاری نزدیک Dev و QA با رویکردهای TDD/BDD، و برخورد با تست مثل کد (همان مخزن، همان استراتژی شاخه، همان بازبینی کد).

برای پشتیبانی از این جریان، CI/CD باید سریع و قابل‌اعتماد باشد: اجرای موازی، محیط‌های موقتی مبتنی بر کانتینر، مجازی‌سازی سرویس‌ها و Mockها برای قطع وابستگی‌ها، و مدیریت داده‌ی تست که آزمون‌ها را تکرارپذیر و بدون نوسان نگه می‌دارد. تمرکز بر هرم تست ضروری است: پوشش بالای Unit و Integration/Contract، و تنها یک لایه نازک از E2E UI (مثلاً با Cypress یا Playwright)؛ در کنار آن، سنجه‌هایی مانند زمان رسیدن تغییر تا استقرار، نرخ شکست و زمان ترمیم رصد می‌شوند و تست‌های flaky سریع قرنطینه و اصلاح می‌گردند.

همچنین پرهیز از الگوهای ضدِکیفیت مانند «Hardening Sprint»، عقب‌انداختن اتوماسیون به‌عنوان بدهی، یا اتکا به E2E شکننده توصیه می‌شود. استفاده از Feature Flag، Contract Testing در معماری‌های مبتنی بر سرویس، و مالکیت مشترک کیفیت در کل تیم به تحقق «اتمام واقعی کار» در همان اسپرینت کمک می‌کند.

#Agile #TestAutomation #InSprintTesting #CI_CD #TDD #BDD #DevOps

🟣لینک مقاله:
https://cur.at/46VanjF?m=web


👑 @software_Labdon
👍1
🔵 عنوان مقاله
How to Test Asynchronous Processes That Complete Hours Later

🟢 خلاصه مقاله:
** دانیل Delimata نشان می‌دهد چگونه با بازطراحی کوچک در سیستم و تست‌ها می‌توان فرایندهای ناهمگامی را که نتیجه‌شان ساعت‌ها بعد دیده می‌شود، به‌صورت خودکار و سریع راستی‌آزمایی کرد. رویکرد پیشنهادی بر «assertionهای در نهایت» با مهلت مشخص تکیه دارد: به‌جای sleep طولانی، رویداد را آغاز کنید و با polling یا اشتراک در خروجی‌ها (داده، رویداد، ایمیل) نتیجه را تا ضرب‌الاجل تعیین‌شده بررسی کنید. زمان را تزریق‌پذیر کنید (clock فیک)، زمان‌بندی‌ها را قابل‌پیکربندی کنید یا test hook امن برای اجرای فوری کارها فراهم کنید؛ و با شناسه‌های همبستگی و مشاهده‌پذیری (مثل OpenTelemetry) مسیر انتهابه‌انتها را رهگیری کنید. برای پایداری، هندلرهای idempotent، داده‌ی تست ایزوله و محیط‌های موقتی به کار ببرید و سطح مناسب تست (واحد، یکپارچه، انتهابه‌انتها، contract) را انتخاب کنید. در CI، مسیر سریع با زمان شتاب‌داده/هوک و مسیر آهسته شبانه‌ی واقع‌گرایانه را ترکیب کنید تا فرایندهایی که ساعت‌ها طول می‌کشند، در چند دقیقه به‌طور مطمئن تست شوند.

#AsynchronousTesting #EventualConsistency #Automation #DistributedSystems #E2ETesting #Observability #CI_CD #MessageQueues

🟣لینک مقاله:
https://cur.at/tVLKSEQ?m=web


👑 @software_Labdon
🔵 عنوان مقاله
Every Bug Deserves a Test Case

🟢 خلاصه مقاله:
ایده اصلی این است که هر باگ پس از برطرف‌شدن باید با یک تست اختصاصی پوشش داده شود. به‌گفته‌ی Kevin Konda، برای هر باگ ابتدا یک تست بازتولیدکننده بنویسید، شکست آن را ببینید، مشکل را رفع کنید و سپس همان تستِ سبز را در مجموعه‌ی رگرسیون نگه دارید. این کار از بازگشت خطاها جلوگیری می‌کند، دانشِ لبه‌های پنهان را حفظ می‌کند، ریسکی‌بودن تغییرات را کاهش می‌دهد و به بهبود طراحی کمک می‌کند. با نام‌گذاری شفاف، پیوند به شناسه‌ی Issue، کوچک‌وساده نگه‌داشتن تست‌ها و تفکیک اجرای سریع و شبانه، می‌توان هزینه‌ی زمان و ناپایداری را کنترل کرد. در نهایت، «هر باگ یک تست» یک انضباط فرهنگی است: اشتباهات گذشته را به ریل‌های محافظ آینده تبدیل کنید.

#SoftwareTesting #RegressionTesting #QualityEngineering #TDD #BugFixing #TestCoverage #CI #EngineeringCulture

🟣لینک مقاله:
https://cur.at/Kvqi6KW?m=web


👑 @software_Labdon
🔵 عنوان مقاله
Running Lighthouse CI in a Lightweight Docker Container

🟢 خلاصه مقاله:
**این مطلب نشان می‌دهد چگونه می‌توان Lighthouse CI را در یک Docker کانتینر سبک اجرا کرد تا سنجش عملکرد وب‌اپ‌ها به‌صورت خودکار و قابل‌اتکا در CI انجام شود. ایده اصلی، ساخت یک ایمیج کوچک (مثلاً بر پایه Alpine + Node) با CLI مربوط به Lighthouse CI و یک Chromium هدلس است تا روی GitHub Actions، GitLab CI، یا CircleCI کاملاً یکسان عمل کند و زمان راه‌اندازی و هزینه‌های CI را پایین نگه دارد. در خط لوله، پس از build و serve کردن برنامه (یا هدف‌گیری یک URL مستقر)، کانتینر اجرا می‌شود، معیارهایی مانند LCP، CLS و TBT را استخراج می‌کند، گزارش‌های HTML/JSON تولید می‌کند، و با baseline و بودجه‌های عملکردی مقایسه می‌کند تا در صورت عقب‌گرد یا عبور از آستانه‌ها، build را fail کند. برای پایداری نتایج، باید شبکه و CPU را شبیه‌سازی (throttle) کرد، cacheها را بین اجراها نگه داشت، به‌صورت non-root اجرا شد و تنها در صورت نیاز از پرچم‌هایی مثل no-sandbox استفاده کرد. این چیدمان به‌راحتی در PRها برای gate کردن mergeها و نیز در اجرای شبانه روی محیط production قابل استفاده است و در نهایت یک سازوکار سبک، تکرارپذیر و کم‌هزینه برای کنترل دائمی عملکرد ارائه می‌دهد.

#Lighthouse #LighthouseCI #Docker #WebPerformance #CI #DevOps #PerformanceBudgets #ContinuousIntegration

🟣لینک مقاله:
https://cur.at/ghYEsiF?m=web


👑 @software_Labdon
🔵 عنوان مقاله
Architecture Tests

🟢 خلاصه مقاله:
** تاراس Kizlo در ادامهٔ مجموعهٔ خود دربارهٔ سطوح تست، سراغ موضوع کمتر مطرح‌شده‌ای رفته است: تست‌های معماری. او توضیح می‌دهد که این تست‌ها مجموعه‌ای از قواعد اجرایی‌اند که مرزهای معماری، وابستگی‌های مجاز، نبود حلقه‌های وابستگی و قواعد نام‌گذاری/لایه‌بندی را بررسی می‌کنند تا از فرسایش تدریجی طراحی جلوگیری شود. مقاله نشان می‌دهد چگونه می‌توان این قواعد را کنار تست‌های معمول و در CI/CD اجرا کرد و با ابزارهایی مثل ArchUnit یا NetArchTest آن‌ها را به شکست‌پذیر کردن بیلد گره زد. توصیه‌های عملی شامل شروع از چند قانون پرتأثیر، پرهیز از قواعد شکننده، همگام‌سازی با تصمیم‌های معماری و به‌روزرسانی مداوم تست‌هاست. نتیجهٔ نهایی: تست‌های معماری قصد طراحی را به قراردادهای قابل اجرا تبدیل می‌کنند و به‌عنوان گاردریل‌های ماندگار، ساختار سالم کد را حفظ می‌کنند.

#ArchitectureTests #SoftwareArchitecture #SoftwareTesting #CleanArchitecture #CI/CD #ArchUnit #NetArchTest #CodeQuality

🟣لینک مقاله:
https://cur.at/WG4foAM?m=web


👑 @software_Labdon
🔵 عنوان مقاله
Our Journey Through Optimising Cypress End-to-End Tests

🟢 خلاصه مقاله:
** این مقاله به قلم Omer Keskinkilic مجموعه‌ای از تجربه‌های عملی برای بهینه‌سازی تست‌های انتها‌به‌انتها با Cypress ارائه می‌کند. محورها سه‌گانه‌اند: طراحی درست تست، افزایش سرعت اجرا و نگه‌داری بلندمدت.

در طراحی، تمرکز بر پایداری و خوانایی است: استفاده از selectorهای پایدار مانند data-test، کوچک و متمرکز نگه‌داشتن سناریوها، استخراج گام‌های تکراری به custom commandها و پرهیز از waitهای دلخواه با همگام‌سازی قطعی مبتنی بر وضعیت.

برای سرعت، توصیه‌ها شامل استفاده هدفمند از cy.intercept برای stub کردن ضروری، seed کردن داده، میان‌بر زدن ورود با cy.session، تقسیم مجموعه به smoke و full، موازی‌سازی در CI با Cypress Dashboard، اجرای headless و کش وابستگی‌ها و محدود کردن خروجی‌ها به شکست‌هاست.

در نگه‌داری، ساختار پوشه و نام‌گذاری یک‌دست، کمک‌هزینه‌های DRY به‌جای page objectهای سنگین، مدیریت سریع flakyها (با retry به‌عنوان چاره موقت)، استفاده از TypeScript برای اطمینان بیشتر در utilityها و commandها، و پیکربندی محیط از طریق cypress.config.js و متغیرهای محیطی پیشنهاد می‌شود. با اجرای تدریجی این نکات، مجموعه تست‌های Cypress پایدارتر، سریع‌تر و قابل اتکاتر می‌شود.

#Cypress #E2E #TestAutomation #QA #JavaScript #CI #CypressDashboard #Performance

🟣لینک مقاله:
https://cur.at/YjuFkp3?m=web


👑 @software_Labdon