SlideShare a Scribd company logo
Automated testing
BOHDAN PASHKOVSKYI
INSPIRED BY O.PAVLYSHAK AND ELEKS COURSES
SAAS APPS
Що таке тестування?
Тестування програмного забезпечення — процес перевірки на відповідність між реальною
та очікуваною поведінкою програми.
Починається разом із розробкою
• Запускаємо і дивимось чи працює
• Створюємо допоміжні засоби
• Консольні програми
• Допоміжний UI
SAAS APPS
Навіщо тестувати програми?
◦ Тестування не підвищує якість ПЗ, а сприяє розпізнаванню неправильної поведінки, завдяки чому
розробники можуть знайти помилки і виправити їх;
◦ Тестування не може довести відсутності дефектів, лише їх наявність
◦ В будь-якій програмі є дефекти
SAAS APPS
Яким буває тестування?
SAAS APPS
Нефункціональне тестування Тестування пов’язане зі змінамиФункціональне тестування
Модульне
Інтеграційне
Системне
Приймальне
Тестування
продуктивності
Відказостійкості
Установки
Зручності
Регресійне
На дим
Санітарне
Функціональне тестування
Модульне тестування (англ. Unit testing) — це метод тестування програмного забезпечення, який полягає в окремому тестуванні
кожного модуля коду програми. Модулем називають найменшу частину програми, яку може бути протестованою (об’єкт, клас,
функція).
Інтеграційне тестування (англ. Integration testing) — це фаза тестування програмного забезпечення, під час якої окремі модулі
програми комбінуються та тестуються разом, у взаємодії.
Системне тестування (англ. System testing) тестує інтегровану систему для перевірки відповідності всім вимогам. Виявляє наступні
дефекти:
• невірне використання ресурсів системи,
• непередбачувані комбінації даних користувальницького рівня,
• несумісність із оточенням,
• непередбачувані сценарії використання,
• відсутня або невірна функціональність,
• незручність у застосуванні тощо.
Приймальне тестування (англ. Acceptance testing) – формальний процес тестування, який перевіряє відповідність системи вимогам
і проводиться з метою визначення чи задовільняє система приймальним критеріям замовника.
SAAS APPS
Модульне (unit) тестування
Unit test, визначення:
◦ це код (зазвичай, метод), який викликає інший код (production) і після цього перевіряє
правильність деяких припущень
SAAS APPS
Модульні тести
Тестують один модуль
Виконуються виключно в пам’яті
Не вимагають конфігурації
Не вимагають DB, FS, AD, Net
Завжди
◦ Повторювано проходять
◦ Або повторювано не проходять
◦ Тому що не залежать від змінних факторів
SAAS APPS
Інтеграційні тести
Тестують модулі разом
Можуть мати різну поведінку
В залежності від
◦ Середовища (FS, DB, AD, OS, .config)
◦ Порядку виконання
◦ Кількості виконання
◦ Багатопоточності
◦ Повного місяця
SAAS APPS
Ознаки інтеграціних тестів
TearDown()
DateTime.Now
Thread
Environment.MachineName
Database.Save(…)
File.Open(…)
SAAS APPS
Unit test
framework
•Виконання тестів
• Одного, декількох, всіх
• Інтеграція з IDE
• API для написання тестів
• Автоматизація
• Перегляд результатів
NUnit, MS Test, Xunit,
MBUnit, DBUnit
Test runners:
Visual Studio, NUnit
GUI/Console apps, ReSharper,
SAAS APPS
Приклад
модульного
тесту
[TestClass]
public class OrderTests
{
[TestMethod]
public void
OrderApproval_ShouldChangeOrderStatusToApproved()
{
var order = new Order();
order.Approve();
Assert.AreEqual(OrderStatus.Approved,
order.Status);
}
}
SAAS APPS
A A A
Arrange/Act/Assert
SAAS APPS
[TestClass]
public class OrderTests
{
[TestMethod]
public void
OrderApproval_ShouldChangeOrderStatusToApproved()
{
var order = new Order(); // Arrange
order.Approve(); // Act
Assert.AreEqual(OrderStatus.Approved,
order.Status); // Assert
}
}
Що тестувати?
Код, що містить логіку
public class Order
{
private string _title;
public string Title
{
get { return _title; }
set { _title = value; }
}
SAAS APPS
Єдиний Assert
[TestClass]
public class OrderTests
{
[TestMethod]
public void OrderApproval
_ShouldChangeOrderStatusToApproved
_AndOrderApproverShouldntBeNull()
{
var order = new Order();
order.Approve();
Assert.AreEqual(OrderStatus.Approved,
order.Status);
Assert.IsNotNull(order.OrderApprover);
}
}
SAAS APPS
Залежності
class OrderManager
{
public void ApproveOrder(Order orderToApprove)
{
orderToApprove.Approve();
var mailSender = new MailSender();
mailSender.Send("admin@saasap.net", "Order was
approved");
}
}
SAAS APPS
Dependency injection
DI – це процес надання зовнішньої залежності програмному компоненту. Є специфічною
формою «інверсії керування» (Inversion of Control, IoC)
Розрізняють дві основні форми DI (взагалі-то три )
- ін’єкція у конструктор (constructor injection)
- ін’єкція у властивість (setter/property injection)
SAAS APPS
DI (крок 1 –
абстрагування)
public interface IMailSender
{
void Send(string address, string message);
}
public class MailSender : IMailSender
{
public void Send(string email, string message)
{ ... }
}
SAAS APPS
Constructor
injection
class OrderManager
{
private readonly IMailSender _mailSender;
public OrderManager(IMailSender mailSender)
{
_mailSender = mailSender;
}
public void ApproveOrder(Order orderToApprove)
{
orderToApprove.Approve();
_mailSender.Send("admin@saasap.net", "Order was
approved");
}
}
declaration
SAAS APPS
Constructor
injection var mailSender = new MailSender();
var orderManager = new OrderManager(mailSender);
orderManager.ApproveOrder(orderToApprove);
usage
SAAS APPS
Setter injection
class OrderManager
{
public IMailSender MailSender { get; set; }
public void ApproveOrder(Order orderToApprove)
{
orderToApprove.Approve();
MailSender.Send("admin@saasap.net", "Order was
approved");
}
}
declaration
SAAS APPS
Setter injection var mailSender = new MailSender();
var orderManager = new OrderManager();
orderManager.MailSender = mailSender;
orderManager.ApproveOrder(orderToApprove);
usage
SAAS APPS
IoC containers
Structuremap
public class IOCConfig
{
public static Container Container;
public static void Initialize()
{
Container = new Container(x =>
{
x.For<IMailSender>().Use<MailSender>(); // constructor
x.Policies.FillAllPropertiesOfType<IMailSender>().Use<MailSender>();
// setter
});
}
}
public class Test
{
public IMailSender MailSender = IOCConfig.Container.GetInstance<IMailSender>();
}
Unity Application Block 2.0
Spring.NET
Structuremap
CastleProject
Seasar
Winter.NET
Ninject
SAAS APPS
Stubs
public class StubMailSender : IMailSender
{
public void Send(string email, string message)
{
// do nothing
}
}
[TestMethod]
public void OrderApproveMethod_ShouldChangeOrderStatusToApproved()
{
// Arrange
var order = new Order();
var orderManager = new OrderManager(new StubMailSender());
// Act
orderManager.ApproveOrder(order);
// Assert
Assert.AreEqual(OrderStatus.Approved, order.Status);
}
Стаби (заглушки) використовуються
для того, щоб не використовувати
реальні залежності (файлову
систему, БД, поштові серери, тощо).
Це дозволяє тестувати тільки
необхідний компонент
Стабів у тесті може бути багато.
SAAS APPS
Isolation
frameworks
Stubs with Moq
[TestMethod]
public void
OrderApproveMethod_ShouldChangeOrderStatusToApproved()
{
// Arrange
var order = new Order();
var stubMailSender = new Mock<IMailSender>();
var orderManager = new
OrderManager(stubMailSender.Object);
// Act
orderManager.ApproveOrder(order);
// Assert, все ще тестуємо стан
Assert.AreEqual(OrderStatus.Approved, order.Status);
}
Moq, RhinoMocks, etc
SAAS APPS
Mocks
[TestMethod]
public void OrderApproveMethod_ShouldChangeOrderStatusToApproved()
{
// Arrange
var order = new Order();
var mockMailSender = new Mock<IMailSender>();
mockMailSender.Setup(ms => ms.Send(
"admin@saasap.net",
It.IsAny<string>()))
.Verifiable();
var orderManager = new OrderManager(mockMailSender.Object);
// Act
orderManager.ApproveOrder(order);
// Assert
mockMailSender.Verify();
}
Mock використовуються для того,
щоб протестувати взаємодію
залежностей.
Мок може бути лише один у тесті.
Один Assert = Один Verify
SAAS APPS
Stubs + mocks
Один тест – один mock, але декілька stubs
SAAS APPS
Fakes
Stubs
0..*
Mocks
0..1
Переваги модульних тестів
• Швидший цикл тестування коду
• Коротший фідбек про можливі дефекти
• Дефекти дешевші
• Кращий код
• Стабільніша нова функціональність
• Більше впевненості у змінах
• Менше регресій
• Коротші цикли релізів
SAAS APPS
Якості модульних тестів
• Readable
• Maintainable
• Trustworthy
SAAS APPS
Readable
Легко зрозуміти:
• Що відбувається в тесті
• Який код тестується
• Які передумови
• Які припущення перевіряються
• Що тестує тест
• Простий код тесту
SAAS APPS
Trustworthy
• Релевантні до помилок
• Стабільно (не) проходять
• Немає конфліктуючих тестів
• Справді тестують
SAAS APPS
Maintainable
• Тести легко реагують на зміни
• Не вимагають конфігурації
• Не залежать від інших тестів
• Простий код тесту
SAAS APPS
TDD
Test driven development
- Write test (red line)
- Write code (green line)
- Refactor
SAAS APPS
BDD
Behaviour driven develoment
SAAS APPS
Speckflow
BDD framework (Cucumber for .NET)
SAAS APPS
Speckflow
Feature example
SAAS APPS
Feature: Calculator_Add
In order to avoid silly mistakes
As a math idiot
I want to be told the sum of two numbers
Background:
Given I have a calculator
Scenario: Add two numbers
Given I enter 50 into the calculator
And I press plus
And I enter 70 into the calculator
When I press enter
Then the result should be 120 be displayed
Speckflow
Bindings
SAAS APPS
[Binding]
public class Calculator_SharedSteps
{
[Given(@"I have a calculator")]
public void GivenIHaveACalculator()
{
ScenarioContext.Current.Set<Calculator>(new Calculator());
}
[Given(@"I enter (.*) into the calculator")]
public void GivenIEnterIntoTheCalculator(int p0)
{
ScenarioContext.Current.Get<Calculator>().Number(p0);
}
[When(@"I press enter")]
public void WhenIPressEnter()
{
ScenarioContext.Current.Get<Calculator>().Enter();
}
[Then(@"the result should be (.*) be displayed")]
public void ThenTheResultShouldBeBeDisplayed(int p0)
{
Assert.AreEqual(Convert.ToString(p0), ScenarioContext.Current.Get<Calculator>().Display);
}
}
Specflow
Feature: Login page should give ability to Login or Register for
Background:
Given I am not logged in
And I am on "/account/login" page
Scenario: When I enter empty pass in Login form, I should see error message
When I have filled out the form as follows
| Id | Value |
| Login_Password | |
And I press input type "submit" with value „Login"
Then I should see error „Required" for Login_Password
Scenario: If I am logged In a am redirected to account details
When I log in as user
And I go to "/account/login" page
Then I should be on page "/account/details"
Web example
SAAS APPS
Code coverage
SAAS APPS

More Related Content

Similar to Automated testing

РОМАН ДУМАНСЬКИЙ «Testing the application in the Amazon Cloud»
РОМАН ДУМАНСЬКИЙ «Testing the application in the Amazon Cloud»РОМАН ДУМАНСЬКИЙ «Testing the application in the Amazon Cloud»
РОМАН ДУМАНСЬКИЙ «Testing the application in the Amazon Cloud»
QADay
 
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
 
Тестування Програмного Забезпечення на Практиці - Червень 2014
Тестування Програмного Забезпечення на Практиці - Червень 2014Тестування Програмного Забезпечення на Практиці - Червень 2014
Тестування Програмного Забезпечення на Практиці - Червень 2014QualityAssuranceGroup
 
13 testing
13 testing13 testing
13 testingeleksdev
 
Aspnet core
Aspnet coreAspnet core
Aspnet core
eleksdev
 
ОЛЕГ ЗАРЕВИЧ «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
 
Процес забезпечення якості програмних продуктів
Процес забезпечення якості програмних продуктівПроцес забезпечення якості програмних продуктів
Процес забезпечення якості програмних продуктівIgor Bronovskyy
 
Masters Academy: Трендові інструменти розробки
Masters Academy: Трендові інструменти розробкиMasters Academy: Трендові інструменти розробки
Masters Academy: Трендові інструменти розробки
Masters Academy
 
Євгеній Пасєка, Володимир Ревак “Як протестувати медичний проект і не зашкоди...
Євгеній Пасєка, Володимир Ревак “Як протестувати медичний проект і не зашкоди...Євгеній Пасєка, Володимир Ревак “Як протестувати медичний проект і не зашкоди...
Євгеній Пасєка, Володимир Ревак “Як протестувати медичний проект і не зашкоди...
Dakiry
 
Тестування при розробці програмного забезпечення. Unit Tests.
Тестування при розробці програмного забезпечення. Unit Tests.Тестування при розробці програмного забезпечення. Unit Tests.
Тестування при розробці програмного забезпечення. Unit Tests.
Elantix
 
Automation as a Way to Do Routine Work Quickly and Effortlessly
Automation as a Way to Do Routine Work Quickly and EffortlesslyAutomation as a Way to Do Routine Work Quickly and Effortlessly
Automation as a Way to Do Routine Work Quickly and Effortlessly
GlobalLogic Ukraine
 
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
Exoft LLC
 
СЕРГІЙ РУСІНЧУК «Розкриття майстерності QA команд через KPI»
СЕРГІЙ РУСІНЧУК «Розкриття майстерності QA команд через KPI»СЕРГІЙ РУСІНЧУК «Розкриття майстерності QA команд через KPI»
СЕРГІЙ РУСІНЧУК «Розкриття майстерності QA команд через KPI»
QADay
 
Роман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиці
Роман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиціРоман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиці
Роман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиці
QADay
 
Caliburn Micro Overview
Caliburn Micro OverviewCaliburn Micro Overview
Caliburn Micro Overview
Kiev ALT.NET
 
РІНА УЖЕВКО «Вплив архітектури на стратегію тестування»
РІНА УЖЕВКО «Вплив архітектури на стратегію тестування»РІНА УЖЕВКО «Вплив архітектури на стратегію тестування»
РІНА УЖЕВКО «Вплив архітектури на стратегію тестування»
QADay
 
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
 

Similar to Automated testing (20)

РОМАН ДУМАНСЬКИЙ «Testing the application in the Amazon Cloud»
РОМАН ДУМАНСЬКИЙ «Testing the application in the Amazon Cloud»РОМАН ДУМАНСЬКИЙ «Testing the application in the Amazon Cloud»
РОМАН ДУМАНСЬКИЙ «Testing the application in the Amazon Cloud»
 
CoreCamp "Automated testing basics for developers"
CoreCamp "Automated testing basics for developers"CoreCamp "Automated testing basics for developers"
CoreCamp "Automated testing basics for developers"
 
Тестування Програмного Забезпечення на Практиці - Червень 2014
Тестування Програмного Забезпечення на Практиці - Червень 2014Тестування Програмного Забезпечення на Практиці - Червень 2014
Тестування Програмного Забезпечення на Практиці - Червень 2014
 
13 testing
13 testing13 testing
13 testing
 
Aspnet core
Aspnet coreAspnet core
Aspnet core
 
ОЛЕГ ЗАРЕВИЧ «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
 
Процес забезпечення якості програмних продуктів
Процес забезпечення якості програмних продуктівПроцес забезпечення якості програмних продуктів
Процес забезпечення якості програмних продуктів
 
Masters Academy: Трендові інструменти розробки
Masters Academy: Трендові інструменти розробкиMasters Academy: Трендові інструменти розробки
Masters Academy: Трендові інструменти розробки
 
Євгеній Пасєка, Володимир Ревак “Як протестувати медичний проект і не зашкоди...
Євгеній Пасєка, Володимир Ревак “Як протестувати медичний проект і не зашкоди...Євгеній Пасєка, Володимир Ревак “Як протестувати медичний проект і не зашкоди...
Євгеній Пасєка, Володимир Ревак “Як протестувати медичний проект і не зашкоди...
 
Тестування при розробці програмного забезпечення. Unit Tests.
Тестування при розробці програмного забезпечення. Unit Tests.Тестування при розробці програмного забезпечення. Unit Tests.
Тестування при розробці програмного забезпечення. Unit Tests.
 
ASP.Net basics
ASP.Net basics ASP.Net basics
ASP.Net basics
 
Automation as a Way to Do Routine Work Quickly and Effortlessly
Automation as a Way to Do Routine Work Quickly and EffortlesslyAutomation as a Way to Do Routine Work Quickly and Effortlessly
Automation as a Way to Do Routine Work Quickly and Effortlessly
 
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
 
СЕРГІЙ РУСІНЧУК «Розкриття майстерності QA команд через KPI»
СЕРГІЙ РУСІНЧУК «Розкриття майстерності QA команд через KPI»СЕРГІЙ РУСІНЧУК «Розкриття майстерності QA команд через KPI»
СЕРГІЙ РУСІНЧУК «Розкриття майстерності QA команд через KPI»
 
Роман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиці
Роман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиціРоман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиці
Роман Писик - ISTQB Full Advanced: підготовка та застосування знань на практиці
 
Design patterns part 2
Design patterns part 2Design patterns part 2
Design patterns part 2
 
Caliburn Micro Overview
Caliburn Micro OverviewCaliburn Micro Overview
Caliburn Micro Overview
 
РІНА УЖЕВКО «Вплив архітектури на стратегію тестування»
РІНА УЖЕВКО «Вплив архітектури на стратегію тестування»РІНА УЖЕВКО «Вплив архітектури на стратегію тестування»
РІНА УЖЕВКО «Вплив архітектури на стратегію тестування»
 
MOM
MOMMOM
MOM
 
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...
 

More from Bohdan Pashkovskyi

Telegram bots
Telegram botsTelegram bots
Telegram bots
Bohdan Pashkovskyi
 
CQRS and Event Sourcing
CQRS and Event SourcingCQRS and Event Sourcing
CQRS and Event Sourcing
Bohdan Pashkovskyi
 
C# Lesson 3
C# Lesson 3C# Lesson 3
C# Lesson 3
Bohdan Pashkovskyi
 
C# Lesson 1
C# Lesson 1C# Lesson 1
C# Lesson 1
Bohdan Pashkovskyi
 
IF .NET User Group
IF .NET User GroupIF .NET User Group
IF .NET User Group
Bohdan Pashkovskyi
 
Asynchronous programming in C#
Asynchronous programming in C#Asynchronous programming in C#
Asynchronous programming in C#
Bohdan Pashkovskyi
 
ASP .NET MVC - best practices
ASP .NET MVC - best practicesASP .NET MVC - best practices
ASP .NET MVC - best practices
Bohdan Pashkovskyi
 
.Net Core
.Net Core.Net Core

More from Bohdan Pashkovskyi (8)

Telegram bots
Telegram botsTelegram bots
Telegram bots
 
CQRS and Event Sourcing
CQRS and Event SourcingCQRS and Event Sourcing
CQRS and Event Sourcing
 
C# Lesson 3
C# Lesson 3C# Lesson 3
C# Lesson 3
 
C# Lesson 1
C# Lesson 1C# Lesson 1
C# Lesson 1
 
IF .NET User Group
IF .NET User GroupIF .NET User Group
IF .NET User Group
 
Asynchronous programming in C#
Asynchronous programming in C#Asynchronous programming in C#
Asynchronous programming in C#
 
ASP .NET MVC - best practices
ASP .NET MVC - best practicesASP .NET MVC - best practices
ASP .NET MVC - best practices
 
.Net Core
.Net Core.Net Core
.Net Core
 

Recently uploaded

ПРЕЗЕНТАЦІЯ ПРО СХОВИЩЕ захисна споруда.pptx
ПРЕЗЕНТАЦІЯ ПРО СХОВИЩЕ захисна споруда.pptxПРЕЗЕНТАЦІЯ ПРО СХОВИЩЕ захисна споруда.pptx
ПРЕЗЕНТАЦІЯ ПРО СХОВИЩЕ захисна споруда.pptx
ssuserd1824d
 
Зернобобові культури в Україні: сучасний стан та перспективи використання
Зернобобові культури в Україні: сучасний стан та перспективи використанняЗернобобові культури в Україні: сучасний стан та перспективи використання
Зернобобові культури в Україні: сучасний стан та перспективи використання
Vinnytsia Regional Universal Scientific Library named after Valentin Otamanovsky
 
Практика студентів на складі одягу H&M у Польщі
Практика студентів на складі одягу H&M у ПольщіПрактика студентів на складі одягу H&M у Польщі
Практика студентів на складі одягу H&M у Польщі
tetiana1958
 
zvit_kerivnuka_ZDO28_2023-2024_n.rik.pptx
zvit_kerivnuka_ZDO28_2023-2024_n.rik.pptxzvit_kerivnuka_ZDO28_2023-2024_n.rik.pptx
zvit_kerivnuka_ZDO28_2023-2024_n.rik.pptx
sadochok
 
Звіт за результатами самооцінювання щодо освітнього середовища
Звіт за результатами самооцінювання щодо освітнього середовищаЗвіт за результатами самооцінювання щодо освітнього середовища
Звіт за результатами самооцінювання щодо освітнього середовища
ssuserce4e97
 
Випуск магістрів- науковців факультету мехатроніки та інжинірингу, 2024 р.
Випуск магістрів- науковців факультету мехатроніки та інжинірингу, 2024 р.Випуск магістрів- науковців факультету мехатроніки та інжинірингу, 2024 р.
Випуск магістрів- науковців факультету мехатроніки та інжинірингу, 2024 р.
tetiana1958
 
Основи_історичної_просвіти_—_для_перекладу.pdf
Основи_історичної_просвіти_—_для_перекладу.pdfОснови_історичної_просвіти_—_для_перекладу.pdf
Основи_історичної_просвіти_—_для_перекладу.pdf
olaola5673
 
zarahuvannia do pershogo klassu IMG_20240607_0001.pdf
zarahuvannia do pershogo klassu IMG_20240607_0001.pdfzarahuvannia do pershogo klassu IMG_20240607_0001.pdf
zarahuvannia do pershogo klassu IMG_20240607_0001.pdf
AleksSaf
 
Управлінські процеси закладу освіти.pptx
Управлінські процеси закладу освіти.pptxУправлінські процеси закладу освіти.pptx
Управлінські процеси закладу освіти.pptx
ssuserce4e97
 
Звіт самооцінювання осв. середовище 2024.ppt
Звіт самооцінювання осв. середовище 2024.pptЗвіт самооцінювання осв. середовище 2024.ppt
Звіт самооцінювання осв. середовище 2024.ppt
ssuserce4e97
 
Р.Л.Стівенсон "Вересовий трунок". Презентація
Р.Л.Стівенсон "Вересовий трунок". ПрезентаціяР.Л.Стівенсон "Вересовий трунок". Презентація
Р.Л.Стівенсон "Вересовий трунок". Презентація
Adriana Himinets
 
Оригінал. Переклад. Види перекладів. Допомога учню
Оригінал. Переклад. Види перекладів. Допомога учнюОригінал. Переклад. Види перекладів. Допомога учню
Оригінал. Переклад. Види перекладів. Допомога учню
Adriana Himinets
 
Звіт директора за 2023-2024 н. р. [Автозбережено].ppt
Звіт директора  за 2023-2024 н. р. [Автозбережено].pptЗвіт директора  за 2023-2024 н. р. [Автозбережено].ppt
Звіт директора за 2023-2024 н. р. [Автозбережено].ppt
ssuser59c0a2
 
"Він плакав і сміявся з народом: творчий спадок Федьковича"
"Він плакав і сміявся з народом: творчий спадок Федьковича""Він плакав і сміявся з народом: творчий спадок Федьковича"
"Він плакав і сміявся з народом: творчий спадок Федьковича"
Чернівецька обласна бібліотека для дітей
 
Р.Л.Стівенсон "Вересовий трунок". Допомога учню
Р.Л.Стівенсон "Вересовий трунок". Допомога учнюР.Л.Стівенсон "Вересовий трунок". Допомога учню
Р.Л.Стівенсон "Вересовий трунок". Допомога учню
Adriana Himinets
 
Звіт директора КЗО "СЗШ №124" ДМР 2023-2024 н.р.
Звіт директора КЗО "СЗШ №124" ДМР 2023-2024 н.р.Звіт директора КЗО "СЗШ №124" ДМР 2023-2024 н.р.
Звіт директора КЗО "СЗШ №124" ДМР 2023-2024 н.р.
Pervushina1983
 
Постанова №648 уряду від 04 червня 2024 року. .pdf
Постанова №648 уряду від 04 червня 2024 року. .pdfПостанова №648 уряду від 04 червня 2024 року. .pdf
Постанова №648 уряду від 04 червня 2024 року. .pdf
24tvua
 
звіт 2023-2024 32024 32024 32024 32024 3.pptx
звіт 2023-2024 32024 32024 32024 32024 3.pptxзвіт 2023-2024 32024 32024 32024 32024 3.pptx
звіт 2023-2024 32024 32024 32024 32024 3.pptx
home
 
педрада 2024 травень 2педрада 2024 травень .pptx
педрада 2024 травень 2педрада 2024 травень .pptxпедрада 2024 травень 2педрада 2024 травень .pptx
педрада 2024 травень 2педрада 2024 травень .pptx
home
 
Наказ про зарахування 1 класу 2024 2025.pdf
Наказ про зарахування 1 класу 2024 2025.pdfНаказ про зарахування 1 класу 2024 2025.pdf
Наказ про зарахування 1 класу 2024 2025.pdf
Ostap Vuschna
 

Recently uploaded (20)

ПРЕЗЕНТАЦІЯ ПРО СХОВИЩЕ захисна споруда.pptx
ПРЕЗЕНТАЦІЯ ПРО СХОВИЩЕ захисна споруда.pptxПРЕЗЕНТАЦІЯ ПРО СХОВИЩЕ захисна споруда.pptx
ПРЕЗЕНТАЦІЯ ПРО СХОВИЩЕ захисна споруда.pptx
 
Зернобобові культури в Україні: сучасний стан та перспективи використання
Зернобобові культури в Україні: сучасний стан та перспективи використанняЗернобобові культури в Україні: сучасний стан та перспективи використання
Зернобобові культури в Україні: сучасний стан та перспективи використання
 
Практика студентів на складі одягу H&M у Польщі
Практика студентів на складі одягу H&M у ПольщіПрактика студентів на складі одягу H&M у Польщі
Практика студентів на складі одягу H&M у Польщі
 
zvit_kerivnuka_ZDO28_2023-2024_n.rik.pptx
zvit_kerivnuka_ZDO28_2023-2024_n.rik.pptxzvit_kerivnuka_ZDO28_2023-2024_n.rik.pptx
zvit_kerivnuka_ZDO28_2023-2024_n.rik.pptx
 
Звіт за результатами самооцінювання щодо освітнього середовища
Звіт за результатами самооцінювання щодо освітнього середовищаЗвіт за результатами самооцінювання щодо освітнього середовища
Звіт за результатами самооцінювання щодо освітнього середовища
 
Випуск магістрів- науковців факультету мехатроніки та інжинірингу, 2024 р.
Випуск магістрів- науковців факультету мехатроніки та інжинірингу, 2024 р.Випуск магістрів- науковців факультету мехатроніки та інжинірингу, 2024 р.
Випуск магістрів- науковців факультету мехатроніки та інжинірингу, 2024 р.
 
Основи_історичної_просвіти_—_для_перекладу.pdf
Основи_історичної_просвіти_—_для_перекладу.pdfОснови_історичної_просвіти_—_для_перекладу.pdf
Основи_історичної_просвіти_—_для_перекладу.pdf
 
zarahuvannia do pershogo klassu IMG_20240607_0001.pdf
zarahuvannia do pershogo klassu IMG_20240607_0001.pdfzarahuvannia do pershogo klassu IMG_20240607_0001.pdf
zarahuvannia do pershogo klassu IMG_20240607_0001.pdf
 
Управлінські процеси закладу освіти.pptx
Управлінські процеси закладу освіти.pptxУправлінські процеси закладу освіти.pptx
Управлінські процеси закладу освіти.pptx
 
Звіт самооцінювання осв. середовище 2024.ppt
Звіт самооцінювання осв. середовище 2024.pptЗвіт самооцінювання осв. середовище 2024.ppt
Звіт самооцінювання осв. середовище 2024.ppt
 
Р.Л.Стівенсон "Вересовий трунок". Презентація
Р.Л.Стівенсон "Вересовий трунок". ПрезентаціяР.Л.Стівенсон "Вересовий трунок". Презентація
Р.Л.Стівенсон "Вересовий трунок". Презентація
 
Оригінал. Переклад. Види перекладів. Допомога учню
Оригінал. Переклад. Види перекладів. Допомога учнюОригінал. Переклад. Види перекладів. Допомога учню
Оригінал. Переклад. Види перекладів. Допомога учню
 
Звіт директора за 2023-2024 н. р. [Автозбережено].ppt
Звіт директора  за 2023-2024 н. р. [Автозбережено].pptЗвіт директора  за 2023-2024 н. р. [Автозбережено].ppt
Звіт директора за 2023-2024 н. р. [Автозбережено].ppt
 
"Він плакав і сміявся з народом: творчий спадок Федьковича"
"Він плакав і сміявся з народом: творчий спадок Федьковича""Він плакав і сміявся з народом: творчий спадок Федьковича"
"Він плакав і сміявся з народом: творчий спадок Федьковича"
 
Р.Л.Стівенсон "Вересовий трунок". Допомога учню
Р.Л.Стівенсон "Вересовий трунок". Допомога учнюР.Л.Стівенсон "Вересовий трунок". Допомога учню
Р.Л.Стівенсон "Вересовий трунок". Допомога учню
 
Звіт директора КЗО "СЗШ №124" ДМР 2023-2024 н.р.
Звіт директора КЗО "СЗШ №124" ДМР 2023-2024 н.р.Звіт директора КЗО "СЗШ №124" ДМР 2023-2024 н.р.
Звіт директора КЗО "СЗШ №124" ДМР 2023-2024 н.р.
 
Постанова №648 уряду від 04 червня 2024 року. .pdf
Постанова №648 уряду від 04 червня 2024 року. .pdfПостанова №648 уряду від 04 червня 2024 року. .pdf
Постанова №648 уряду від 04 червня 2024 року. .pdf
 
звіт 2023-2024 32024 32024 32024 32024 3.pptx
звіт 2023-2024 32024 32024 32024 32024 3.pptxзвіт 2023-2024 32024 32024 32024 32024 3.pptx
звіт 2023-2024 32024 32024 32024 32024 3.pptx
 
педрада 2024 травень 2педрада 2024 травень .pptx
педрада 2024 травень 2педрада 2024 травень .pptxпедрада 2024 травень 2педрада 2024 травень .pptx
педрада 2024 травень 2педрада 2024 травень .pptx
 
Наказ про зарахування 1 класу 2024 2025.pdf
Наказ про зарахування 1 класу 2024 2025.pdfНаказ про зарахування 1 класу 2024 2025.pdf
Наказ про зарахування 1 класу 2024 2025.pdf
 

Automated testing

  • 1. Automated testing BOHDAN PASHKOVSKYI INSPIRED BY O.PAVLYSHAK AND ELEKS COURSES SAAS APPS
  • 2. Що таке тестування? Тестування програмного забезпечення — процес перевірки на відповідність між реальною та очікуваною поведінкою програми. Починається разом із розробкою • Запускаємо і дивимось чи працює • Створюємо допоміжні засоби • Консольні програми • Допоміжний UI SAAS APPS
  • 3. Навіщо тестувати програми? ◦ Тестування не підвищує якість ПЗ, а сприяє розпізнаванню неправильної поведінки, завдяки чому розробники можуть знайти помилки і виправити їх; ◦ Тестування не може довести відсутності дефектів, лише їх наявність ◦ В будь-якій програмі є дефекти SAAS APPS
  • 4. Яким буває тестування? SAAS APPS Нефункціональне тестування Тестування пов’язане зі змінамиФункціональне тестування Модульне Інтеграційне Системне Приймальне Тестування продуктивності Відказостійкості Установки Зручності Регресійне На дим Санітарне
  • 5. Функціональне тестування Модульне тестування (англ. Unit testing) — це метод тестування програмного забезпечення, який полягає в окремому тестуванні кожного модуля коду програми. Модулем називають найменшу частину програми, яку може бути протестованою (об’єкт, клас, функція). Інтеграційне тестування (англ. Integration testing) — це фаза тестування програмного забезпечення, під час якої окремі модулі програми комбінуються та тестуються разом, у взаємодії. Системне тестування (англ. System testing) тестує інтегровану систему для перевірки відповідності всім вимогам. Виявляє наступні дефекти: • невірне використання ресурсів системи, • непередбачувані комбінації даних користувальницького рівня, • несумісність із оточенням, • непередбачувані сценарії використання, • відсутня або невірна функціональність, • незручність у застосуванні тощо. Приймальне тестування (англ. Acceptance testing) – формальний процес тестування, який перевіряє відповідність системи вимогам і проводиться з метою визначення чи задовільняє система приймальним критеріям замовника. SAAS APPS
  • 6. Модульне (unit) тестування Unit test, визначення: ◦ це код (зазвичай, метод), який викликає інший код (production) і після цього перевіряє правильність деяких припущень SAAS APPS
  • 7. Модульні тести Тестують один модуль Виконуються виключно в пам’яті Не вимагають конфігурації Не вимагають DB, FS, AD, Net Завжди ◦ Повторювано проходять ◦ Або повторювано не проходять ◦ Тому що не залежать від змінних факторів SAAS APPS
  • 8. Інтеграційні тести Тестують модулі разом Можуть мати різну поведінку В залежності від ◦ Середовища (FS, DB, AD, OS, .config) ◦ Порядку виконання ◦ Кількості виконання ◦ Багатопоточності ◦ Повного місяця SAAS APPS
  • 10. Unit test framework •Виконання тестів • Одного, декількох, всіх • Інтеграція з IDE • API для написання тестів • Автоматизація • Перегляд результатів NUnit, MS Test, Xunit, MBUnit, DBUnit Test runners: Visual Studio, NUnit GUI/Console apps, ReSharper, SAAS APPS
  • 11. Приклад модульного тесту [TestClass] public class OrderTests { [TestMethod] public void OrderApproval_ShouldChangeOrderStatusToApproved() { var order = new Order(); order.Approve(); Assert.AreEqual(OrderStatus.Approved, order.Status); } } SAAS APPS
  • 12. A A A Arrange/Act/Assert SAAS APPS [TestClass] public class OrderTests { [TestMethod] public void OrderApproval_ShouldChangeOrderStatusToApproved() { var order = new Order(); // Arrange order.Approve(); // Act Assert.AreEqual(OrderStatus.Approved, order.Status); // Assert } }
  • 13. Що тестувати? Код, що містить логіку public class Order { private string _title; public string Title { get { return _title; } set { _title = value; } } SAAS APPS
  • 14. Єдиний Assert [TestClass] public class OrderTests { [TestMethod] public void OrderApproval _ShouldChangeOrderStatusToApproved _AndOrderApproverShouldntBeNull() { var order = new Order(); order.Approve(); Assert.AreEqual(OrderStatus.Approved, order.Status); Assert.IsNotNull(order.OrderApprover); } } SAAS APPS
  • 15. Залежності class OrderManager { public void ApproveOrder(Order orderToApprove) { orderToApprove.Approve(); var mailSender = new MailSender(); mailSender.Send("admin@saasap.net", "Order was approved"); } } SAAS APPS
  • 16. Dependency injection DI – це процес надання зовнішньої залежності програмному компоненту. Є специфічною формою «інверсії керування» (Inversion of Control, IoC) Розрізняють дві основні форми DI (взагалі-то три ) - ін’єкція у конструктор (constructor injection) - ін’єкція у властивість (setter/property injection) SAAS APPS
  • 17. DI (крок 1 – абстрагування) public interface IMailSender { void Send(string address, string message); } public class MailSender : IMailSender { public void Send(string email, string message) { ... } } SAAS APPS
  • 18. Constructor injection class OrderManager { private readonly IMailSender _mailSender; public OrderManager(IMailSender mailSender) { _mailSender = mailSender; } public void ApproveOrder(Order orderToApprove) { orderToApprove.Approve(); _mailSender.Send("admin@saasap.net", "Order was approved"); } } declaration SAAS APPS
  • 19. Constructor injection var mailSender = new MailSender(); var orderManager = new OrderManager(mailSender); orderManager.ApproveOrder(orderToApprove); usage SAAS APPS
  • 20. Setter injection class OrderManager { public IMailSender MailSender { get; set; } public void ApproveOrder(Order orderToApprove) { orderToApprove.Approve(); MailSender.Send("admin@saasap.net", "Order was approved"); } } declaration SAAS APPS
  • 21. Setter injection var mailSender = new MailSender(); var orderManager = new OrderManager(); orderManager.MailSender = mailSender; orderManager.ApproveOrder(orderToApprove); usage SAAS APPS
  • 22. IoC containers Structuremap public class IOCConfig { public static Container Container; public static void Initialize() { Container = new Container(x => { x.For<IMailSender>().Use<MailSender>(); // constructor x.Policies.FillAllPropertiesOfType<IMailSender>().Use<MailSender>(); // setter }); } } public class Test { public IMailSender MailSender = IOCConfig.Container.GetInstance<IMailSender>(); } Unity Application Block 2.0 Spring.NET Structuremap CastleProject Seasar Winter.NET Ninject SAAS APPS
  • 23. Stubs public class StubMailSender : IMailSender { public void Send(string email, string message) { // do nothing } } [TestMethod] public void OrderApproveMethod_ShouldChangeOrderStatusToApproved() { // Arrange var order = new Order(); var orderManager = new OrderManager(new StubMailSender()); // Act orderManager.ApproveOrder(order); // Assert Assert.AreEqual(OrderStatus.Approved, order.Status); } Стаби (заглушки) використовуються для того, щоб не використовувати реальні залежності (файлову систему, БД, поштові серери, тощо). Це дозволяє тестувати тільки необхідний компонент Стабів у тесті може бути багато. SAAS APPS
  • 24. Isolation frameworks Stubs with Moq [TestMethod] public void OrderApproveMethod_ShouldChangeOrderStatusToApproved() { // Arrange var order = new Order(); var stubMailSender = new Mock<IMailSender>(); var orderManager = new OrderManager(stubMailSender.Object); // Act orderManager.ApproveOrder(order); // Assert, все ще тестуємо стан Assert.AreEqual(OrderStatus.Approved, order.Status); } Moq, RhinoMocks, etc SAAS APPS
  • 25. Mocks [TestMethod] public void OrderApproveMethod_ShouldChangeOrderStatusToApproved() { // Arrange var order = new Order(); var mockMailSender = new Mock<IMailSender>(); mockMailSender.Setup(ms => ms.Send( "admin@saasap.net", It.IsAny<string>())) .Verifiable(); var orderManager = new OrderManager(mockMailSender.Object); // Act orderManager.ApproveOrder(order); // Assert mockMailSender.Verify(); } Mock використовуються для того, щоб протестувати взаємодію залежностей. Мок може бути лише один у тесті. Один Assert = Один Verify SAAS APPS
  • 26. Stubs + mocks Один тест – один mock, але декілька stubs SAAS APPS Fakes Stubs 0..* Mocks 0..1
  • 27. Переваги модульних тестів • Швидший цикл тестування коду • Коротший фідбек про можливі дефекти • Дефекти дешевші • Кращий код • Стабільніша нова функціональність • Більше впевненості у змінах • Менше регресій • Коротші цикли релізів SAAS APPS
  • 28. Якості модульних тестів • Readable • Maintainable • Trustworthy SAAS APPS
  • 29. Readable Легко зрозуміти: • Що відбувається в тесті • Який код тестується • Які передумови • Які припущення перевіряються • Що тестує тест • Простий код тесту SAAS APPS
  • 30. Trustworthy • Релевантні до помилок • Стабільно (не) проходять • Немає конфліктуючих тестів • Справді тестують SAAS APPS
  • 31. Maintainable • Тести легко реагують на зміни • Не вимагають конфігурації • Не залежать від інших тестів • Простий код тесту SAAS APPS
  • 32. TDD Test driven development - Write test (red line) - Write code (green line) - Refactor SAAS APPS
  • 34. Speckflow BDD framework (Cucumber for .NET) SAAS APPS
  • 35. Speckflow Feature example SAAS APPS Feature: Calculator_Add In order to avoid silly mistakes As a math idiot I want to be told the sum of two numbers Background: Given I have a calculator Scenario: Add two numbers Given I enter 50 into the calculator And I press plus And I enter 70 into the calculator When I press enter Then the result should be 120 be displayed
  • 36. Speckflow Bindings SAAS APPS [Binding] public class Calculator_SharedSteps { [Given(@"I have a calculator")] public void GivenIHaveACalculator() { ScenarioContext.Current.Set<Calculator>(new Calculator()); } [Given(@"I enter (.*) into the calculator")] public void GivenIEnterIntoTheCalculator(int p0) { ScenarioContext.Current.Get<Calculator>().Number(p0); } [When(@"I press enter")] public void WhenIPressEnter() { ScenarioContext.Current.Get<Calculator>().Enter(); } [Then(@"the result should be (.*) be displayed")] public void ThenTheResultShouldBeBeDisplayed(int p0) { Assert.AreEqual(Convert.ToString(p0), ScenarioContext.Current.Get<Calculator>().Display); } }
  • 37. Specflow Feature: Login page should give ability to Login or Register for Background: Given I am not logged in And I am on "/account/login" page Scenario: When I enter empty pass in Login form, I should see error message When I have filled out the form as follows | Id | Value | | Login_Password | | And I press input type "submit" with value „Login" Then I should see error „Required" for Login_Password Scenario: If I am logged In a am redirected to account details When I log in as user And I go to "/account/login" page Then I should be on page "/account/details" Web example SAAS APPS