SlideShare a Scribd company logo
Совместная разработка
   Инструменты и технологии.
О чём поговорим
● Системы версионирования
● Юнит-тесты
● Непрерывная интеграция
О чём не поговорим
● Style Guide
● Системы управления проектом (http:
  //basecamp.com и http://asana.com/)
● Системы учета ошибок (http://bugzilla.org и
  http://redmine.org)
● Функциональное тестирование (e.g.:
  selenium)
● Тестирование безопасности (e.g.:
  w3af+nikto+nmap)
● Остальное тестирование (e.g.: ab)
Системы управления версиями
(СУВ, VCS)
From Wiki:
Набор программных средств для
управления изменениями в документах,
программах, веб-сайтах и других данных,
хранимых в файлах
Нумерация версий
Просто нумерованные папки

Больше ничего
Проблемы
●   Совместный доступ к коду
●   Когда редактировали?
●   Кто редактировал?
●   Что изменилось?
●   Контроль версий
●   Контроль доступа пользователей
Системы контроля кода ПО (SCM)
Или системы управления конфигурацией
ПО.

Cредство и соответствующий процесс,
используемый для поддержки исходного
кода и его изменения с течением времени
Задачи SCM
● Поддержка файлов в репозитории
● Поддержка проверки файлов в репозитории
● Нахождение конфликтов при изменении исходного
  кода и обеспечение синхронизации при работе в
  многопользовательской среде разработки
● Отслеживание авторов изменений
● Журналирование изменений
● Возможность управления конфигурацией файлов (в
  частности, проверки) для совместимых и
  повторяющихся сборок.
Язык SCM
Репозиторий (repository) - это центральное место, где
хранятся файлы

Извлечение файлов из репозитория в рабочую
директорию вашей локальной системы называется
выгрузка (check-out).

Синхронизация изменений в локальных копиях с
изменениями в репозитории называется фиксацией
изменений (commit)

Если объединение невозможно из-за конфликтующих
изменений в файле, возникнет конфликт (conflict).
Язык SCM
Когда изменения зафиксированы, создается новая
версия (revision) файла

У одного или нескольких разработчиков есть
возможность работать вне главного дерева (текущего
корня репозитория), а именно, в персональной ветке
(branch).

Это позволяет разработчикам испытывать какие-то
процессы в своих ветках, не влияя на главное дерево.
Когда они станут стабильными, их можно соединить
(merge) с главным деревом.
Язык SCM
Пометка начала отсчета изменений в дереве (tag)

Группирует несколько файлов в пригодный для
использования блок

Чаще всего используется для обозначения конечной
версии файлов для сборки
Централизованные SCM
Эволюция SCM: CVS
Concurrent Versions System

Клиент-серверная архитектура

Сервер хранит репозиторий
Клиент обращается к серверу
CVS: команды
●   check-out
●   check-in == commit
●   update
●   branch
CVS: недостатки
● 1 коммит/файл
● Невозможно переименовать файл или
  директорию
● Нет поддержки юникода
● Неэффективное хранение бинарных
  файлов
● Нет ограничения прав доступа
● Публикация изменений не атомарна
● Нет поддержки непубликуемых файлов
● Неэффективная работа с бинарными
  файлами
Эволюция SCM: SVN
Замена CVS
● Поддерживаются наборы изменений
● Полная история изменений
● Поддержка блокировок
● Фиксация изменения атомарна
● Одинаково эффективная работа как
  текстовыми так и с двоичными данными
● При синхронизации передаются только
  изменения
SVN: структура и команды
svn init            /.
svn add              trunk
                     branches
svn checkout
                       branch_1
svn commit           tags
svn revert             tag_1
svn update             tag_2
svn log
svn copy
svn merge
svn switchto
SVN: Недостатки
● Проблемы при переименовании файлов
● Слабая поддержка слияния ветвей.
  Слияние переименованных файлов и
  папок не поддерживается
● Невозможность удаления данных из
  хранилища (!)
Распределенные SCM
Распределенные SCM
● Нет главной копии, все копии рабочии
● Возможно множество центральных
  репозиториев
● Локальные изолированные репозитории
  для изменений
● Асинхронная работа в p2p-сети (в
  централизованной системе star-
  архитектура)
● Большинство операций (commit, merge,
  diff и.т.п.) производятся без
  использования сети
Распределенные SCM:
Преимущества
● Автономность разработчика
● Гибкость системы
● Слияние (и зачастую др. операции)
  происходит быстрее
● Контроль доступа
Распределеные SCM: недостатки
● Нет блокировок
● Слежение за файлом или группой файлов
  проблематично
● Нет единой нумерации версий
● Медленное клонирование репозитария
● Репозиторий занимает много места на
  диске пользователя
Распределенные SCM: Git
Любой программист вправе продолжить
совершенствование проекта на любом его этапе
● Локальная копия репозитория для каждого
   разработчика
● Быстрое разделение и слияние версий
● SHA1-хеш для нумерации версии
GIT: Операции
●   git init
●   git add
●   git clone
●   git commit
●   git merge
●   git reset
●   git push <url> <branch>
●   git pull
●   git diff
●   git log
Git: ветки
GIT: преимущества
● Децентрализован
● Прост в использовании (хорошие
  средства для автоматического слияния)
● Хорошо спроектирован
GIT: недостатки
●   Unix-ориентированность
●   Коллизии хеширования
●   Проблемы при больших репозитариях
●   Проблемы на больших проектах
●   Написан на C (0_o :))
Блочное тестирование
Получение работоспособного кода
   с наименьшими затратами
Изолировать отдельные части
программы и показать, что по
   отдельности эти части
      работоспособны
Unit-тестирование
Метод тестирования, в котором отдельные модули
программы проверяются на готовность к
использованию

Модуль (unit) - наименьший участок кода системы,
пригодный к тестированию

В процедурном подходе модуль - процедура/функция

В ООП - класс, интерфейс. Может быть метод.
public class TestAdder {
  public void testSum() {
     Adder adder = new AdderImpl();
     // can it add positive numbers?
     assert(adder.add(1, 1) == 2);
     assert(adder.add(1, 2) == 3);
     assert(adder.add(2, 2) == 4);
     // is zero neutral?
     assert(adder.add(0, 0) == 0);
     // can it add negative numbers?
     assert(adder.add(-1, -2) == -3);
     // can it add a positive and a negative?
     assert(adder.add(-1, 1) == 0);
     // how about larger numbers?
     assert(adder.add(1234, 988) == 2222);
  }
}
Вариант тестирования (test case)
●   Уникальный идентификатор варианта тестирования
●   Краткое описание варианта тестирования
●   Стадия теста или порядок выполнения
●   Требования
●   Глубина теста
●   Категория теста
●   Автор
●   Флаг автоматизации теста
●   Ожидаемый результат/Реальный результат
●   Пройден/Провален
Пишем тесты для каждой
нетривиальной функции или
         метода
1 строка кода = 3-5 строк теста
Unit-тестирование
● Нет смысла писать тесты на весь код
● Более выгодно писать тесты на
  потенциально изменяемый код
● Чтобы реже менять тесты, нужно хорошо
  проектировать интерфейсы
Unit-тестирование: преимущества
● Легче вносить изменения в структуру
  программы
● Упрощение интеграции
● Документирование кода (грязный хак :))
● Отделение интерфейса от реализации
Unit-тестирование: недостатки
● Отлавливаются не все ошибки
● Комбинаторная задача
● Требование следования технологии
    тестирования...
...
● ...Иначе лавина
Непрерывная
 интеграция
Выполнение частых автоматизированных
    сборок проекта для скорейшего
 выявления и решения интеграционных
               проблем
CI
На сервере:
● получение исходного кода из репозитория;
● сборка проекта;
● выполнение тестов;
● развёртывание готового проекта;
● отправка отчетов.

Выполняется
● по внешнему запросу;
● по расписанию;
● по факту обновления репозитория или другому
  событию
CI: преимущества
● проблемы интеграции выявляются и исправляются
  быстро, что оказывается дешевле
● немедленный прогон модульных тестов для свежих
  изменений
● постоянное наличие текущей стабильной версии
  вместе с продуктами сборок — для тестирования,
  демонстрации, и т. п.
● немедленный эффект от неполного или
  неработающего кода приучает разработчиков к
  работе в итеративном режиме с более коротким
  циклом
CI: недостатки
● Затраты на поддержку работы
● Необходим выделенный сервер под
  нужды интеграции
● Немедленный эффект от неработающего
  кода демотивирует команду загружать
  промежуточные версии кода
  ○ Ветвление в SCM частично решает проблему
Dev collaboration

More Related Content

What's hot

Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
SQALab
 
Как Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QAКак Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QA
SQALab
 
Unit testing
Unit testingUnit testing
Unit testingISsoft
 
Инструменты разработки ПО в *nix
Инструменты разработки ПО в *nixИнструменты разработки ПО в *nix
Инструменты разработки ПО в *nix
Alexander Gerasiov
 
Сергей Семашко "End to end test: cheap and effective"
Сергей Семашко "End to end test: cheap and effective"Сергей Семашко "End to end test: cheap and effective"
Сергей Семашко "End to end test: cheap and effective"EPAM Systems
 
Андрей Похилько — Нагрузочное тестирование типичного интернет сервиса
Андрей Похилько — Нагрузочное тестирование типичного интернет сервисаАндрей Похилько — Нагрузочное тестирование типичного интернет сервиса
Андрей Похилько — Нагрузочное тестирование типичного интернет сервиса
Yandex
 
Continuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под LinuxContinuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под Linux
DotNetConf
 
Дефицит ресурсов тестирования... или нет?
Дефицит ресурсов тестирования... или нет?Дефицит ресурсов тестирования... или нет?
Дефицит ресурсов тестирования... или нет?
SQALab
 
TestLink
TestLinkTestLink
TestLinkISsoft
 
Мастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsМастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsValentin Fedoskin
 
Введение в maven
Введение в mavenВведение в maven
Введение в maven
Dmitry Zinushin
 
Ошибки начинающего специалиста по нагрузочному тестированию и как их избежать
Ошибки начинающего специалиста по нагрузочному тестированию и как их избежатьОшибки начинающего специалиста по нагрузочному тестированию и как их избежать
Ошибки начинающего специалиста по нагрузочному тестированию и как их избежать
SQALab
 
Нагрузочное тестирование
Нагрузочное тестированиеНагрузочное тестирование
Нагрузочное тестирование
SPB SQA Group
 
Разработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешевоРазработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешево
DotNetConf
 
Secure OS QP
Secure OS QPSecure OS QP
Secure OS QP
Egor Sulkin
 
Роман Василенко. Continuous delivery или как упростить себе жизнь
Роман Василенко. Continuous delivery или как упростить себе жизньРоман Василенко. Continuous delivery или как упростить себе жизнь
Роман Василенко. Continuous delivery или как упростить себе жизнь
_itcampus
 
Team workflow
Team workflowTeam workflow
Нагрузочное тестирование. С чего начать?
Нагрузочное тестирование. С чего начать?Нагрузочное тестирование. С чего начать?
Нагрузочное тестирование. С чего начать?
OdessaQA
 
Нагрузочное тестирование теория Кожухов
Нагрузочное тестирование теория КожуховНагрузочное тестирование теория Кожухов
Нагрузочное тестирование теория КожуховИлья Кожухов
 

What's hot (20)

Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
 
Как Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QAКак Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QA
 
Unit testing
Unit testingUnit testing
Unit testing
 
Инструменты разработки ПО в *nix
Инструменты разработки ПО в *nixИнструменты разработки ПО в *nix
Инструменты разработки ПО в *nix
 
Сергей Семашко "End to end test: cheap and effective"
Сергей Семашко "End to end test: cheap and effective"Сергей Семашко "End to end test: cheap and effective"
Сергей Семашко "End to end test: cheap and effective"
 
Андрей Похилько — Нагрузочное тестирование типичного интернет сервиса
Андрей Похилько — Нагрузочное тестирование типичного интернет сервисаАндрей Похилько — Нагрузочное тестирование типичного интернет сервиса
Андрей Похилько — Нагрузочное тестирование типичного интернет сервиса
 
Continuousdelivery
ContinuousdeliveryContinuousdelivery
Continuousdelivery
 
Continuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под LinuxContinuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под Linux
 
Дефицит ресурсов тестирования... или нет?
Дефицит ресурсов тестирования... или нет?Дефицит ресурсов тестирования... или нет?
Дефицит ресурсов тестирования... или нет?
 
TestLink
TestLinkTestLink
TestLink
 
Мастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsМастер класс- Maven + Jenkins
Мастер класс- Maven + Jenkins
 
Введение в maven
Введение в mavenВведение в maven
Введение в maven
 
Ошибки начинающего специалиста по нагрузочному тестированию и как их избежать
Ошибки начинающего специалиста по нагрузочному тестированию и как их избежатьОшибки начинающего специалиста по нагрузочному тестированию и как их избежать
Ошибки начинающего специалиста по нагрузочному тестированию и как их избежать
 
Нагрузочное тестирование
Нагрузочное тестированиеНагрузочное тестирование
Нагрузочное тестирование
 
Разработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешевоРазработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешево
 
Secure OS QP
Secure OS QPSecure OS QP
Secure OS QP
 
Роман Василенко. Continuous delivery или как упростить себе жизнь
Роман Василенко. Continuous delivery или как упростить себе жизньРоман Василенко. Continuous delivery или как упростить себе жизнь
Роман Василенко. Continuous delivery или как упростить себе жизнь
 
Team workflow
Team workflowTeam workflow
Team workflow
 
Нагрузочное тестирование. С чего начать?
Нагрузочное тестирование. С чего начать?Нагрузочное тестирование. С чего начать?
Нагрузочное тестирование. С чего начать?
 
Нагрузочное тестирование теория Кожухов
Нагрузочное тестирование теория КожуховНагрузочное тестирование теория Кожухов
Нагрузочное тестирование теория Кожухов
 

Viewers also liked

SuSE Studio
SuSE StudioSuSE Studio
SuSE Studio
Eduard Antsupov
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
Eduard Antsupov
 
Lift, play, akka, rails part1
Lift, play, akka, rails part1Lift, play, akka, rails part1
Lift, play, akka, rails part1Eduard Antsupov
 

Viewers also liked (8)

Multiplayer
MultiplayerMultiplayer
Multiplayer
 
Smalltalk
SmalltalkSmalltalk
Smalltalk
 
SuSE Studio
SuSE StudioSuSE Studio
SuSE Studio
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
Linux Kernel Processes
Linux Kernel ProcessesLinux Kernel Processes
Linux Kernel Processes
 
Lovely scrum
Lovely scrumLovely scrum
Lovely scrum
 
Lift, play, akka, rails part1
Lift, play, akka, rails part1Lift, play, akka, rails part1
Lift, play, akka, rails part1
 
Nosql and Mongodb
Nosql and MongodbNosql and Mongodb
Nosql and Mongodb
 

Similar to Dev collaboration

Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
SQALab
 
метод организации репозитория исходного кода
метод организации репозитория исходного кодаметод организации репозитория исходного кода
метод организации репозитория исходного кодаSergii Shmarkatiuk
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Technopark
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
Vladimir Bakhov
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Technopark
 
Технологии разработки ПО
Технологии разработки ПОТехнологии разработки ПО
Технологии разработки ПО
Anton Konushin
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
aviatakz
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
Andrey Kazarinov
 
Java one presentation
Java one presentationJava one presentation
Java one presentation
Shamim bhuiyan
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
Кафедра высокопроизводительных компьютерных технологий ИМКН УрФУ
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
Dima Denisenko
 
CodeFest 2010. Жемчужникова М., Овчарова О. —Принципы выбора ПО для группы те...
CodeFest 2010. Жемчужникова М., Овчарова О. —Принципы выбора ПО для группы те...CodeFest 2010. Жемчужникова М., Овчарова О. —Принципы выбора ПО для группы те...
CodeFest 2010. Жемчужникова М., Овчарова О. —Принципы выбора ПО для группы те...CodeFest
 
Тестирование ПО
Тестирование ПОТестирование ПО
Тестирование ПОseleznev_stas
 
Обеспечение качества: Практические советы
Обеспечение качества: Практические советыОбеспечение качества: Практические советы
Обеспечение качества: Практические советы
SQALab
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
SQALab
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practices
Aliaksandr Ikhelis
 
DevOps в реальном времени
DevOps в реальном времениDevOps в реальном времени
DevOps в реальном времени
Andriy Samilyak
 
Сергей Ревко
Сергей РевкоСергей Ревко
Сергей Ревко
SQALab
 
владивосток форум производительность_ha
владивосток форум производительность_haвладивосток форум производительность_ha
владивосток форум производительность_ha
Elena Ometova
 

Similar to Dev collaboration (20)

Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Simonova sql server-enginetesting
Simonova sql server-enginetestingSimonova sql server-enginetesting
Simonova sql server-enginetesting
 
метод организации репозитория исходного кода
метод организации репозитория исходного кодаметод организации репозитория исходного кода
метод организации репозитория исходного кода
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5
 
Технологии разработки ПО
Технологии разработки ПОТехнологии разработки ПО
Технологии разработки ПО
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
 
Java one presentation
Java one presentationJava one presentation
Java one presentation
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
CodeFest 2010. Жемчужникова М., Овчарова О. —Принципы выбора ПО для группы те...
CodeFest 2010. Жемчужникова М., Овчарова О. —Принципы выбора ПО для группы те...CodeFest 2010. Жемчужникова М., Овчарова О. —Принципы выбора ПО для группы те...
CodeFest 2010. Жемчужникова М., Овчарова О. —Принципы выбора ПО для группы те...
 
Тестирование ПО
Тестирование ПОТестирование ПО
Тестирование ПО
 
Обеспечение качества: Практические советы
Обеспечение качества: Практические советыОбеспечение качества: Практические советы
Обеспечение качества: Практические советы
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practices
 
DevOps в реальном времени
DevOps в реальном времениDevOps в реальном времени
DevOps в реальном времени
 
Сергей Ревко
Сергей РевкоСергей Ревко
Сергей Ревко
 
владивосток форум производительность_ha
владивосток форум производительность_haвладивосток форум производительность_ha
владивосток форум производительность_ha
 

Dev collaboration

  • 1. Совместная разработка Инструменты и технологии.
  • 2. О чём поговорим ● Системы версионирования ● Юнит-тесты ● Непрерывная интеграция
  • 3. О чём не поговорим ● Style Guide ● Системы управления проектом (http: //basecamp.com и http://asana.com/) ● Системы учета ошибок (http://bugzilla.org и http://redmine.org) ● Функциональное тестирование (e.g.: selenium) ● Тестирование безопасности (e.g.: w3af+nikto+nmap) ● Остальное тестирование (e.g.: ab)
  • 4. Системы управления версиями (СУВ, VCS) From Wiki: Набор программных средств для управления изменениями в документах, программах, веб-сайтах и других данных, хранимых в файлах
  • 6. Проблемы ● Совместный доступ к коду ● Когда редактировали? ● Кто редактировал? ● Что изменилось? ● Контроль версий ● Контроль доступа пользователей
  • 7. Системы контроля кода ПО (SCM) Или системы управления конфигурацией ПО. Cредство и соответствующий процесс, используемый для поддержки исходного кода и его изменения с течением времени
  • 8. Задачи SCM ● Поддержка файлов в репозитории ● Поддержка проверки файлов в репозитории ● Нахождение конфликтов при изменении исходного кода и обеспечение синхронизации при работе в многопользовательской среде разработки ● Отслеживание авторов изменений ● Журналирование изменений ● Возможность управления конфигурацией файлов (в частности, проверки) для совместимых и повторяющихся сборок.
  • 9. Язык SCM Репозиторий (repository) - это центральное место, где хранятся файлы Извлечение файлов из репозитория в рабочую директорию вашей локальной системы называется выгрузка (check-out). Синхронизация изменений в локальных копиях с изменениями в репозитории называется фиксацией изменений (commit) Если объединение невозможно из-за конфликтующих изменений в файле, возникнет конфликт (conflict).
  • 10. Язык SCM Когда изменения зафиксированы, создается новая версия (revision) файла У одного или нескольких разработчиков есть возможность работать вне главного дерева (текущего корня репозитория), а именно, в персональной ветке (branch). Это позволяет разработчикам испытывать какие-то процессы в своих ветках, не влияя на главное дерево. Когда они станут стабильными, их можно соединить (merge) с главным деревом.
  • 11. Язык SCM Пометка начала отсчета изменений в дереве (tag) Группирует несколько файлов в пригодный для использования блок Чаще всего используется для обозначения конечной версии файлов для сборки
  • 13. Эволюция SCM: CVS Concurrent Versions System Клиент-серверная архитектура Сервер хранит репозиторий Клиент обращается к серверу
  • 14. CVS: команды ● check-out ● check-in == commit ● update ● branch
  • 15. CVS: недостатки ● 1 коммит/файл ● Невозможно переименовать файл или директорию ● Нет поддержки юникода ● Неэффективное хранение бинарных файлов ● Нет ограничения прав доступа ● Публикация изменений не атомарна ● Нет поддержки непубликуемых файлов ● Неэффективная работа с бинарными файлами
  • 16. Эволюция SCM: SVN Замена CVS ● Поддерживаются наборы изменений ● Полная история изменений ● Поддержка блокировок ● Фиксация изменения атомарна ● Одинаково эффективная работа как текстовыми так и с двоичными данными ● При синхронизации передаются только изменения
  • 17. SVN: структура и команды svn init /. svn add trunk branches svn checkout branch_1 svn commit tags svn revert tag_1 svn update tag_2 svn log svn copy svn merge svn switchto
  • 18. SVN: Недостатки ● Проблемы при переименовании файлов ● Слабая поддержка слияния ветвей. Слияние переименованных файлов и папок не поддерживается ● Невозможность удаления данных из хранилища (!)
  • 20. Распределенные SCM ● Нет главной копии, все копии рабочии ● Возможно множество центральных репозиториев ● Локальные изолированные репозитории для изменений ● Асинхронная работа в p2p-сети (в централизованной системе star- архитектура) ● Большинство операций (commit, merge, diff и.т.п.) производятся без использования сети
  • 21. Распределенные SCM: Преимущества ● Автономность разработчика ● Гибкость системы ● Слияние (и зачастую др. операции) происходит быстрее ● Контроль доступа
  • 22. Распределеные SCM: недостатки ● Нет блокировок ● Слежение за файлом или группой файлов проблематично ● Нет единой нумерации версий ● Медленное клонирование репозитария ● Репозиторий занимает много места на диске пользователя
  • 23.
  • 24. Распределенные SCM: Git Любой программист вправе продолжить совершенствование проекта на любом его этапе ● Локальная копия репозитория для каждого разработчика ● Быстрое разделение и слияние версий ● SHA1-хеш для нумерации версии
  • 25. GIT: Операции ● git init ● git add ● git clone ● git commit ● git merge ● git reset ● git push <url> <branch> ● git pull ● git diff ● git log
  • 26.
  • 28. GIT: преимущества ● Децентрализован ● Прост в использовании (хорошие средства для автоматического слияния) ● Хорошо спроектирован
  • 29. GIT: недостатки ● Unix-ориентированность ● Коллизии хеширования ● Проблемы при больших репозитариях ● Проблемы на больших проектах ● Написан на C (0_o :))
  • 31. Получение работоспособного кода с наименьшими затратами
  • 32. Изолировать отдельные части программы и показать, что по отдельности эти части работоспособны
  • 33. Unit-тестирование Метод тестирования, в котором отдельные модули программы проверяются на готовность к использованию Модуль (unit) - наименьший участок кода системы, пригодный к тестированию В процедурном подходе модуль - процедура/функция В ООП - класс, интерфейс. Может быть метод.
  • 34. public class TestAdder { public void testSum() { Adder adder = new AdderImpl(); // can it add positive numbers? assert(adder.add(1, 1) == 2); assert(adder.add(1, 2) == 3); assert(adder.add(2, 2) == 4); // is zero neutral? assert(adder.add(0, 0) == 0); // can it add negative numbers? assert(adder.add(-1, -2) == -3); // can it add a positive and a negative? assert(adder.add(-1, 1) == 0); // how about larger numbers? assert(adder.add(1234, 988) == 2222); } }
  • 35. Вариант тестирования (test case) ● Уникальный идентификатор варианта тестирования ● Краткое описание варианта тестирования ● Стадия теста или порядок выполнения ● Требования ● Глубина теста ● Категория теста ● Автор ● Флаг автоматизации теста ● Ожидаемый результат/Реальный результат ● Пройден/Провален
  • 36. Пишем тесты для каждой нетривиальной функции или метода
  • 37. 1 строка кода = 3-5 строк теста
  • 38. Unit-тестирование ● Нет смысла писать тесты на весь код ● Более выгодно писать тесты на потенциально изменяемый код ● Чтобы реже менять тесты, нужно хорошо проектировать интерфейсы
  • 39. Unit-тестирование: преимущества ● Легче вносить изменения в структуру программы ● Упрощение интеграции ● Документирование кода (грязный хак :)) ● Отделение интерфейса от реализации
  • 40. Unit-тестирование: недостатки ● Отлавливаются не все ошибки ● Комбинаторная задача ● Требование следования технологии тестирования... ... ● ...Иначе лавина
  • 42. Выполнение частых автоматизированных сборок проекта для скорейшего выявления и решения интеграционных проблем
  • 43. CI На сервере: ● получение исходного кода из репозитория; ● сборка проекта; ● выполнение тестов; ● развёртывание готового проекта; ● отправка отчетов. Выполняется ● по внешнему запросу; ● по расписанию; ● по факту обновления репозитория или другому событию
  • 44. CI: преимущества ● проблемы интеграции выявляются и исправляются быстро, что оказывается дешевле ● немедленный прогон модульных тестов для свежих изменений ● постоянное наличие текущей стабильной версии вместе с продуктами сборок — для тестирования, демонстрации, и т. п. ● немедленный эффект от неполного или неработающего кода приучает разработчиков к работе в итеративном режиме с более коротким циклом
  • 45. CI: недостатки ● Затраты на поддержку работы ● Необходим выделенный сервер под нужды интеграции ● Немедленный эффект от неработающего кода демотивирует команду загружать промежуточные версии кода ○ Ветвление в SCM частично решает проблему