XP практики в проектах с тяжелой наследственностью
-
Upload
alex-tumanoff -
Category
Technology
-
view
2.329 -
download
0
description
Transcript of XP практики в проектах с тяжелой наследственностью
![Page 1: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/1.jpg)
XP практики в проектахс тяжелой наследственностью
Oleg KlymenkoJava Developer @ Sigma Ukraine [email protected]
![Page 2: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/2.jpg)
Начало
![Page 3: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/3.jpg)
Развитие
![Page 4: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/4.jpg)
Agile-манифест разработки программного обеспечения
Мы постоянно открываем для себя более совершенные методы разработки программного обеспечения, занимаясь разработкой
непосредственно и помогая в этом другим.Благодаря проделанной работе мы смогли осознать, что:
Люди и взаимодействие важнее процессов и инструментовРаботающий продукт важнее исчерпывающей документации
Сотрудничество с заказчиком важнее согласования контрактаГотовность к изменениям важнее следования первоначальному плану
То есть, не отрицая важности того, что справа,мы всё таки больше ценим то, что слева.
Идея
![Page 5: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/5.jpg)
Процесс
![Page 6: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/6.jpg)
Ожидание
![Page 7: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/7.jpg)
Реальность
![Page 8: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/8.jpg)
Демотивация
![Page 9: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/9.jpg)
Первый шаг
![Page 10: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/10.jpg)
1. Страсть (избыток проектирования)2. Чревоугодие (неспособность к рефакторингу)3. Жадность (соревнование между командами разработки)4. Лень (отсутствие проверки входных данных)5. Гнев (отсутствие практики комментировать код)6. Зависть (не использование систем управления версиями)7. Гордость (отсутствие юнит-тестирования)
Neil McAllister8. Оптимизм9. 10.
Анализ
![Page 11: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/11.jpg)
Новая фича
![Page 12: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/12.jpg)
Новая фича
![Page 13: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/13.jpg)
Тест разработчика
![Page 14: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/14.jpg)
DT
$
Вызов
![Page 15: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/15.jpg)
1. Я пишу пользовательский интерфес2. Трудно сопровождать3. Они не ловят новые “баги”4. Они медленные5. Это скучно6. Это дело тест-тима7. У меня легаси код8. Мне нужно делать фичи9.
Отговорки
![Page 16: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/16.jpg)
public class Validator {private static Validator instance =
new Validator(FeatureFactory.get());private Subscription subscr;private final Player player;
public static Validator getInstance() {return instance;}
private Validator(FeatureFactory ff) {player = ff.getPlayer();if (player instanceof GamePlayer)
subscr = ff.findSubscription(player);}
public boolean check(Round round) {SyncService sync = Repository.lookup(SyncService.class);boolean result = false;Date time = new Date();if(!round.isActiveInTime(time)) {
try {sync.lock(round);Ticket ticket = new SubscriptionTicket(subscr);result = round.subscribe(ticket, player);
}finally {
sync.unlock(round);}
}return result;
}}
![Page 17: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/17.jpg)
public class Validator {private static Validator instance =
new Validator(FeatureFactory.get());private Subscription subscr;private final Player player;
public static Validator getInstance() {return instance;}
private Validator(FeatureFactory ff) {player = ff.getPlayer();if (player instanceof GamePlayer)
subscr = ff.findSubscription(player);}
public boolean check(Round round) {SyncService sync = Repository.lookup(SyncService.class);boolean result = false;Date time = new Date();if(!round.isActiveInTime(time)) {
try {sync.lock(round);Ticket ticket = new SubscriptionTicket(subscr);result = round.subscribe(ticket, player);
}finally {
sync.unlock(round);}
}return result;
}}
![Page 18: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/18.jpg)
public class V {private static V instance =
new V(FF.get());private S s;private final P p;
public static V getInstance() {return instance;}
private V(FF ff) {p = ff.getP();if (player instanceof GamePlayer)
s = ff.findS(player);}
public boolean do(R r) {SS sync = Repository.lookup(SS.class);boolean result = false;Date time = new Date();if(!round.timeDependentRoutine(time)) {
try {sync.lock(round);T t = new ST(s);result = round.s(t, player);
}finally {
sync.unlock(round);}
}return result;
}}
![Page 19: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/19.jpg)
public class Validator {private final Subscription subscr;private final Player player;private final SyncService sync;
public Validator(Player player, Subscription subscr, SyncService sync) {
this.player = player;this.subscr = subscr;this.sync = sync;
}
public boolean check(Round round, Date time) {boolean result = false;if(!round.isActiveInTime(time)) {
try {sync.lock(round);Ticket ticket = new SubscriptionTicket(subscr);result = round.subscribe(ticket, player);
}finally {
sync.unlock(round);}
}return result;
}}
![Page 20: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/20.jpg)
1. Смешивание инстанциирования с логикой2. Смешивание патерна Lookup с логикой3. Выполнение целевой логики в конструкторе4. Глобальная видимость полей класса5. Использование патерна Singleton6. Статические методы7. Глубокая иерархия наследования8. Смешивание сервисов с общей логикой
Антипатерн
![Page 21: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/21.jpg)
Тестируемость
1. Сбалансированный ООП дизайн.2. Внедрение внешних зависимостей (DI).3. Отслеживание ошибок смешивания логики.4. Соблюдение закона Деметры.5. Юнит тесты (TDD).
![Page 22: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/22.jpg)
Норма
Unit тесты
Функциональные и интеграционные тесты
Системные тесты
![Page 23: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/23.jpg)
Переворот
![Page 24: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/24.jpg)
Время
![Page 25: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/25.jpg)
Человеческий фактор
![Page 26: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/26.jpg)
Исходный код
Исходный код
Архитектура и ДизайнАрхитектура и Дизайн
КомментарииКомментарии
СтандартыкодированияСтандарты
кодирования
Потенциальныеошибки
Потенциальныеошибки
Дублированиекода
Дублированиекода
Юнит тестыЮнит тесты
СложностьСложность
Контроль
![Page 27: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/27.jpg)
Итоговый план
1. Налаживаем сборку/инсталяцию.2. Определяем поведенческие требования.3. Создаем покрытие функциональными тестами.4. Выполняем рефакторинг.5. Покрываем юнит тестами.6. Налаживаем инспекцию кода.7. Убираем излишние функциональные тесты.8. Оставляем мир лучше чем был до нас :)
![Page 28: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/28.jpg)
Пять минут...
![Page 29: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/29.jpg)
1. Miško Hevery. Writing Testable Code http://misko.hevery.com/code-reviewers-guide/
2. Wiktor Żołnowski. Reversed Tests Pyramid http://xpdays.com.ua/materials/legacy-code/
3. Neil McAllister. 7 deadly sins of software development http://gigaom.com/2012/06/02/the-7-deadly-sins-of-software-development/
![Page 30: XP практики в проектах с тяжелой наследственностью](https://reader030.fdocument.pub/reader030/viewer/2022012913/549fd806ac795924768b4aa9/html5/thumbnails/30.jpg)