25
Или как да настъпваме по- малко мотики Continuous Integration (CI, Sonar и TDD)

Continuous integration (d.atanasov)

Embed Size (px)

Citation preview

Page 1: Continuous integration (d.atanasov)

Или как да настъпваме по- малко мотики

Continuous Integration(CI, Sonar и TDD)

Page 2: Continuous integration (d.atanasov)

Защо писането на софтуер е трудно ?Бизнесът е сложенИзискванията се променят

честоКлиентът не знае какво искаВсичко трябва да стане

ASAP

Page 3: Continuous integration (d.atanasov)

Как можем да подобрим ситуацията Наемаме още хораНамаляваме обхвата на

проектаПроменяме

методологията на работа

Page 4: Continuous integration (d.atanasov)

Какво е CI

Обикновено програмистите работят така:

Разработчикът пише приложениеQA тества приложението (може би)Приложението отива при клиента

И ...

Page 5: Continuous integration (d.atanasov)

Ядосан клиент

Page 6: Continuous integration (d.atanasov)

Как работим при CI

1. Програмистът разработва част от приложението

2. Програмистът разработва тест за кода си3. Кодът отива в Система за управление на

сорса (версиите)4. Билд сървърът взема кода и пуска тестове

срещу него5. При проблем се изпраща съобщение до

програмиста / мениджъра6. Отиваме на стъпка 17. Ако всичко е Ок, отиваме да пием бира

Page 7: Continuous integration (d.atanasov)

?Защо да си

правим труда

Page 8: Continuous integration (d.atanasov)

Отговорът

1. CI предполага подобряване гранулярността на задачите

2. CI ни задължава да имаме достатъчно пълни и работещи тестове, независимо от промените на клиента

3. CI позволява на разработчика/мениджъра да е сигурен в своя продукт

4. И в крайна сметка понеже софтуерът ни работи имаме и ...

Page 9: Continuous integration (d.atanasov)

Щастлив клиент

Page 10: Continuous integration (d.atanasov)

Архитектура на CI

Page 11: Continuous integration (d.atanasov)

Какво включва билда

Сорс кодБиблиотекиСкриптове за БДТестове и тестови скриптовеСкриптове за билдванеФайлове с настройки и др.Всичко се пази във VCS (без

библиотеките)

Page 12: Continuous integration (d.atanasov)

Характеристики на CI билда

Билдът е напълно автоматиченБилдът винаги взема код от VCSИзходът (освен при компилационни

грешки) винаги е изпълним кодИнформацията относно състоянието

на билда се изпраща на заинтересованите страни

Page 13: Continuous integration (d.atanasov)

Тестове изпълнявани от CI Unit тест – тества малки парчета от

кода със специфична функционалност Integration тест – проверява работата на

различните компоненти заедно Системен (функционален) тест – тества изцяло

функционалността на системата (най-често през UI)

Load (Stress) тест – проверява държанието на системата при различни натоварвания

Security тест – анализира приложението за дупки в сигурността

Page 14: Continuous integration (d.atanasov)

Статичен анализ на кода

CI може лесно да изпълнява проверка за честно срещани грешки, излишна сложност и т.н.

Инструменти:CodePro AnalytiXFindBugsCheckstyleCoberturaSonar

Page 15: Continuous integration (d.atanasov)

Какво още ни дава CI

Автоматичен deployment на кода

CI на базата от данни

Обратна връзка – IM, Email, SMS, Twitter

Page 16: Continuous integration (d.atanasov)

Нека да обобщимCI позволява бърза обратна връзка

при промениКодът е в завършено състояние, можем да

направим release по всяко времеПриложението стига по-бързо до QAДава възможност на екипа да се занимава

с по-интересни нещаЗадържа добрите инженери във фирматаRelease early, release often

Page 17: Continuous integration (d.atanasov)

Нека да обобщим

Прави по-лесно откриването на проблеми, веднага щом се появят

При много-платформени приложения позволява намирането на бъгове, специфични за отделните платформи

Намалява несигурността на екипа в продукта и премахва нежеланието за промени

Page 18: Continuous integration (d.atanasov)

Демо

Page 19: Continuous integration (d.atanasov)

Какво е TDD

Начин на работаКратки итерации за developmentTFDПозволява лесна промяна на

кодаНамалява броя на проблемите в

приложението

Page 20: Continuous integration (d.atanasov)

Начин на работа

1. Помислете върху дизайна на кода2. Добавете тест3. Пуснете тестовете и вижте дали новият

тест “гърми”4. Напишете кода, така че тестът да мине5. Пуснете тестовете и проверете дали

минават6. Рефакторирайте7. Обратно на 1

Page 21: Continuous integration (d.atanasov)

Каква е ползата ?

Изчистваме изискванията на функционалността

Изисква да пишем слабо свързани компоненти

Описваме дизайна на кода чрез теста Имаме завършен regression suite

Page 22: Continuous integration (d.atanasov)

А какви са минусите?

Необходима е подкрепа от мениджмънта – иначе изглежда, че пилеем време

Трябва да поддържаме и вече написаните тестове

Обикновено един и същи човек разработва и теста и кода (възможни са еднакви грешки) – Pair Programming ?

Многото минаващи тестове могат да подведат мениджмънта и да намалят останалото тестване

Page 23: Continuous integration (d.atanasov)

Кога TDD е излишно

Няма дисциплина Няма се ясна визия какво трябва да прави

системата Нямате идея как да направите кода слабо

свързан Мениджмънта не се интересува от

качество, а само да пусне продукта Кода няма да се поддържа При поддръжка на стар код/ стари системи

Page 24: Continuous integration (d.atanasov)

Ресурси

Test Driven-- Practical TDD and Acceptance TDD for Java Developers http://www.manning.com/koskela/

Unit testing with mock objects - http://www.ibm.com/developerworks/library/j-mocktest.html

Hudson Wiki - http://wiki.hudson-ci.orgSonar Wiki -

http://docs.codehaus.org/display/SONAR/Documentation

Презентация за TDD на Адриан Митев – http://www.slideshare.net/adrianmitev/testdriven-development-6014243

Page 25: Continuous integration (d.atanasov)

Въпроси

За въпроси и контакти

Email: [email protected]