Главная страница

Лекция система контроля версий. Методы организации работы в команде разработчиков. Системы контроля версий


Скачать 2.07 Mb.
НазваниеМетоды организации работы в команде разработчиков. Системы контроля версий
Дата16.04.2023
Размер2.07 Mb.
Формат файлаpptx
Имя файлаЛекция система контроля версий.pptx
ТипДокументы
#1065920

Методы организации работы в команде разработчиков.

Системы контроля версий.

Системы контроля версий

Системы контроля версий

Система управления (контроля) версиями (Version Control System) — программное обеспечение для облегчения работы с изменяющейся информацией.

Система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости возвращаться к более ранним версиям, определять, кто и когда сделал то или иное

изменение, и многое другое.

Системы контроля версий

Системы контроля версий решают следующие проблемы:


    - хранение версий файлов;
    - возможность получить любые предыдущие версии хранимых файлов;
    - просмотр изменений внесенных между заданными в запросе версиями;
    - сохранение и просмотр комментариев и авторов к внесенным изменениям.

Типы систем контроля версий


Локальные системы контроля версий
    Пример: rcs.

    Централизованные системы контроля версий

    Пример: CVS, Subversion и Perforce.

    Децентрализованные (распределенные) системы контроля версий

    Пример: Git, Mercurial, Bazaar, Darcs.

Достоинства и недостатки


Достоинства

Недостатки

Возможность восстановления данных  из определенной версии;

Возможность потери данных вследствие возникновения физических поломок оборудования;

Высокая скорость выполнения восстановления.

Отсутствие возможности совместной разработки.

Достоинства и недостатки


Достоинства

Недостатки

Возможность восстановления данных  из определенной версии;

Отсутствие доступа к данным при сбое работы сервера;

Возможность ведения командной разработки проекта.

довольно низкая скорость работы.

Децентрализованные системы контроля версий

Достоинства и недостатки


Достоинства

Возможность восстановления данных  из определенной версии

Возможность ведения командной разработки проекта

При сбое работы сервера система сохраняет данные в локальном репозитории, что позволяет эффективно вести процесс разработки, а после восстановления работы сервера, передать все изменения в удаленный репозиторий

При физической поломке сервера данные можно легко перенести в новый удалённый репозиторий с любого локального репозитория

Высокая скорость работы

Современные системы контроля версий


Существует много систем контроля версий (Git, Darcs, Mercurial, Bazaar, Monotone и т.д), сходных по принципу работы и конечным задачам.
Самая популярная на сегодняшний день система контроля версий – Git

Анализ программных продуктов


Анализ ПО — это часть процесса разработки программного обеспечения, включающая в себя сбор требований к программному обеспечению, их систематизацию, выявление взаимосвязей, а также документирование.


Шаг 1. Комиссия экспертов формирует таблицу критериев оценки, являющихся самыми важными для потребителя.
Шаг 2. Та же комиссия для каждого критерия определяет методику оценки выполнения критерия таким образом, чтобы "обезразмерить" исходные показатели (шкалирование

)

Шаг 3. Для каждого критерия эксперты выставляют коэффициенты значимости критерия для оценки продукта. Коэффициенты распределяются на отрезке от 0 до 1.
Шаг 4. Производится расчет аддитивной суммы интегральной оценки для каждого сравниваемого продукта по следующей формуле
Шаг 5. Значения интегральных оценок для каждого сравниваемого продукта ранжируются по убыванию

Пример критериев сравнения ПП

Исследования программного кода

Методы анализа программного кода

Выделяют несколько методов анализа кода для его проверки:


      статический динамический гибридный

Статический анализ (статистические анализаторы)

решает ряд важных задач:


    выявление различных типов ошибок и возможных уязвимостей программного кода;
    подсчет метрик. Метрика ПО - мера, позволяющая получить численное значение некоторого свойства ПО или его спецификаций;
    формирование рекомендаций по оформлению кода.


    полное покрытие кода не зависит от используемого компилятора и среды можно легко и быстро обнаруживать опечатки

    Недостатки методов статического анализа кода:

    недостаточно хорошая диагностика утечек памяти и параллельных ошибок корректный код при анализе тоже может попасть в список недостатков (ложнопозитивные события)

Динамический анализ

Динамический анализ кода решает ряд важных задач, в частности позволяет:


имитировать поведение пользователя и рассматривать работу программы в различных ситуациях и с различными наборами данных, корректными и некорректными;
находить программные ошибки, к которым можно отнести не только ошибки кода, но и ошибочные результаты и вычисления, полученные при выполнении программы или ее модулей;
обнаружить наличие уязвимостей в программе;
оценить используемые ресурсы, время выполнения программы в целом, время выполнения отдельных модулей программы, количество внешних запросов, количество используемой оперативной памяти и других ресурсов;
получить определенные наборы метрик.


    обычно не присутствует появление ложных срабатываний;
    обнаруженная ошибка является фактической, а не возможной;
    позволяет протестировать программы с закрытым кодом.

    Недостатки динамического анализа кода:

    обнаруживает дефекты только при тестировании с определенными наборами данных, в частях программы, которые тестирование не охватывает, ошибки могут быть не обнаружены;
    требуются значительные вычислительные ресурсы для проведения тестирования;
    только один путь выполнения может быть проверен в каждый конкретный момент времени. Требуется большое количество тестовых запусков для большей полноты тестирования;
    при тестировании на реальном процессоре исполнение некорректного кода может привести к непредсказуемым последствиям.

Методы исследования кода


Отладка
Трассировка
Ревьюирование
Тестирование
Профилирование
Обратное проектирование
Дизассемблирование
Использование анализаторов трафика (снифферов)
Использование утилит для динамического анализа кода
Экспертиза ПО

Механизмы и контроль внесения изменений в код


    команде программистов работать с одним и тем же хранилищем исходного кода, называемым репозиторием проекта;
    хранить несколько версий одних и тех же файлов проекта;
    вести учет и контроль версий;
    получать программисту личную копию хранилища и работать с этой копией на своем локальном компьютере;
    возвращаться к более ранним версиям файлов кода, получать актуальные версии файлов и решать ряд других важных задач.

    Существуют разные типы СКВ со своими алгоритмами и возможностями работы:

    локальная;
    централизованная;
    децентрализованная (распределенная).


    репозиторий содержит дерево всех файлов и директорий проекта, хранит главную копию всех файлов исходного кода и вспомогательные файлы, и документы;
    при записи файла в репозиторий сохраняется его предыдущее состояние, и только после этого происходит обновление файла;
    внесенные изменения становятся доступными для других разработчиков команды;
    при чтении файла из репозитория по умолчанию предоставляется последняя версия файла со всеми сделанными изменениями.


    контроль за исходным кодом управление версиями управление конфигурациями контроль доступа ветвление

Механизм ветвления проекта в СКВ

Обзор утилит для review


Утилита - компьютерная программа, расширяющая стандартные возможности оборудования и операционных систем и выполняющая узкий круг специфических задач

DeepCode - программа применяется для обнаружения и исправления ошибок в коде
Node.js - предназначена для поиска уязвимостей в модулях
PVS-Studio - инструмент для выявления ошибок и потенциальных уязвимостей в исходном коде программ, написанных на языках С, С++ и С#
BlameNotifier - инструмент позволяет рассылать письма разработчикам об ошибках, которые PVS-Studio нашел во время ночного прогона


!!!!Самостоятельно учебник, глава 2, п.2.1, стр.82-87

1) коллаборационист


ключевая характеристика:

Установите правила проверки и автоматические уведомления, чтобы гарантировать, что проверки будут завершены вовремя.
Пользовательские шаблоны проверки уникальны для Collaborator. Установите настраиваемые поля, контрольные списки и группы участников, чтобы адаптировать экспертные оценки к идеальному рабочему процессу вашей команды.
Легко интегрируется с 11 различными SCMs, а также IDE, такими как Eclipse & Visual Studio
Создавайте пользовательские отчеты о проверке, чтобы повысить эффективность процесса и упростить аудит.
Проводите экспертные обзоры документов в одном и том же инструменте, чтобы команды могли легко согласовываться с требованиями, изменениями дизайна и нагрузками соответствия.

Официальный сайт: https://smartbear.com/product/collaborator/free-trial/

2) CodeScene

ключевая характеристика:


Автоматический Просмотр кода комментарии на запросы вытягивания.
Качественные ворота для CI / CD.
A целенаправленный рабочий процесс для улучшения планирования.
Контролируйте технический долг и код здоровья.
Работает с любым git хостингом.
Интегрируется с Jira для отслеживания тенденций в производительности доставки.
CodeScene доступен как в локальной, так и в размещенной версии.

Официальный сайт: https://empear.com/


3) Визуальный Эксперт

ключевая характеристика:


Находите неиспользуемые объекты, индексы или таблицы
Определите отсутствующие индексы, ухудшающие время выполнения запроса.
Проверьте соглашения об именовании.
Генерируйте метрики кода: строки кода, количество объектов, переменные и т.д.
Находите негабаритные объекты.
Найдите пустые функции, не имеющие активного кода.
Visual Expert toolbox также включает в себя CRUD matrix generation, автоматическую документацию по коду, электронные диаграммы, синхронизированные с кодом, анализ производительности кода и многое другое.

Официальный сайт:

https://www.visual-expert.com/EN/lp-ve-download-source_adv914ve.html?single


4) Codebrag

ключевая характеристика:


Codebrag-это простой, легкий, бесплатный и открытый инструмент для просмотра кода, который делает обзор интересным и структурированным.
Codebrag используется для решения таких проблем, как неблокирующий обзор кода, встроенные комментарии и лайки, интеллектуальные уведомления по электронной почте и т. д.
С Codebrag можно сосредоточиться на рабочем процессе, чтобы выяснить и устранить проблемы наряду с совместным обучением и совместной работой.
Codebrag помогает в поставке расширенного программного обеспечения, используя его гибкую проверку кода.
Лицензия для Codebrag с открытым исходным кодом поддерживается AGPL .

Официальный сайт: http://codebrag.com/


5) Геррит

ключевая характеристика:


Gerrit-это бесплатный веб-инструмент для проверки кода, используемый разработчиками программного обеспечения для проверки своего кода в веб-браузере и отклонения или утверждения изменений.
Gerrit может быть интегрирован с Git, который является распределенной системой управления версиями.
Gerrit обеспечивает управление репозиторием для Git.
Используя Gerrit, участники проекта могут использовать рационализированный процесс просмотра кода, а также чрезвычайно настраиваемую иерархию.
Gerrit также используется при обсуждении нескольких подробных сегментов кода и повышении правильности вносимых изменений.

Официальный сайт: https://www.gerritcodereview.com/


6) Codestriker

ключевая характеристика:


Codestriker-это открытое и бесплатное онлайн-приложение для просмотра кода, которое помогает в совместном просмотре кода.
С помощью Codestriker можно записывать вопросы, комментарии и решения в базу данных, которая в дальнейшем может быть использована для проверок кода.
Codestriker поддерживает традиционный просмотр документов. Его можно интегрировать с ClearCase, Bugzilla, CVS, etc.
Codestriker имеет лицензию под GPL.

Официальный сайт: http://codestriker.sourceforge.net/


7) Родекод

ключевая характеристика:


Rhodecode-это инструмент управления открытым исходным кодом, защищенным и инкорпорированным корпоративным исходным кодом.
Rhodecode служит интегрированным инструментом для Git, Subversion и Mercurial.
Основными функциями Rhodecode являются совместная работа с командой, управление репозиторием и безопасность и аутентификация кода.
Rhodecode имеет 2 выпуска, Community Edition (CE) который является бесплатным и открытым исходным кодом и Enterprise Edition (EE) лицензируется на одного пользователя.
Rhodecode автоматизирует рабочие процессы для быстрого выполнения.

Официальный сайт: https://rhodecode.com/


8) Phabricator

ключевая характеристика:


Инструмент проверки кода от Phabricator suite называется “дифференциальный". Он используется для минимизации усилий, необходимых для создания кода наилучшего качества.
Phabricator имеет два типа рабочих процессов проверки кода, а именно “предварительный толчок”, также называемый “обзором”, и “пост-толчок”, называемый “аудит”.
Phabricator может быть интегрирован с Git, Subversion и Mercurial.

Официальный сайт: https://www.phacility.com/phabricator/


9) Тигель

ключевая характеристика:


Тигель гибкое применение которое приспосабливает обширный ряд подходов к работы и размеров команды.
Crucible-это легкий инструмент для проверки однорангового кода, который используется в обзорах до и после фиксации.
Обзор кода стал легким для SVN, Perforce и CVS и т. д. С помощью Crucible.

Официальный сайт: https://www.atlassian.com/software/crucible


10) Veracode

ключевая характеристика:


Veracode используется разработчиками при создании защищенного программного обеспечения путем сканирования двоичного кода или байтового кода вместо исходного кода.
С помощью Veracode можно идентифицировать неправильные зашифрованные функциональные возможности, вредоносный код и бэкдоры из исходного кода.
Veracode может просмотреть большое количество кода и сразу же возвращает результаты.
Для использования Veracode нет необходимости покупать какое-либо программное или аппаратное обеспечение, вам просто нужно оплатить необходимые службы analysis services.

Официальный сайт: https://www.veracode.com/


11) Наблюдательный Совет

ключевая характеристика:


Используя обзорную доску для обзора кода можно сэкономить деньги и время. Сэкономленное время можно использовать для концентрации на создании отличного программного обеспечения.
Обзорная доска может быть интегрирована с ClearCase, CVS, Perforce, пластиком и т. д.
В коде review by Review Board tool, код является синтаксис выделен, что делает его чтение быстрее.
Обзорная доска поддерживает обзоры до фиксации и обзоры после фиксации.

Официальный сайт: https://www.reviewboard.org/


Ревью кода системы средствами Git


Процессы ревью в Github и аналогах построены вокруг вносимых изменений, а в нашем случае комментарии нужно дать к состоянию всего кода системы на момент комментирования.

Как это сделать средствами самого Git: зафиксировать состояние в ветке для ревью, затем в merge request к этой ветке оставить свои замечания.

Замечания могут устареть уже в процессе написания, так как разработка может продолжаться.
Сложно ссылаться на отдельные участки кода, так как приходится постоянно переключаться между документом и кодом.
В отрыве от кода документ затеряется с довольно высокой вероятностью.


Проблематика

Найдем состояние в репозитории для ревью (на момент ревью это был последний коммит в dev): https://github.com/oktend/system-review-example/commit/0514531a35edf19e7032eb49f45a98d019f83efe
Ветвим от выбранного состояния ветку для нашего системного ревью, например "system-review/1march2020-goodman": https://github.com/oktend/system-review-example/tree/system-review/1march2020-goodman


Метод ревью кода системы

Создаем от вновь созданной ветки еще одну ветку, в которой будем собирать замечания, например "1march2020-goodman-issues": https://github.com/oktend/system-review-example/tree/system-review/1march2020-goodman-issues
Вносим в эту ветку удобным нам способом наши замечания, как прямо в код, так и в отдельные документы.
Создаем merge request (может называться pull request) к ветке для ревью "system-review/1march2020-goodman-issues" -> "system-review/1march2020-goodman":

https://github.com/oktend/system-review-example/pull/1/files


Теперь наши ветки выглядят примерно так:


https://github.com/oktend/system-review-example/network

Результат

В созданном merge request можно увидеть все собранные в ходе ревью замечания, даже обсудить их.

Состояние, для которого были выдвинуты замечания будет зафиксировано пока ветку явно не удалят.

Замечания можно делать как в отрыве от кода:

https://github.com/oktend/system-review-example/blob/c80b03710059b235347ec781bf08dca9c0e68f7d/review-1march2020-goodman.md

так и в контексте кода:

https://github.com/oktend/system-review-example/blob/c80b03710059b235347ec781bf08dca9c0e68f7d/foo.js

Замечания можно просматривать в веб-интерфейсе github (или аналогов), в IDE, или средствами самого git.

К ревью можно будет вернуться в будущем сохранив замечания и контекст, в котором они были выдвинуты.

Как правильно делать код-ревью


CL: «changelist» — список изменений кода, отправленный в систему контроля версий на ревью.

Аналоги:

PR: «Pull Request» в GitHub
MR: «Merge Request» в GitLab


Терминология:

1.1. Менторство

1.1. Менторство

1.2. Принципы

1.3. Разрешение конфиликтов


1. Стандарты код-ревью

2. На что обращать внимание в ревью

2.1. Дизайн (структура

2.2. Функциональность)

2.3. Сложность

2.4. Тесты

2.5. Наименования

2.6. Комментарии

2.7. Стиль

2.8. Документация

2.9. Каждая строчка

2.10. Контекст

2.11. Позитивные моменты

Итоги

Самое важное при проведении ревью:


Код хорошо спроектирован,
Функционал работает правильно,
Изменения в пользовательском интерфейсе требуют особого внимания: помимо чистоты кода необходимо убедиться в том, что для пользователя изменения выглядят как задумано,
Параллельно выполняемый код исполняется безопасно,
Код не переусложнен,
Нет надуманного и ненужного на данный момент функционала,
На код написаны тесты
Тесты хорошо спроектированы,
Использованы корректные имена для файлов, классов, методов, переменных и тд
Оставлены понятные и нужные комментарии, по большей части поясняющие причины решений, а не суть (суть должна быть понятна из самого кода),
Код задокументирован (g3doc),
Код соответствует нашим стайл-гайдам.



написать администратору сайта