SlideShare a Scribd company logo
1 of 20
Разработка надежного софта
День 1
Михаил Навернюк
История
● Модель «водопада»
– Строго выделенные фазы проекта
● Анализ требований
● Проектирование
● Кодирование
● Тестирование
● Вывод в эксплуатацию
– Жесткое разделение разработчиков и
тестировщиков
– Множество видов тестирования
Уровни тестирования
● Модульное (unit)
● На дым (smoke)
● Функциональное (functional)
● Интеграционное (integration)
● Приемочное (acceptance)
История
● assert
● Проектирование по договору [Design by
Contract] (Eiffel)
– Пред-условия
– Инварианты
– Пост-условия
История
class Animal {
private int headsNum = 1;
private int legsNum = 4;
private int velocity = 0;
public void Run() {
assert(legsNum > 2); // pre-condition
...
assert(headsNum == 1); // invariant
...
assert(velocity > 0); // post-condition
}
}
История
● Kent Beck
– eXtreme Programming
● Smalltalk
● Java / junit
● xunit
● nunit
● Задача - повысить
надежность программ, но
при этом уменьшить время
на их разработку и не
увеличить стоимость
● Сделать это можно только
организовав постоянное,
быстрое и
автоматизированное
тестирование
Пример использования TDD
Постановка задачи
Нужно разработать класс, который получает на
вход количество в виде числа, превращает его в
русский текст с добавлением указанного слова.
Допустим слово - «посетитель».
Получив на входе число 2 класс должен выдать
строку «2 посетителя». Если на входе 12, то «12
посетителей».
Пример использования TDD
[TestFixture]
class ConvertorTest {
[Test]
public void Convert1() {
Assert.AreEqual("1 посетитель",
Convertor.Convert(1));
}
}
Пример использования TDD
class Convertor
{
public static string Convert(int num)
{
return "";
}
}
Пример использования TDD
Пример использования TDD
class Convertor
{
public static string Convert(int num)
{
return num.ToString() + " посетитель";
}
}
Пример использования TDD
Пример использования TDD
[TestFixture]
class ConvertorTest {
[Test]
public void Convert1() {
Assert.AreEqual("1 посетитель",
Convertor.Convert(1));
}
[Test]
public void Convert2() {
Assert.AreEqual("2 посетителя",
Convertor.Convert(2));
}
Пример использования TDD
class Convertor {
public static string Convert(int num) {
string[] words = {"посетителей", "посетитель",
"посетителя"};
if (num == 1)
return num.ToString() + " " + words[1];
if (num >= 2 && num <= 4)
return num.ToString() + " " + words[2];
return num.ToString() + " " + words[0];
}
}
Пример использования TDD
[TestFixture]
class ConvertorTest {
...
[Test]
public void Convert21() {
Assert.AreEqual("21 посетитель",
Convertor.Convert(21));
}
}
Пример использования TDD
class Convertor {
public static string Convert(int num) {
string[] words = {"посетителей", "посетитель",
"посетителя"};
int n = num % 10;
if (n == 1)
return num.ToString() + " " + words[1];
if (n >= 2 && n <= 4)
return num.ToString() + " " + words[2];
return num.ToString() + " " + words[0];
}
}
Пример использования TDD
class Convertor {
public static string Convert(int num) {
...
if (num > 9 && num < 21)
return num.ToString() + " " + words[0];
if (n == 1)
return num.ToString() + " " + words[1];
if (n >= 2 && n <= 4)
return num.ToString() + " " + words[2];
return num.ToString() + " " + words[0];
}
Пример использования TDD
Задание 1-го дня
● Предусловия:
– у вас уже установлена среда Visual Studio
● Установить у себя на компьютере nunit
– http://www.nunit.org/index.php?p=download
● Проверить, что nunit установлен правильно
– C:Program FilesNUnit 2.6.2
– Запускаются тесты самого nunit
● Прописать путь к nunit в переменной Path
– http://www.kakprosto.ru/kak-75443-kak-propisat-
path

More Related Content

What's hot

C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон ПолухинC++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухинcorehard_by
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Sergey Platonov
 
Лекция 1 Практика
Лекция 1 ПрактикаЛекция 1 Практика
Лекция 1 ПрактикаVictor Kulikov
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3Eugeniy Tyumentcev
 
RDSDataSource: Promises
RDSDataSource: PromisesRDSDataSource: Promises
RDSDataSource: PromisesRAMBLER&Co
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
 
Как выглядит современный фронтенд
Как выглядит современный фронтендКак выглядит современный фронтенд
Как выглядит современный фронтендTimophy Chaptykov
 
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...Alexey Paznikov
 

What's hot (10)

C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон ПолухинC++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
 
Лекция 1 Практика
Лекция 1 ПрактикаЛекция 1 Практика
Лекция 1 Практика
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 
Gradle in Enterprise, Is it possible?
Gradle in Enterprise, Is it possible?Gradle in Enterprise, Is it possible?
Gradle in Enterprise, Is it possible?
 
RDSDataSource: Promises
RDSDataSource: PromisesRDSDataSource: Promises
RDSDataSource: Promises
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизация
 
Как выглядит современный фронтенд
Как выглядит современный фронтендКак выглядит современный фронтенд
Как выглядит современный фронтенд
 
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
 
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
 

Viewers also liked

Psikologi maslow
Psikologi maslowPsikologi maslow
Psikologi maslowelmakrufi
 
[심층분석보고서] 3D 프린팅 기술에 관한 주요국 특허동향 및 시사점
[심층분석보고서] 3D 프린팅 기술에 관한 주요국 특허동향 및 시사점[심층분석보고서] 3D 프린팅 기술에 관한 주요국 특허동향 및 시사점
[심층분석보고서] 3D 프린팅 기술에 관한 주요국 특허동향 및 시사점sam Cyberspace
 
No.31 w de-m_the_chrematistic_21.04.2013
No.31 w de-m_the_chrematistic_21.04.2013No.31 w de-m_the_chrematistic_21.04.2013
No.31 w de-m_the_chrematistic_21.04.2013Aleksandr Zharkov 9000+
 
40 ideas & tips for facebook product page
40 ideas & tips for facebook product page40 ideas & tips for facebook product page
40 ideas & tips for facebook product pageNguyễn Duy Nhân
 
Affordable single detached houses in cavite rush rush for sale below 4million...
Affordable single detached houses in cavite rush rush for sale below 4million...Affordable single detached houses in cavite rush rush for sale below 4million...
Affordable single detached houses in cavite rush rush for sale below 4million...Murangbahaysacavite Cora Sacdalan
 
Alimentos para bajar el colesterol
Alimentos para bajar el colesterolAlimentos para bajar el colesterol
Alimentos para bajar el colesterolimentoseea
 

Viewers also liked (7)

Psikologi maslow
Psikologi maslowPsikologi maslow
Psikologi maslow
 
[심층분석보고서] 3D 프린팅 기술에 관한 주요국 특허동향 및 시사점
[심층분석보고서] 3D 프린팅 기술에 관한 주요국 특허동향 및 시사점[심층분석보고서] 3D 프린팅 기술에 관한 주요국 특허동향 및 시사점
[심층분석보고서] 3D 프린팅 기술에 관한 주요국 특허동향 및 시사점
 
No.31 w de-m_the_chrematistic_21.04.2013
No.31 w de-m_the_chrematistic_21.04.2013No.31 w de-m_the_chrematistic_21.04.2013
No.31 w de-m_the_chrematistic_21.04.2013
 
40 ideas & tips for facebook product page
40 ideas & tips for facebook product page40 ideas & tips for facebook product page
40 ideas & tips for facebook product page
 
Dra. Xiomara Elias LÓpz
Dra. Xiomara Elias LÓpz Dra. Xiomara Elias LÓpz
Dra. Xiomara Elias LÓpz
 
Affordable single detached houses in cavite rush rush for sale below 4million...
Affordable single detached houses in cavite rush rush for sale below 4million...Affordable single detached houses in cavite rush rush for sale below 4million...
Affordable single detached houses in cavite rush rush for sale below 4million...
 
Alimentos para bajar el colesterol
Alimentos para bajar el colesterolAlimentos para bajar el colesterol
Alimentos para bajar el colesterol
 

Similar to Reliable soft-1

Быстрое введение в TDD от А до Я
Быстрое введение в TDD от А до ЯБыстрое введение в TDD от А до Я
Быстрое введение в TDD от А до ЯAndrey Bibichev
 
Cpp0x Introduction
Cpp0x IntroductionCpp0x Introduction
Cpp0x IntroductionFedor Vompe
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
 
XP.Party (iOS) - testable code & architecture
XP.Party (iOS) - testable code & architectureXP.Party (iOS) - testable code & architecture
XP.Party (iOS) - testable code & architectureAnton Katkov
 
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...Ontico
 
Кирилл Харьков
Кирилл ХарьковКирилл Харьков
Кирилл ХарьковCodeFest
 
Rambler.iOS #3: Test-Driven Development в iOS
Rambler.iOS #3: Test-Driven Development в iOSRambler.iOS #3: Test-Driven Development в iOS
Rambler.iOS #3: Test-Driven Development в iOSRAMBLER&Co
 
Андрей Зайцев - TDD в кровавом энтерпрайзе
Андрей Зайцев - TDD в кровавом энтерпрайзеАндрей Зайцев - TDD в кровавом энтерпрайзе
Андрей Зайцев - TDD в кровавом энтерпрайзеElias Fofanov
 
Tdd + Ddd + Mvp + Go F + Po Eaa = Love
Tdd + Ddd + Mvp + Go F + Po Eaa = LoveTdd + Ddd + Mvp + Go F + Po Eaa = Love
Tdd + Ddd + Mvp + Go F + Po Eaa = LoveNikita Filippov
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish SQALab
 
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Javakranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в JavaKrivoy Rog IT Community
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernelsDenis Efremov
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полнойОмские ИТ-субботники
 
Статический анализ кода в DDD
Статический анализ кода в DDDСтатический анализ кода в DDD
Статический анализ кода в DDDAleksei Alekseev
 
язык програмирования
язык програмированияязык програмирования
язык програмированияOlegmingalev1997
 
ук 03.001.02 2011
ук 03.001.02 2011ук 03.001.02 2011
ук 03.001.02 2011etyumentcev
 
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовЮлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовMskDotNet Community
 
Оценка проектов тестирования
Оценка проектов тестированияОценка проектов тестирования
Оценка проектов тестированияRina Uzhevko
 
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionRoslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs ReflectionDenis Tsvettsih
 

Similar to Reliable soft-1 (20)

Быстрое введение в TDD от А до Я
Быстрое введение в TDD от А до ЯБыстрое введение в TDD от А до Я
Быстрое введение в TDD от А до Я
 
Cpp0x Introduction
Cpp0x IntroductionCpp0x Introduction
Cpp0x Introduction
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
 
XP.Party (iOS) - testable code & architecture
XP.Party (iOS) - testable code & architectureXP.Party (iOS) - testable code & architecture
XP.Party (iOS) - testable code & architecture
 
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
 
Кирилл Харьков
Кирилл ХарьковКирилл Харьков
Кирилл Харьков
 
Rambler.iOS #3: Test-Driven Development в iOS
Rambler.iOS #3: Test-Driven Development в iOSRambler.iOS #3: Test-Driven Development в iOS
Rambler.iOS #3: Test-Driven Development в iOS
 
Tdd php
Tdd phpTdd php
Tdd php
 
Андрей Зайцев - TDD в кровавом энтерпрайзе
Андрей Зайцев - TDD в кровавом энтерпрайзеАндрей Зайцев - TDD в кровавом энтерпрайзе
Андрей Зайцев - TDD в кровавом энтерпрайзе
 
Tdd + Ddd + Mvp + Go F + Po Eaa = Love
Tdd + Ddd + Mvp + Go F + Po Eaa = LoveTdd + Ddd + Mvp + Go F + Po Eaa = Love
Tdd + Ddd + Mvp + Go F + Po Eaa = Love
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish
 
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Javakranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernels
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
Статический анализ кода в DDD
Статический анализ кода в DDDСтатический анализ кода в DDD
Статический анализ кода в DDD
 
язык програмирования
язык програмированияязык програмирования
язык програмирования
 
ук 03.001.02 2011
ук 03.001.02 2011ук 03.001.02 2011
ук 03.001.02 2011
 
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовЮлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
 
Оценка проектов тестирования
Оценка проектов тестированияОценка проектов тестирования
Оценка проектов тестирования
 
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionRoslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
 

Reliable soft-1