SlideShare ist ein Scribd-Unternehmen logo
1 von 42
Code-driven testing
          Аудиторія: розробники

          Олександр Павлишак, 2011
          pavlyshak@gmail.com
Agenda
•   Поняття Unit test
•   Підміна залежностей, stubs
•   Тестування взаємодій, mocks
•   Якості хороших тестів
•   Unit vs integration testing
•   Практики
•   Метрики
Тестування
• Починається разом із розробкою
• Запускаємо і дивимось
• Створюємо допоміжні засоби
  – Консольні програми
  – Допоміжний UI
Unit test, визначення
•   Код (зазвичай, метод)
•   Який викликає інший код
•   І після цього перевіряє правильність
•   Деяких припущень

• Unit = модуль, компонент
• (функція, метод, клас, Unit of Work)
Unit test
[TestFixture]
public class CalculatorTests
{
    [Test]
    public void Sum_ReturnsCorrectValue()
    {
        var math = new Calculator();

        int result = math.Sum(1, 2);

        Assert.AreEqual(3, result);
    }
}
Arrange/Act/Assert
[TestFixture]
public class CalculatorTests
{
    [Test]
    public void Sum_ReturnsCorrectValue()
    {
        var math = new Calculator(); // Arrange

        int result = math.Sum(1, 2); // Act

        Assert.AreEqual(3, result); // Assert
    }
}
Єдиний assert/єдиний verify
• Юніт-тест повинен тестувати щось одне
• Назва тесту важлива
[Test]
public void Start_Test()
{
    var survey = new Survey();

    survey.Start();

    Assert.AreEqual(SurveyState.InProgress, survey.State);
    Assert.IsTrue(survey.FinishDate > survey.StartDate);
}
Unit test framework
• Виконання тестів
  – Одного, декількох, всіх
  – Інтеграція з IDE
• API для написання тестів
• Автоматизація
• Перегляд результатів
Unit test framework
•   NUnit, MS Test, MBUnit, DBUnit
•   JUnit, JWalk, TestNG, DBUnit
•   C++test, CppUnit, Google C++ Testing Fx
•   PyUnit
Continuous integration
Continuous integration
Залежності
DEMO
[Test]
public void Start_ChangesStateToInProgress()
{
    var survey = new Survey();

    survey.Start();

    Assert.AreEqual(SurveyState.InProgress,
                    survey.State);
}
Залежності
•   Survey залежить від EmailSender
•   Не хочемо відсилати справжні листи
•   Створюємо stub вручну
•   Створюємо stub автоматично
•   Все ще тестуємо стан!

    Assert.AreEqual(SurveyState.InProgress,
        survey.State);
Interaction testing
•   Потреба тестувати взаємодії
•   Створюємо mock вручну
•   Створюємо mock автоматично
•   Один mock на тест
•   Тестуємо не стан, а взаємодію!

    mockEmailSender.Verify();
Stubs + mocks
• Один тест – один mock
• Декілька stubs

                 Fakes


        Stubs             Mocks
         0..*              0..1
Короткий підсумок
How unit testing helps
• Швидший цикл тестування коду
• Коротший фідбек про можливі дефекти
• Дефекти дешевші
Плюси тестів
•   Кращий код
•   Стабільніша нова функціональність
•   Більше впевненості у змінах
•   Менше регресій
•   Коротші цикли релізів
Якості
Якості юніт тестів
• Readable
• Maintainable
• Trustworthy
Readable
•   Легко зрозуміти, що відбувається в тесті
•   Який код тестується
•   Які передумови
•   Які припущення перевіряються
•   Що тестує тест
•   Простий код тесту
Trustworthy
•   Релевантні до помилок
•   Стабільно (не) проходять
•   Немає конфліктуючих тестів
•   Справді тестують
Maintainable
•   Тести легко реагують на зміни
•   Не вимагають конфігурації
•   Не залежать від інших тестів
•   Простий код тесту
Різновиди
Види тестів
• Юніт
• Інтеграційні
• Інші
Юніт тести
•   Тестують один модуль
•   Виконуються виключно в пам’яті
•   Не вимагають конфігурації
•   Не вимагають DB, FS, AD, Net
•   Завжди
    – Повторювано проходять
    – Або повторювано не проходять
    – Тому що не залежать від змінних факторів
Інтеграційні тести
• Тестують модулі разом
• Можуть мати різну поведінку
• В залежності від
  – Середовища (FS, DB, AD, OS, .config)
  – Порядку виконання
  – Кількості виконання
  – Багатопоточності
  – Повного місяця
Інтеграційні тести -- Ознаки
•   TearDown()
•   DateTime.Now
•   Thread
•   Environment.MachineName
•   Database.Save(…)
•   File.Open(…)
Mixing
• Чітке розділення UT та IT
Trustworthy
• Юніт-тести – ДОВІРА
  – Проходять --> мабуть немає дефекту
  – Не проходять --> точно є дефект
• Інтеграційні тести – (деколи) НЕДОВІРА
  – Проходять --> немає дефекту
  – Не проходять --> можливо дефект
Практики
Логіка в юніт-тестах
• Asserts in if/switch/for/while
• Значно підвищується ймовірність появи
  дефекта в тесті
• Погіршується readability & maintainability
Дублювання логіки production коду
•   Приклад
•   Tests last
•   Тест не тестує
•   Expected hardcoded values
Magic numbers
• Приклад
• Найпростіші можливі значення
• Оголошення і перевірка в тесті
Зміна тестів
• Створення:
  – У більшості випадків
• Видалення:
  – Коли тест більше не потрібний
• Редагування:
  – Для maintainability/readability
  – Для швидкості
  – Коли тест повинен виконуватись по-іншому
Тестувальник знаходить дефект
• Новий тест
• Не повинен бути знайдений
  тестувальниками знову
Що міряти
•   Кількість регресій
•   Час виправлення дефектів
•   Метрики якості коду
•   People feedback
•   Покриття (coverage)
Обирайте усвідомлено
•   Тестування не безкоштовне
•   Надмірність тестів
•   Надмірність тестів взаємодій
•   100% покриття не завжди потрібне
На що дивитись далі
•   Unit testing patterns
•   Mocks/stubs/fakes, isolation frameworks
•   TDD, Test Driven Development
•   Contracts, Contract Driven Development
Q&A

Code-driven testing
   Олександр Павлишак, 2011
   pavlyshak@gmail.com

Weitere ähnliche Inhalte

Andere mochten auch

Decreto-Lei 121/2013 de 22 de agosto
 Decreto-Lei 121/2013 de 22 de agosto Decreto-Lei 121/2013 de 22 de agosto
Decreto-Lei 121/2013 de 22 de agostoFernando Barroso
 
comparacion renacimiento impresionismo
comparacion renacimiento impresionismocomparacion renacimiento impresionismo
comparacion renacimiento impresionismocharlysoto
 
Prestar servicios de calidad al huésped
Prestar servicios de calidad al huéspedPrestar servicios de calidad al huésped
Prestar servicios de calidad al huéspedTasha Michaud
 
Programa de especializacion en sst
Programa de especializacion en sstPrograma de especializacion en sst
Programa de especializacion en sstRoxana Ruiz
 
La naturaleza
La naturalezaLa naturaleza
La naturalezaestefanun
 
Nouveautés DVD et CD-ROM - CRDP de l'académie de Grenoble
Nouveautés DVD et CD-ROM - CRDP de l'académie de GrenobleNouveautés DVD et CD-ROM - CRDP de l'académie de Grenoble
Nouveautés DVD et CD-ROM - CRDP de l'académie de Grenoblevamange
 
Planificação 3ºperíodo
Planificação 3ºperíodoPlanificação 3ºperíodo
Planificação 3ºperíodojwurster01
 
Attachment (1)
Attachment (1)Attachment (1)
Attachment (1)bonecaah
 
[E book][project] apostila gerenciamento de projetos
[E book][project]   apostila gerenciamento de projetos[E book][project]   apostila gerenciamento de projetos
[E book][project] apostila gerenciamento de projetoswssouza
 
Congrès des archivestes
Congrès des archivestesCongrès des archivestes
Congrès des archivestesmontrealouvert
 

Andere mochten auch (20)

Presentación1
Presentación1Presentación1
Presentación1
 
Investigación tesis
Investigación tesisInvestigación tesis
Investigación tesis
 
Uepc tics
Uepc ticsUepc tics
Uepc tics
 
Decreto-Lei 121/2013 de 22 de agosto
 Decreto-Lei 121/2013 de 22 de agosto Decreto-Lei 121/2013 de 22 de agosto
Decreto-Lei 121/2013 de 22 de agosto
 
comparacion renacimiento impresionismo
comparacion renacimiento impresionismocomparacion renacimiento impresionismo
comparacion renacimiento impresionismo
 
Prestar servicios de calidad al huésped
Prestar servicios de calidad al huéspedPrestar servicios de calidad al huésped
Prestar servicios de calidad al huésped
 
Mapa coneptual
Mapa coneptualMapa coneptual
Mapa coneptual
 
Programa de especializacion en sst
Programa de especializacion en sstPrograma de especializacion en sst
Programa de especializacion en sst
 
La naturaleza
La naturalezaLa naturaleza
La naturaleza
 
Llum
LlumLlum
Llum
 
Securedownload
SecuredownloadSecuredownload
Securedownload
 
Nouveautés DVD et CD-ROM - CRDP de l'académie de Grenoble
Nouveautés DVD et CD-ROM - CRDP de l'académie de GrenobleNouveautés DVD et CD-ROM - CRDP de l'académie de Grenoble
Nouveautés DVD et CD-ROM - CRDP de l'académie de Grenoble
 
Planificação 3ºperíodo
Planificação 3ºperíodoPlanificação 3ºperíodo
Planificação 3ºperíodo
 
Acoes promocionais sao joao montilla caruaru 2011
Acoes promocionais sao joao montilla caruaru 2011Acoes promocionais sao joao montilla caruaru 2011
Acoes promocionais sao joao montilla caruaru 2011
 
Attachment (1)
Attachment (1)Attachment (1)
Attachment (1)
 
Pao compu
Pao compuPao compu
Pao compu
 
Simple - Rottaely
Simple - RottaelySimple - Rottaely
Simple - Rottaely
 
Deisi
DeisiDeisi
Deisi
 
[E book][project] apostila gerenciamento de projetos
[E book][project]   apostila gerenciamento de projetos[E book][project]   apostila gerenciamento de projetos
[E book][project] apostila gerenciamento de projetos
 
Congrès des archivestes
Congrès des archivestesCongrès des archivestes
Congrès des archivestes
 

Ähnlich wie Code driven testing (UA)

ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»
ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»
ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»GoQA
 
QA Fest 2015. Ярослав Пернеровский. Мутанты наступают - смогут ли ваши тесты...
QA Fest 2015. Ярослав Пернеровский. Мутанты наступают - смогут ли ваши тесты...QA Fest 2015. Ярослав Пернеровский. Мутанты наступают - смогут ли ваши тесты...
QA Fest 2015. Ярослав Пернеровский. Мутанты наступают - смогут ли ваши тесты...QAFest
 
МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...
МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...
МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...GoQA
 
ОЛЕГ ЗАРЕВИЧ «How did we improve delivery using tests» Lviv QA Day 2019
ОЛЕГ ЗАРЕВИЧ «How did we improve delivery using tests» Lviv QA Day 2019ОЛЕГ ЗАРЕВИЧ «How did we improve delivery using tests» Lviv QA Day 2019
ОЛЕГ ЗАРЕВИЧ «How did we improve delivery using tests» Lviv QA Day 2019GoQA
 
Руйнуємо .NET Міфи
Руйнуємо .NET МіфиРуйнуємо .NET Міфи
Руйнуємо .NET МіфиSerhiy Kalinets
 
Anna Podolynna, BAQ "How not to loose a QA focus and organize testing proces...
Anna Podolynna, BAQ  "How not to loose a QA focus and organize testing proces...Anna Podolynna, BAQ  "How not to loose a QA focus and organize testing proces...
Anna Podolynna, BAQ "How not to loose a QA focus and organize testing proces...Dakiry
 
Тестування ПЗ
Тестування ПЗТестування ПЗ
Тестування ПЗKyrylo Bezpalyi
 
Anton Serputko Start performance-testing-from-scratch, BAQ
Anton Serputko Start performance-testing-from-scratch, BAQAnton Serputko Start performance-testing-from-scratch, BAQ
Anton Serputko Start performance-testing-from-scratch, BAQDakiry
 
CoreCamp "Automated testing basics for developers"
CoreCamp "Automated testing basics for developers"CoreCamp "Automated testing basics for developers"
CoreCamp "Automated testing basics for developers"Bohdan Pashkovskyi
 
ЮЛІЯ МАЛИНОВСЬКА «Best practices of test design» Online QADay 2022 #2
ЮЛІЯ МАЛИНОВСЬКА «Best practices of test design» Online QADay 2022 #2ЮЛІЯ МАЛИНОВСЬКА «Best practices of test design» Online QADay 2022 #2
ЮЛІЯ МАЛИНОВСЬКА «Best practices of test design» Online QADay 2022 #2GoQA
 
Тестування при розробці програмного забезпечення. Unit Tests.
Тестування при розробці програмного забезпечення. Unit Tests.Тестування при розробці програмного забезпечення. Unit Tests.
Тестування при розробці програмного забезпечення. Unit Tests.Elantix
 
Роман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиці
Роман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиціРоман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиці
Роман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиціGoQA
 
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Чим ще SDET може розважити себе на проекті крім е2е тес...
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Чим ще SDET може розважити себе на проекті крім е2е тес...ОЛЕКСАНДР ХОТЕМСЬКИЙ «Чим ще SDET може розважити себе на проекті крім е2е тес...
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Чим ще SDET може розважити себе на проекті крім е2е тес...GoQA
 
природна і економна дорожня карта для переходу команди розробки на тест центр...
природна і економна дорожня карта для переходу команди розробки на тест центр...природна і економна дорожня карта для переходу команди розробки на тест центр...
природна і економна дорожня карта для переходу команди розробки на тест центр...Andrii Podanenko
 

Ähnlich wie Code driven testing (UA) (20)

ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»
ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»
ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»
 
QA Fest 2015. Ярослав Пернеровский. Мутанты наступают - смогут ли ваши тесты...
QA Fest 2015. Ярослав Пернеровский. Мутанты наступают - смогут ли ваши тесты...QA Fest 2015. Ярослав Пернеровский. Мутанты наступают - смогут ли ваши тесты...
QA Fest 2015. Ярослав Пернеровский. Мутанты наступают - смогут ли ваши тесты...
 
cpp-2013 #16 Automated testing
cpp-2013 #16 Automated testingcpp-2013 #16 Automated testing
cpp-2013 #16 Automated testing
 
МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...
МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...
МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...
 
ОЛЕГ ЗАРЕВИЧ «How did we improve delivery using tests» Lviv QA Day 2019
ОЛЕГ ЗАРЕВИЧ «How did we improve delivery using tests» Lviv QA Day 2019ОЛЕГ ЗАРЕВИЧ «How did we improve delivery using tests» Lviv QA Day 2019
ОЛЕГ ЗАРЕВИЧ «How did we improve delivery using tests» Lviv QA Day 2019
 
Руйнуємо .NET Міфи
Руйнуємо .NET МіфиРуйнуємо .NET Міфи
Руйнуємо .NET Міфи
 
Design patterns part 1
Design patterns part 1Design patterns part 1
Design patterns part 1
 
Automated testing
Automated testingAutomated testing
Automated testing
 
Anna Podolynna, BAQ "How not to loose a QA focus and organize testing proces...
Anna Podolynna, BAQ  "How not to loose a QA focus and organize testing proces...Anna Podolynna, BAQ  "How not to loose a QA focus and organize testing proces...
Anna Podolynna, BAQ "How not to loose a QA focus and organize testing proces...
 
Phpunit
PhpunitPhpunit
Phpunit
 
Тестування ПЗ
Тестування ПЗТестування ПЗ
Тестування ПЗ
 
Anton Serputko Start performance-testing-from-scratch, BAQ
Anton Serputko Start performance-testing-from-scratch, BAQAnton Serputko Start performance-testing-from-scratch, BAQ
Anton Serputko Start performance-testing-from-scratch, BAQ
 
Design patterns part 2
Design patterns part 2Design patterns part 2
Design patterns part 2
 
CoreCamp "Automated testing basics for developers"
CoreCamp "Automated testing basics for developers"CoreCamp "Automated testing basics for developers"
CoreCamp "Automated testing basics for developers"
 
ЮЛІЯ МАЛИНОВСЬКА «Best practices of test design» Online QADay 2022 #2
ЮЛІЯ МАЛИНОВСЬКА «Best practices of test design» Online QADay 2022 #2ЮЛІЯ МАЛИНОВСЬКА «Best practices of test design» Online QADay 2022 #2
ЮЛІЯ МАЛИНОВСЬКА «Best practices of test design» Online QADay 2022 #2
 
Тестування при розробці програмного забезпечення. Unit Tests.
Тестування при розробці програмного забезпечення. Unit Tests.Тестування при розробці програмного забезпечення. Unit Tests.
Тестування при розробці програмного забезпечення. Unit Tests.
 
Роман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиці
Роман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиціРоман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиці
Роман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиці
 
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Чим ще SDET може розважити себе на проекті крім е2е тес...
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Чим ще SDET може розважити себе на проекті крім е2е тес...ОЛЕКСАНДР ХОТЕМСЬКИЙ «Чим ще SDET може розважити себе на проекті крім е2е тес...
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Чим ще SDET може розважити себе на проекті крім е2е тес...
 
Testing in Ruby
Testing in RubyTesting in Ruby
Testing in Ruby
 
природна і економна дорожня карта для переходу команди розробки на тест центр...
природна і економна дорожня карта для переходу команди розробки на тест центр...природна і економна дорожня карта для переходу команди розробки на тест центр...
природна і економна дорожня карта для переходу команди розробки на тест центр...
 

Code driven testing (UA)

  • 1. Code-driven testing Аудиторія: розробники Олександр Павлишак, 2011 pavlyshak@gmail.com
  • 2. Agenda • Поняття Unit test • Підміна залежностей, stubs • Тестування взаємодій, mocks • Якості хороших тестів • Unit vs integration testing • Практики • Метрики
  • 3. Тестування • Починається разом із розробкою • Запускаємо і дивимось • Створюємо допоміжні засоби – Консольні програми – Допоміжний UI
  • 4. Unit test, визначення • Код (зазвичай, метод) • Який викликає інший код • І після цього перевіряє правильність • Деяких припущень • Unit = модуль, компонент • (функція, метод, клас, Unit of Work)
  • 5. Unit test [TestFixture] public class CalculatorTests { [Test] public void Sum_ReturnsCorrectValue() { var math = new Calculator(); int result = math.Sum(1, 2); Assert.AreEqual(3, result); } }
  • 6. Arrange/Act/Assert [TestFixture] public class CalculatorTests { [Test] public void Sum_ReturnsCorrectValue() { var math = new Calculator(); // Arrange int result = math.Sum(1, 2); // Act Assert.AreEqual(3, result); // Assert } }
  • 7. Єдиний assert/єдиний verify • Юніт-тест повинен тестувати щось одне • Назва тесту важлива [Test] public void Start_Test() { var survey = new Survey(); survey.Start(); Assert.AreEqual(SurveyState.InProgress, survey.State); Assert.IsTrue(survey.FinishDate > survey.StartDate); }
  • 8. Unit test framework • Виконання тестів – Одного, декількох, всіх – Інтеграція з IDE • API для написання тестів • Автоматизація • Перегляд результатів
  • 9. Unit test framework • NUnit, MS Test, MBUnit, DBUnit • JUnit, JWalk, TestNG, DBUnit • C++test, CppUnit, Google C++ Testing Fx • PyUnit
  • 13. DEMO [Test] public void Start_ChangesStateToInProgress() { var survey = new Survey(); survey.Start(); Assert.AreEqual(SurveyState.InProgress, survey.State); }
  • 14. Залежності • Survey залежить від EmailSender • Не хочемо відсилати справжні листи • Створюємо stub вручну • Створюємо stub автоматично • Все ще тестуємо стан! Assert.AreEqual(SurveyState.InProgress, survey.State);
  • 15. Interaction testing • Потреба тестувати взаємодії • Створюємо mock вручну • Створюємо mock автоматично • Один mock на тест • Тестуємо не стан, а взаємодію! mockEmailSender.Verify();
  • 16. Stubs + mocks • Один тест – один mock • Декілька stubs Fakes Stubs Mocks 0..* 0..1
  • 18. How unit testing helps • Швидший цикл тестування коду • Коротший фідбек про можливі дефекти • Дефекти дешевші
  • 19. Плюси тестів • Кращий код • Стабільніша нова функціональність • Більше впевненості у змінах • Менше регресій • Коротші цикли релізів
  • 21. Якості юніт тестів • Readable • Maintainable • Trustworthy
  • 22. Readable • Легко зрозуміти, що відбувається в тесті • Який код тестується • Які передумови • Які припущення перевіряються • Що тестує тест • Простий код тесту
  • 23. Trustworthy • Релевантні до помилок • Стабільно (не) проходять • Немає конфліктуючих тестів • Справді тестують
  • 24.
  • 25. Maintainable • Тести легко реагують на зміни • Не вимагають конфігурації • Не залежать від інших тестів • Простий код тесту
  • 27. Види тестів • Юніт • Інтеграційні • Інші
  • 28. Юніт тести • Тестують один модуль • Виконуються виключно в пам’яті • Не вимагають конфігурації • Не вимагають DB, FS, AD, Net • Завжди – Повторювано проходять – Або повторювано не проходять – Тому що не залежать від змінних факторів
  • 29. Інтеграційні тести • Тестують модулі разом • Можуть мати різну поведінку • В залежності від – Середовища (FS, DB, AD, OS, .config) – Порядку виконання – Кількості виконання – Багатопоточності – Повного місяця
  • 30. Інтеграційні тести -- Ознаки • TearDown() • DateTime.Now • Thread • Environment.MachineName • Database.Save(…) • File.Open(…)
  • 32. Trustworthy • Юніт-тести – ДОВІРА – Проходять --> мабуть немає дефекту – Не проходять --> точно є дефект • Інтеграційні тести – (деколи) НЕДОВІРА – Проходять --> немає дефекту – Не проходять --> можливо дефект
  • 34. Логіка в юніт-тестах • Asserts in if/switch/for/while • Значно підвищується ймовірність появи дефекта в тесті • Погіршується readability & maintainability
  • 35. Дублювання логіки production коду • Приклад • Tests last • Тест не тестує • Expected hardcoded values
  • 36. Magic numbers • Приклад • Найпростіші можливі значення • Оголошення і перевірка в тесті
  • 37. Зміна тестів • Створення: – У більшості випадків • Видалення: – Коли тест більше не потрібний • Редагування: – Для maintainability/readability – Для швидкості – Коли тест повинен виконуватись по-іншому
  • 38. Тестувальник знаходить дефект • Новий тест • Не повинен бути знайдений тестувальниками знову
  • 39. Що міряти • Кількість регресій • Час виправлення дефектів • Метрики якості коду • People feedback • Покриття (coverage)
  • 40. Обирайте усвідомлено • Тестування не безкоштовне • Надмірність тестів • Надмірність тестів взаємодій • 100% покриття не завжди потрібне
  • 41. На що дивитись далі • Unit testing patterns • Mocks/stubs/fakes, isolation frameworks • TDD, Test Driven Development • Contracts, Contract Driven Development
  • 42. Q&A Code-driven testing Олександр Павлишак, 2011 pavlyshak@gmail.com