2. Цели доклада
Познакомить слушателей с методом разработки ПО
в ЛВК и основными средствами используемыми в
полном цикле разработки.
Инструменты:
Средства сборки make и cvslvk
Системы контроля версий CVS и Subversion
Редакторы
Компилятор GCC
Отладчики gdb, ddd, valgrind
Система автоматизации тестирования QMTest
Bug tracker Bugzilla
Поддержка документирования Doxygen
3. Цикл разработки ПО
Постановка задачи
Проектирование
Реализация
Отладка
Тестирование
Документация
Внедрение
4. Цикл разработки ПО
Получение задания и исходных данных
Редактирование
Сборка
Отладка
Тестирование
Документирование
Инсталляция
Передача результатов
5. Проект
Средства сборки. Проект.
Базовые понятия
средств сборки:
Проект
Исходные файлы
Цели
Сборка проекта
Исходные
файлы
Цели
Преобразования
6. Средства сборки. Зависимости
Зависимости
Отслеживание
зависимостей при
сборке
(инкрементальная
сборка)
Неявные зависимости
Автоматическое
отслеживание
зависимостей
Вариантность
Проект
Исходные файлы
Цели
7. Средство сборки make
Проект: Makefile
Автоматическое
отслеживание
изменений
Иcпользование:
make target
TARGET=program1
$(TARGET): file1.c
gcc -o $@ $<
clean:
rm -f $(TARGET)
8. Проблемы совместной
разработки сложных проектов.
Зависимости между подпроектами
Общие библиотеки
Параллельная разработка,
отслеживание изменений
Сложность (громоздкость синтаксиса
make)
9. Средство сборки cvslvk. Задачи,
возможности.
Упрощение Makefile для сложных проектов
Репозиторий скомпилированных модулей
(управление библиотеками)
Управление зависимостями между модулями
Расширяемость путем добавления новых
модулей с правилами
11. Средство сборки cvslvk.
Сценарий использования
export CL_DIR=/space/cvslvk
make
make update_wi
setup-cvslvk
CL_MODULE = prog1
CL_USE_MODULES = Qt3 lib1
EXECUTABLE = prog1
SOURCES = main.cpp file1.cpp file2.cpp
12. Цикл разработки ПО
Получение задания и исходных данных
Редактирование
make
Отладка
Тестирование
Документирование
make update_wi
Передача результатов
13. Утилиты diff и patch
diff – сравнение
файлов
patch –
автоматическое
изменение в
соответствии с
результатами diff
форматы diff (-u)
файл1
файл2
diff diff-файл
patch
14. Средства контроля версий.
Задачи
История изменений
Параллельная совместная разработка
Одновременная разработка нескольких
версий проекта (стабильная и
экспериментальная версии, разработка
независимых новых фич)
15. Средства контроля версий.
Архитектура
Репозиторий
системы КВ, модуль.
Версия.
Локальная копия.
diff
Репозиторий системы КВ
Module1 Module2
Локальная копия модуля
16. Средства контроля версий.
Параллельная разработка
checkout/commit
update
Конфликты
Репозиторий системы КВ
Module1 версия 5
Локальная копия модуля
checkout commit
6
Локальная копия модуля
checkout checkout
commit
7
update
commit
8
17. STABLERELEASE
Средства контроля версий. Теги
и ветви
Теги
HEAD
Ветви
Слияние ветвей,
проблемы слияния
Когда и как
использовать ветви
1
2 2.1
3
4
5
2.2
2.3
18. Средство контроля версий CVS
export CVSROOT=
cvs login
cvs checkout
cvs update
cvs add
cvs commit
19. Средство контроля версий
Subversion
Subversion – средство КВ нового
поколения
Отличия в нумерации версий
Расширенные возможности управления
файлами/каталогами (переименование,
копирование, удаление, создание)
20. Цикл разработки ПО
Получение задания
cvs checkout
Редактирование
make
Отладка
Тестирование
Документирование
make update_wi
cvs commit
21. Редакторы
Windows-style: kate, kwrite
IDE kdevelop3
emacs
vi (vim – VI iMproved)
vi
gvim
evim
vimtutor – vim tutorial
22. Компиляторы
gcc, g++
Выбор используемого компилятора,
переменные CC, CXX, CC_FLAGS,
CXX_FLAGS для make
Распределенная компиляция (distcc)
make -jN
23. Отладчики в UNIX
gdb – стандартный отладчик в UNIX
$gdb program – запуск отладчика
:l(ist) [file:line] – вывод файла:строки
:b(reak) source.cpp:123 – установка breakpoint
:r(un) – запуск программы
:s(tep)n(ext) – выполнение шага
:f(inish) – выход из функции
:where – печать стека
:p(rint) var – печать значения переменной var
ddd – графический frontend к gdb
24. Отладка использования памяти.
Valgrind
Запуск: $valgrind ./myprogram
Сообщает о типичных ошибках
Использование неинициализированной
переменной
Утечки (неосвобождение) памяти
Обращения по «испорченным» указателям
25. Цикл разработки ПО
Получение задания
cvs checkout
evim/gvim
make
gdb, valgrind
Тестирование
Документирование
make update_wi
cvs commit
26. Тестирование
Для каждой функциональности
необходимо писать тесты
Наборы тестов следует прогонять как
минимум после любых значительных
изменений
Для автоматизации можно
использовать специальные пакеты
QMTest
28. Bugtracking. Bugzilla
Задача bugtracking’а (баги, фичи)
Случай одного разработчика
Ситуация коллективной разработки
Bugzilla - bugtracker используемый в
ЛВК.
http://zigzag.lvk.cs.msu.su/bugzilla
29. Цикл разработки ПО
Получение задания и исходных данных
Редактирование
Сборка
Отладка
Тестирование
Документирование
Инсталляция
Передача результатов
30. Цикл разработки ПО
Получение задания, bugzilla
cvs checkout
evim/gvim
make
gdb, valgrind
QMTest
doxygen, bugzilla
make update_wi
cvs commit
31. Источники дополнительной
информации. I
Системы сборки:
make
make(1)
The GNU Make Manual
cvslvk
Внутренний документ ЛВК
Средства контроля версий
CVS
cvs(1)
https://www.cvshome.org
Subversion
svn(1), svnadmin(1)
http://subversion.tigris.org/