solidарность: Тестирование как разработка
DESCRIPTION
Презентация Игоря Горчакова на SQA Days-16 14-15 ноября 2014, Санкт-Петербург, Россия www.sqadays.comTRANSCRIPT
![Page 1: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/1.jpg)
SOLIDарностьТестирование, как
разработка
![Page 3: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/3.jpg)
Качество кода в тестировании
• Многие не считают, что разработка автотестов – это разработка.
• Иногда и разработчик автотестов не считает, что он занимается разработкой
![Page 4: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/4.jpg)
Что такое хороший код?
• Что такое код?
• Что такое хороший код?
• Почему важен хороший код?
![Page 5: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/5.jpg)
Дизайн
Дизайн – это результат процесса проектирования : декомпозиция системы, определение поведения и характеристики отдельных компонент и их взаимодействия.
![Page 6: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/6.jpg)
Отсутствие гибкости (Rigidity)
Код тяжело поддается изменениям. Изменения в одном месте, вызывают изменения в других частях системы приводя к эффекту «снежного кома».
![Page 7: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/7.jpg)
Хрупкость (Fragility)
Код легко «ломается». Т.е. после осуществления изменения код может сломаться еще в нескольких других местах.
![Page 8: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/8.jpg)
Монолитность (Immobility)
Компоненты настолько сильно связаны друг с другом, что их сложно разделить друг от друга и переиспользовать.
![Page 9: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/9.jpg)
Вязкость (Viscosity)
Сделать что-то хорошо, очень сложно. Существующий код сам провоцирует на дальнейшее увеличение количества «хаков» и «костылей».
![Page 10: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/10.jpg)
Излишняя сложность (Needless complexity)
Код содержит в себе архитектурные решения, необходимость в которых еще не назрела.
![Page 11: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/11.jpg)
Излишняя повторяемость (Needless repetition)
код содержит в себе дублирование, особенно такое, которое легко устраняется
![Page 12: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/12.jpg)
Нечитабельность (Opacity)
код сложен для чтения и понимания.
![Page 13: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/13.jpg)
Признаки хорошего дизайна
• Гибкость
• Прочность
• Переиспользуемость
• Отсутствие вязкости
• Простота
• Отсутствие дублирования кода
• Читабельность
![Page 14: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/14.jpg)
Что такое SOLID?• S - Single responsibility principle
• O - Open/closed principle
• L - Liskov substitution principle
• I - Interface segregation principle
• D - Dependency inversion principle
![Page 15: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/15.jpg)
Single responsibility principle
Не должно быть больше одной причины для изменения класса
![Page 16: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/16.jpg)
Примеры
![Page 17: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/17.jpg)
Примеры
![Page 18: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/18.jpg)
Решение
![Page 19: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/19.jpg)
Open/closed principle
программные сущности (классы, модули, методы и т.д.) должны быть открыты для расширения, но закрыты для изменения
![Page 20: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/20.jpg)
Пример
![Page 21: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/21.jpg)
Пример
![Page 22: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/22.jpg)
Решение
![Page 23: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/23.jpg)
Liskov substitution principle
Объекты в программе могут быть заменены их наследниками без изменения свойств программы
![Page 24: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/24.jpg)
Пример
![Page 25: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/25.jpg)
Пример
![Page 26: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/26.jpg)
Решение
![Page 27: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/27.jpg)
Решение
![Page 28: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/28.jpg)
Interface segregation principle
Много специализированных интерфейсов лучше, чем один универсальный.
![Page 29: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/29.jpg)
Пример
![Page 30: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/30.jpg)
Пример
![Page 31: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/31.jpg)
Решение
![Page 32: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/32.jpg)
Решение
![Page 33: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/33.jpg)
Dependency inversion principle
Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракции.
Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
![Page 34: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/34.jpg)
Пример
![Page 35: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/35.jpg)
Пример
![Page 36: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/36.jpg)
Тестируемость?
![Page 37: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/37.jpg)
Решение
![Page 38: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/38.jpg)
Решение
![Page 39: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/39.jpg)
Тестируемость
![Page 40: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/40.jpg)
Не забываем!
• DRY – Don’t repeat yourself (не повторяй себя)
• KISS – keep it simple stupid (делайте вещи проще)
• YAGNI - You ain’t gonna need it – вам это не понадобится
![Page 41: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/41.jpg)
Заключение
Принципы, а не строгие правила
Нет универсальных рецептов
![Page 42: SOLIDарность: Тестирование как разработка](https://reader036.vdocuments.site/reader036/viewer/2022062319/558b3db0d8b42a18058b469e/html5/thumbnails/42.jpg)
Вопросы?
Об авторе : Игорь Горчаковskype : igor-gorchakove-mail : [email protected]
Литература : Принципы, паттерны и методики гибкой разработки на языке C#(Agile Principles, Patterns and Practices in C#)