دوره TDD، BDD و تست خودکار

  • دسته بندی
    تست نرم افزار
  • مدت دوره
    42 ساعت
  • جلسات دوره
    14 جلسه 3 ساعته
  • نحوه برگزاری
    آنلاین
  • تاریخ شروع
    19 خرداد 1399
  • هزینه دوره
    2.000.000 تومان
  • ثبت نام
  • آشنایی با Test Automation
    • آشنایی با تست خودکار (Automated Test)، مزایا و اهداف
    • بررسی تاثیرات Test Automation
      • در حوزه‌ی کیفیت خروجی تولید شده
      • در حوزه‌ی Refactoring
      • در حوزه‌‌ی اقتصاد و هزینه‌ی توسعه و نگه‌داری
      • در حوزه‌ی مستندات
      • در حوزه‌ی شناخت نیازمندی‌ها
    • آشنایی با مفاهیم و اصطلاحات
      • SUT (System Under Test)
      • DOC (Dependent-on Component)
      • Test Fixture
      • Test Case – Test Method
      • Test Double
      • Test Framework
      • Test Runner
    • آشنایی با سطوح مختلف تست
      • Unit Test
      • Integration Test
      • Acceptance Test
      • Load Test
      • Stress Test
      • Smoke Test
      • Performance Test
      • Regression Test
      • Usability Test
    • بررسی هرم تست (Test Pyramid)
    • بررسی Testing Quadrants
  • مفاهیم پایه‌ای تست
    • بررسی اصول F.I.R.S.T
    • آشنایی با رویکردهای مختلف تست
      • Interaction-Based Testing
      • State-Based Testing
      • Output-Based Testing
    • بررسی 4 فاز مختلف تست‌ها
      • Fixture Setup
      • Exercise
      • Verify
      • Teardown
    • نگاهی بر مفهوم Test Fixture
      • Test Fixture چیست؟
      • بررسی انواع Test Fixture
        • Transient – Persistent
        • Fresh – Shared – Immutable Shared
    • بررسی الگوهای فاز Fixture Setup
      • Inline Setup
      • Delegated Setup
      • Framework Hooks
      • بررسی انواع Creation Method ها
        • Parameterized Method
        • Anonymous Creation Method
        • Named State Reaching Method
        • Attachment Method
      • بررسی Test Data Builder ها
        • بررسی الگوهای Builder و Step Builder
      • آشنایی با کتابخانه ‌ AutoFixture و NBuilder
    • بررسی الگوهای فاز Verification
      • آشنایی با کتابخانه‌های Assertion (FluentAssertions, NFluent, Shouldly و ...)
      • Delta Assertions
      • Guard Assertions
      • Excepted Objects
  • آشنایی با Test-Driven Development (TDD)
    • آشنایی با TDD و رویکرد Test-First
    • چرخه ی Red, Green, Refactor
    • آشنایی با اصول و قوانین TDD
  • Unit Testing
    • آشنایی با Unit Testing و اهداف آن
    • آشنایی با فریم ورک‌های خانواده xUnit
    • روش‌های دسته‌بندی تست‌ها در فریم ورک‌های خانواده xUnit
      • Per Class
      • Per Feature
      • Per Fixture
    • نام‌گذاری صحیح Unit Test ها
    • آشنایی با Code Coverage و ابزارهای آن
    • ساختار Arrange, Act, Assert
    • بررسی استراتژی های Fixture Management در Unit Test ها
    • پیاده‌سازی Parameterized Test ها
    • آشنایی با ابزار‌های Live Testing (مانند Ncrunch, WallabyJs)
  • Test Doubles
    • بررسی انواع روابط بین SUT و وابستگی های آن
      • Indirect Input
      • Indirect Output
      • Indirect Input & Output
    • آشنایی با فریم ورک های Isolation در .NET (مانند Moq، FakeItEasy، NSubstitute و ...)
    • انواع Test Double ها
      • Mock
      • Stub
      • Spy
      • Fake
      • Dummy
    • بررسی انواع Stub
      • Responder
      • Saboteur
      • Temporary Test Stub
      • Procedural Test Stub
      • Entity Chain Snipping
    • روش‌ها و نکات پیاده سازی Stub ها
      • Hard-Coded
      • Configurable
      • Anonymous Inner Class
    • روش ها و نکات پیاده سازی Spy ها
      • Retrieval Interface
      • Self-Shunt
      • Anonymous Inner Class
      • Indirect Output Registry
    • معرفی سبک Classical TDD (Detroit)
    • معرفی سبک Mockist TDD (London)
    • بررسی تفاوت های سبک‌های Classical و Mockist
      • از لحاظ رویکرد و سبک طراحی
      • از لحاظ نحوه انجام Fixture Setup
      • از لحاظ وابستگی تست‌ها به پیاده‌سازی کدها
  • طراحی تست‌پذیر
    • تعریف Testability و Testable Design
    • بررسی رابطه Encapsulation، Observability و تست‌پذیری
    • رابطه‌ی اصل Composition over Inheritance و تست‌پذیری
    • بررسی اصول SOLID و تاثیر آن بر تست‌پذیری
    • بررسی رابطه High-Coupling و تست‌پذیری
    • مشکلات الگوی Singleton در تست
    • مشکلات Service Locator در تست
    • بررسی Humble Object
  • Integration Testing
    • آشنایی با Integration Testing
    • نگاهی بر تعاریف مختلف Integration Test
      • Narrow Integration Tests
      • Broad Integration Tests
    • نحوه کار با Database در تست
      • پیش‌نیازهای کار با دیتابیس در تست
      • بررسی استراتژی‌های Fixture Management
        • Fresh Persistent Fixture
        • Shared Persistent Fixture
        • Immutable Shared Persistent Fixture
      • بررسی روش‌های Teardown هنگام کار با Database
        • Table Truncation
        • Transaction Rollback
        • Database Sandbox
      • بررسی تکنیک In-Memory Database
        • بررسی قابلیت In-Memory Database در EF Core
      • استراتژی‌های تولید داده‌های مورد نیاز
    • اجرای موازی تست‌ها
    • کار با وابستگی‌های بیرونی (مانند Web Service ها )
    • کار با File System
    • تست مکانیزم Log
  • کار با رشته‌ها
    • بررسی چالش‌ کار با String ها در تست
    • بررسی روش‌های Verificationرشته‌ها
      • Verification by Containment
      • Verification by Pattern
      • Exact Verification by Value
      • Exact Verification with Formatted Results
    • کار با فرمت‌های Json و XML
      • Verification با روش Serialize-Deserialize
      • استفاده از کتابخانه‌ی FluentAssertions.Json
  • کار با تاریخ و زمان
    • بررسی چالش‌های کار با زمان در تست
    • شناسایی مسائل حساس به زمان
    • روش‌های مختلف کار با زمان
      • Ambient Context
      • Value Passing
      • Explicit Dependency
    • بررسی تکنیک Time Travelling
      • پیاده سازی Time Travelling در Unit Test ها
      • Time Travelling در Integration Test ها
  • Property-Based Testing
    • نگاهی بر Functional Programming و برخی مفاهیم آن
    • آشنایی با Property-Based Testing، پیشینه و هدف آن
    • Property چیست؟
    • مقایسه Property-Based Testing و Example-Based Testing
    • مقایسه Property-Based Testing و Fuzzing
    • بخش¬های مختلف در Property-Based Testing
      • Modeling
      • Generalizing example tests
      • Invariants
      • Symmetric properties
    • بررسی Stateless Properties
    • بررسی Stateful Properties
    • بررسی State Machine Properties
    • آشنایی با مکانیزم Shrinking
    • مکانیزم کاری Targeted Properties ها و محدودیت‌های آنها
    • بررسی کتابخانه‌ی fsCheck
      • نوشتن Property های ساده
      • Conditional Properties
      • Lazy Properties
      • Quantified Properties
      • Timed Properties
      • تولید داده با Generator ها و Shrinker ها
  • کیفیت در تست‌ها
    • بررسی مشخصه‌های کیفی تست‌ها
      • Maintainability
      • Readability
      • Trustworthiness
    • آشنایی با مفهوم Test Smell
    • بررسی Test Smell و Anti-Pattern های رایج و راه رفع آنها
      • Eager Test
      • Mystery Guest
      • Verbose Test
      • Flexible Test
      • Equality Pollution
      • Conditional Verification Logic
      • Production Logic in Test
      • Test Logic in Production
      • Primitive Assertions
      • Hyper Assertions
      • Bitwise Assertions
      • Complex Teardown
      • Code Duplication
      • Magic Values
      • General Fixture
      • Overprotective Test
      • Pixel Perfection
      • Parameterized Mess
      • Never-failing Test
      • Shallow Promises
      • Lowered Expectations
      • Platform prejudice
      • Assertion Roulette
      • Interacting Tests
      • Lonely Test
      • Resource Leakage
      • Unrepeatable Test
      • Nondeterministic Test
      • Interface Sensitivity
      • Behavior Sensitivity
      • Data Sensitivity
      • Context Sensitivity
      • Sensitive Equality
      • Fragile Fixture
      • Erratic Test
      • Slow Tests
  • Behavior-Driven Development (BDD)
    • آشنایی با BDD
    • تعاریف و مفاهیم BDD
      • Vision
      • Goal
      • Capability
      • Feature
      • User Story
      • Acceptance Criteria
      • Example
      • Scenario
      • Specification & Executable Specification
    • شناسایی نیازمندی¬ها با کمک BDD
      • بررسی تکنیک Feature Injection
      • بررسی تکنیک Impact Mapping
      • بررسی تکنیک Purpose-Based Alignment Model
    • تبدیل Feature ها به User Story ها و شناسایی مثال‌های کلیدی (Key Examples)
    • بررسی روش‌های تعامل موثر برای نوشتن Scenario ها و برگزاری جلسات Three-Amigos
    • تبدیل مثال‌ها به Executable Specification
    • بررسی تفاوت High-Level Specification و Low-Level Specification
    • آشنایی با مفهوم Ubiquitous Language
    • آشنایی با زبان Gherkin و ساختار Given, When, Then
  • Automated Acceptance Testing
    • بررسی فریم ورک Specflow
      • نحوه راه اندازی Specflow
      • نوشتن سناریوها با Specflow
      • مفهوم Binding
      • بررسی Hook ها و ترتیب اجرای آن¬ها
      • استفاده از Background برای پیش‌نیاز سناریوها
      • استفاده از جداول افقی و عمودی
      • کار با Tag ها
      • آشنایی با مکانیزم Dependency Injection در Specflow
      • اجرای موازی تست¬ها در Specflow
    • لایه‌بندی و معماری Acceptance Test ها
      • بررسی اهمیت لایه‌بندی
      • لایه‌ی Business Rule
      • لایه‌ی Business Flow
      • لایه‌ی Technical
    • روش‌های آماده‌سازی داده در سناریو
      • Duplication
      • استفاده از روش GivenStories
      • Scenario order
      • Background Steps
      • Reusable Components
    • استفاده از Persona در نوشتن سناریوها
    • پیاده سازی Acceptance Test ها از Web UI
      • آشنایی با ابزار Selenium
      • آشنایی با WebDriver های مختلف
      • آشنایی با مفهوم Headless Browser
      • بررسی الگوی Page Object Model
      • خواندن مقادیر از Element های صفحه
      • استخراج مقادیر صفحه با XPath
      • مکانیزم Wait در Selenium
    • پیاده سازی Acceptance Test ها از API
      • کار با سرویس‌های REST
      • مدیریت مکانیزم HATEOAS
      • احراز هویت در تست‌ها با OAuth و کار با توکن‌های JWT
  • الگوی Screenplay
    • بررسی مشکلات الگوی Page Object Model
    • آشنایی با نگاه Actor-Centric
    • بررسی 5 بخش اصلی الگوی Screenplay
      • Actor
      • Ability
      • Question
      • Interaction
      • Task
    • بررسی فریم ورک Serenity
    • پیاده‌سازی تست‌ها از لایه API و UI با الگوی Screenplay
  • Unit Testing در رویکرد BDD
    • بررسی رابطه BDD,TDD و نقش Unit Testing
    • بررسی مفهوم Low-Level Specification
    • پیاده سازی Unit Test ها به سبک BDD
      • با استفاده از فریم‌ورک های خانواده xUnit
      • بررسی فریم‌ورک های NSpec، SpecsFor، BDDfy و ...
  • Living Documentation
    • بررسی مشکلات مستندسازی سنتی
    • آشنایی با رویکرد Living Documentation
    • چرخه‌ی Living Documentation
      • No Documentation
      • Stable Documentation
      • Refactoring-Friendly Documentation
      • Runtime Documentation
      • Automated Documentation
      • Beyond Documentation
    • بررسی 4 اصل Living Documentation
      • Reliable
      • Low-Effort
      • Collaborative
      • Insightful
    • تولید Documentation از روی Specification ها
    • بررسی ابزارهای موجود و راه اندازی ابزار Pickles