SlideShare a Scribd company logo
Automated Testing
Про тестування
• Тестування не підвищує якість ПЗ,
• а сприяє розпізнаванню неправильної
  поведінки,
• завдяки чому розробники можуть знайти
  помилки і виправити їх
• Тестування не може довести відсутності
  дефектів
  – Лише їх наявність
• В будь-якій програмі є дефекти
Тестування
• Починається разом із розробкою
• Спосіб: запускаємо і дивимось чи працює
• Створюємо допоміжні засоби
  – Консольні програми
  – Допоміжний UI
Unit test, визначення
•   Код (зазвичай, метод)
•   Який викликає інший код
•   І після цього перевіряє правильність
•   Деяких припущень

• Unit = модуль, компонент
• (функція, метод, клас, Unit of Work)
Unit test framework
• Виконання тестів
  – Одного, декількох, всіх
  – Інтеграція з IDE
• API для написання тестів
• Автоматизація
• Перегляд результатів
Unit test framework
• NUnit, MS Test, Xunit, MBUnit, DBUnit
• Test runners:
  – Visual Studio, NUnit GUI/Console apps,
    ReSharper, TestDriven.Net, Gallio
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
    }
}
Що тестувати
• Код, що містить логіку
    private DateTime _startDate;

    // doesn’t need to be tested
    public DateTime StartDate
    {
        get { return _startDate; }
        set { _startDate = value; }
    }
Єдиний assert
• Юніт-тест повинен тестувати щось одне
• Назва тесту важлива
[Test]
public void Start_Test()
{
    var survey = new Survey();

    survey.Start();

    Assert.AreEqual(SurveyState.InProgress, survey.State);
    Assert.IsTrue(survey.FinishDate > survey.StartDate);
}
Залежності
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();
Особливості тестів на поведінку
• Реалізують
  діаграми послідовності
  (sequence diagram)
• Дозволяють розробляти
  “згори вниз”
• отримуючи API “нижчих” об’єктів
  “автоматично”
Stubs + mocks
• Один тест – один mock
• Декілька stubs

                 Fakes


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

More Related Content

Similar to Automated testing

Code driven testing (UA)
Code driven testing (UA)Code driven testing (UA)
Code driven testing (UA)
Oleksandr Pavlyshak
 
МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...
МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...
МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...
QADay
 
QA Fest 2015. Ярослав Пернеровский. Мутанты наступают - смогут ли ваши тесты...
QA Fest 2015. Ярослав Пернеровский. Мутанты наступают - смогут ли ваши тесты...QA Fest 2015. Ярослав Пернеровский. Мутанты наступают - смогут ли ваши тесты...
QA Fest 2015. Ярослав Пернеровский. Мутанты наступают - смогут ли ваши тесты...
QAFest
 
ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»
ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»
ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»
QADay
 
Руйнуємо .NET Міфи
Руйнуємо .NET МіфиРуйнуємо .NET Міфи
Руйнуємо .NET Міфи
Serhiy Kalinets
 
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
Dakiry
 
Php unit. Y. Muzychushun
Php unit. Y. MuzychushunPhp unit. Y. Muzychushun
Php unit. Y. MuzychushunHRdepartment
 
Automated testing
Automated testingAutomated testing
Automated testing
Bohdan Pashkovskyi
 
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
 
ОЛЕГ ЗАРЕВИЧ «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
QADay
 
Структура тест-кейсу та звіту про помилки.pptx
Структура тест-кейсу та звіту про помилки.pptxСтруктура тест-кейсу та звіту про помилки.pptx
Структура тест-кейсу та звіту про помилки.pptx
ssuser40c4fa
 
Clean code (UA)
Clean code (UA)Clean code (UA)
Clean code (UA)
Oleksandr Pavlyshak
 
РОМАН ЯКИМЧУК  "Задачі Тест Аналітика”  
РОМАН ЯКИМЧУК  "Задачі Тест Аналітика”  РОМАН ЯКИМЧУК  "Задачі Тест Аналітика”  
РОМАН ЯКИМЧУК  "Задачі Тест Аналітика”  
Dakiry
 
Тестування ПЗ
Тестування ПЗТестування ПЗ
Тестування ПЗ
Kyrylo Bezpalyi
 
природна і економна дорожня карта для переходу команди розробки на тест центр...
природна і економна дорожня карта для переходу команди розробки на тест центр...природна і економна дорожня карта для переходу команди розробки на тест центр...
природна і економна дорожня карта для переходу команди розробки на тест центр...
Andrii Podanenko
 
ЮЛІЯ МАЛИНОВСЬКА «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
QADay
 
Роман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиці
Роман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиціРоман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиці
Роман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиці
QADay
 

Similar to Automated testing (20)

Code driven testing (UA)
Code driven testing (UA)Code driven testing (UA)
Code driven testing (UA)
 
cpp-2013 #16 Automated testing
cpp-2013 #16 Automated testingcpp-2013 #16 Automated testing
cpp-2013 #16 Automated testing
 
МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...
МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...
МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...
 
QA Fest 2015. Ярослав Пернеровский. Мутанты наступают - смогут ли ваши тесты...
QA Fest 2015. Ярослав Пернеровский. Мутанты наступают - смогут ли ваши тесты...QA Fest 2015. Ярослав Пернеровский. Мутанты наступают - смогут ли ваши тесты...
QA Fest 2015. Ярослав Пернеровский. Мутанты наступают - смогут ли ваши тесты...
 
Design patterns part 1
Design patterns part 1Design patterns part 1
Design patterns part 1
 
ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»
ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»
ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»
 
Руйнуємо .NET Міфи
Руйнуємо .NET МіфиРуйнуємо .NET Міфи
Руйнуємо .NET Міфи
 
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
 
Php unit. Y. Muzychushun
Php unit. Y. MuzychushunPhp unit. Y. Muzychushun
Php unit. Y. Muzychushun
 
Automated testing
Automated testingAutomated testing
Automated testing
 
CoreCamp "Automated testing basics for developers"
CoreCamp "Automated testing basics for developers"CoreCamp "Automated testing basics for developers"
CoreCamp "Automated testing basics for developers"
 
ОЛЕГ ЗАРЕВИЧ «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
 
Структура тест-кейсу та звіту про помилки.pptx
Структура тест-кейсу та звіту про помилки.pptxСтруктура тест-кейсу та звіту про помилки.pptx
Структура тест-кейсу та звіту про помилки.pptx
 
Clean code (UA)
Clean code (UA)Clean code (UA)
Clean code (UA)
 
РОМАН ЯКИМЧУК  "Задачі Тест Аналітика”  
РОМАН ЯКИМЧУК  "Задачі Тест Аналітика”  РОМАН ЯКИМЧУК  "Задачі Тест Аналітика”  
РОМАН ЯКИМЧУК  "Задачі Тест Аналітика”  
 
Тестування ПЗ
Тестування ПЗТестування ПЗ
Тестування ПЗ
 
природна і економна дорожня карта для переходу команди розробки на тест центр...
природна і економна дорожня карта для переходу команди розробки на тест центр...природна і економна дорожня карта для переходу команди розробки на тест центр...
природна і економна дорожня карта для переходу команди розробки на тест центр...
 
ЮЛІЯ МАЛИНОВСЬКА «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
 
Роман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиці
Роман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиціРоман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиці
Роман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиці
 

More from Victor Matyushevskyy (19)

Multithreading and parallelism
Multithreading and parallelismMultithreading and parallelism
Multithreading and parallelism
 
Mobile applications development
Mobile applications developmentMobile applications development
Mobile applications development
 
Service oriented programming
Service oriented programmingService oriented programming
Service oriented programming
 
ASP.Net MVC
ASP.Net MVCASP.Net MVC
ASP.Net MVC
 
ASP.Net part 2
ASP.Net part 2ASP.Net part 2
ASP.Net part 2
 
Java script + extjs
Java script + extjsJava script + extjs
Java script + extjs
 
ASP.Net basics
ASP.Net basics ASP.Net basics
ASP.Net basics
 
Основи Баз даних та MS SQL Server
Основи Баз даних та MS SQL ServerОснови Баз даних та MS SQL Server
Основи Баз даних та MS SQL Server
 
Usability
UsabilityUsability
Usability
 
Windows forms
Windows formsWindows forms
Windows forms
 
Practices
PracticesPractices
Practices
 
06.1 .Net memory management
06.1 .Net memory management06.1 .Net memory management
06.1 .Net memory management
 
06 LINQ
06 LINQ06 LINQ
06 LINQ
 
05 functional programming
05 functional programming05 functional programming
05 functional programming
 
04 standard class library c#
04 standard class library c#04 standard class library c#
04 standard class library c#
 
#3 Об'єктно орієнтоване програмування (ч. 2)
#3 Об'єктно орієнтоване програмування (ч. 2)#3 Об'єктно орієнтоване програмування (ч. 2)
#3 Об'єктно орієнтоване програмування (ч. 2)
 
#2 Об'єктно орієнтоване програмування (ч. 1)
#2 Об'єктно орієнтоване програмування (ч. 1)#2 Об'єктно орієнтоване програмування (ч. 1)
#2 Об'єктно орієнтоване програмування (ч. 1)
 
#1 C# basics
#1 C# basics#1 C# basics
#1 C# basics
 
#0 Вступна лекція
#0 Вступна лекція#0 Вступна лекція
#0 Вступна лекція
 

Automated testing

  • 2. Про тестування • Тестування не підвищує якість ПЗ, • а сприяє розпізнаванню неправильної поведінки, • завдяки чому розробники можуть знайти помилки і виправити їх • Тестування не може довести відсутності дефектів – Лише їх наявність • В будь-якій програмі є дефекти
  • 3. Тестування • Починається разом із розробкою • Спосіб: запускаємо і дивимось чи працює • Створюємо допоміжні засоби – Консольні програми – Допоміжний UI
  • 4. Unit test, визначення • Код (зазвичай, метод) • Який викликає інший код • І після цього перевіряє правильність • Деяких припущень • Unit = модуль, компонент • (функція, метод, клас, Unit of Work)
  • 5. Unit test framework • Виконання тестів – Одного, декількох, всіх – Інтеграція з IDE • API для написання тестів • Автоматизація • Перегляд результатів
  • 6. Unit test framework • NUnit, MS Test, Xunit, MBUnit, DBUnit • Test runners: – Visual Studio, NUnit GUI/Console apps, ReSharper, TestDriven.Net, Gallio
  • 7. 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); } }
  • 8. 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 } }
  • 9. Що тестувати • Код, що містить логіку private DateTime _startDate; // doesn’t need to be tested public DateTime StartDate { get { return _startDate; } set { _startDate = value; } }
  • 10. Єдиний assert • Юніт-тест повинен тестувати щось одне • Назва тесту важлива [Test] public void Start_Test() { var survey = new Survey(); survey.Start(); Assert.AreEqual(SurveyState.InProgress, survey.State); Assert.IsTrue(survey.FinishDate > survey.StartDate); }
  • 12. DEMO [Test] public void Start_ChangesStateToInProgress() { var survey = new Survey(); survey.Start(); Assert.AreEqual(SurveyState.InProgress, survey.State); }
  • 13. Залежності • Survey залежить від EmailSender • Не хочемо відсилати справжні листи • Створюємо stub вручну • Створюємо stub автоматично • Все ще тестуємо стан! Assert.AreEqual(SurveyState.InProgress, survey.State);
  • 14. Interaction testing • Потреба тестувати взаємодії • Створюємо mock вручну • Створюємо mock автоматично • Один mock на тест • Тестуємо не стан, а взаємодію! mockEmailSender.Verify();
  • 15. Особливості тестів на поведінку • Реалізують діаграми послідовності (sequence diagram) • Дозволяють розробляти “згори вниз” • отримуючи API “нижчих” об’єктів “автоматично”
  • 16. Stubs + mocks • Один тест – один mock • Декілька stubs Fakes Stubs Mocks 0..* 0..1
  • 18. How unit testing helps • Швидший цикл тестування коду • Коротший фідбек про можливі дефекти • Дефекти дешевші
  • 19. Плюси тестів • Кращий код • Стабільніша нова функціональність • Більше впевненості у змінах • Менше регресій • Коротші цикли релізів
  • 21. Види тестів • Юніт • Інтеграційні • Інші
  • 22. Юніт тести • Тестують один модуль • Виконуються виключно в пам’яті • Не вимагають конфігурації • Не вимагають DB, FS, AD, Net • Завжди – Повторювано проходять – Або повторювано не проходять – Тому що не залежать від змінних факторів
  • 23. Інтеграційні тести • Тестують модулі разом • Можуть мати різну поведінку • В залежності від – Середовища (FS, DB, AD, OS, .config) – Порядку виконання – Кількості виконання – Багатопоточності – Повного місяця
  • 24. Інтеграційні тести -- Ознаки • TearDown() • DateTime.Now • Thread • Environment.MachineName • Database.Save(…) • File.Open(…)
  • 25. Структура проекту • Чітке розділення UT та IT
  • 26. Trustworthy • Юніт-тести – ДОВІРА – Проходять --> мабуть немає дефекту – Не проходять --> точно є дефект • Інтеграційні тести – (деколи) НЕДОВІРА – Проходять --> немає дефекту – Не проходять --> можливо дефект
  • 28. Якщо в коді помилка, тести повинні це показувати • Спосіб перевірки – внести помилку і перевірити, як тести про це сповіщають
  • 29. Логіка в юніт-тестах • Asserts in if/switch/for/while • Значно підвищується ймовірність появи дефекта в тесті • Погіршується readability & maintainability
  • 30. Дублювання логіки production коду • Приклад • Tests last • Тест не тестує • Expected hardcoded values
  • 31. Magic numbers • Приклад • Найпростіші можливі значення • Оголошення і перевірка в тесті
  • 32. Зміна тестів • Створення: – У більшості випадків • Видалення: – Коли тест більше не потрібний • Редагування: – Для maintainability/readability – Для швидкості – Коли тест повинен виконуватись по-іншому
  • 33. Тестувальник знаходить дефект • Пишемо новий тест • Дефект не повинен бути знайдений тестувальниками знову