Upload
alexander-gerasiov
View
78
Download
1
Embed Size (px)
Citation preview
Инструменты разработки ПО
Лаборатория Вычислительных Комплексов, 2005
http://lvk.cs.msu.su
Цели доклада
Познакомить слушателей с методом разработки ПО в ЛВК и основными средствами используемыми в полном цикле разработки.
Инструменты: Средства сборки make и cvslvk Системы контроля версий CVS и Subversion Редакторы Компилятор GCC Отладчики gdb, ddd, valgrind Система автоматизации тестирования QMTest Bug tracker Bugzilla Поддержка документирования Doxygen
Цикл разработки ПО
Постановка задачи Проектирование Реализация Отладка Тестирование Документация Внедрение
Цикл разработки ПО
Получение задания и исходных данных Редактирование Сборка Отладка Тестирование Документирование Инсталляция Передача результатов
Проект
Средства сборки. Проект.
Базовые понятия средств сборки: Проект Исходные файлы Цели Сборка проекта
Исходные файлы
Цели
Преобразования
Средства сборки. Зависимости
Зависимости Отслеживание
зависимостей при сборке (инкрементальная сборка)
Неявные зависимости Автоматическое
отслеживание зависимостей
Вариантность
Проект
Исходные файлы
Цели
Средство сборки make
Проект: Makefile Автоматическое
отслеживание изменений
Иcпользование: make target
TARGET=program1
$(TARGET): file1.c
gcc -o $@ $<
clean:
rm -f $(TARGET)
Проблемы совместной разработки сложных проектов.
Зависимости между подпроектами Общие библиотеки Параллельная разработка,
отслеживание изменений Сложность (громоздкость синтаксиса
make)
Средство сборки cvslvk. Задачи, возможности. Упрощение Makefile для сложных проектов Репозиторий скомпилированных модулей
(управление библиотеками) Управление зависимостями между модулями Расширяемость путем добавления новых
модулей с правилами
Средство сборки cvslvk. Архитектура
Модуль Рабочая инсталляция Репозиторий рабочих инсталляций
Средство сборки cvslvk. Сценарий использования
export CL_DIR=/space/cvslvk make make update_wi setup-cvslvk
CL_MODULE = prog1CL_USE_MODULES = Qt3 lib1
EXECUTABLE = prog1
SOURCES = main.cpp file1.cpp file2.cpp
Цикл разработки ПО
Получение задания и исходных данных Редактирование make Отладка Тестирование Документирование make update_wi Передача результатов
Утилиты diff и patch
diff – сравнение файлов
patch – автоматическое изменение в соответствии с результатами diff
форматы diff (-u)
файл1
файл2diff diff-файл
patch
Средства контроля версий. Задачи
История изменений Параллельная совместная разработка Одновременная разработка нескольких
версий проекта (стабильная и экспериментальная версии, разработка независимых новых фич)
Средства контроля версий. Архитектура Репозиторий
системы КВ, модуль. Версия. Локальная копия. diff
Репозиторий системы КВ
Module1 Module2
Локальная копия модуля
Средства контроля версий. Параллельная разработка
checkout/commit update Конфликты
Репозиторий системы КВ
Module1 версия 5
Локальная копия модуля
checkout commit
6
Локальная копия модуля
checkout checkoutcommit
7
updatecommit
8
STABLERELEASE
Средства контроля версий. Теги и ветви Теги HEAD Ветви Слияние ветвей,
проблемы слияния Когда и как
использовать ветви
1
2 2.1
3
4
5
2.2
2.3
Средство контроля версий CVS
export CVSROOT= cvs login cvs checkout cvs update cvs add cvs commit
Средство контроля версий Subversion
Subversion – средство КВ нового поколения
Отличия в нумерации версий Расширенные возможности управления
файлами/каталогами (переименование, копирование, удаление, создание)
Цикл разработки ПО
Получение задания cvs checkout Редактирование make Отладка Тестирование Документирование make update_wi cvs commit
Редакторы
Windows-style: kate, kwrite IDE kdevelop3 emacs vi (vim – VI iMproved)
vi gvim evim
vimtutor – vim tutorial
Компиляторы
gcc, g++ Выбор используемого компилятора,
переменные CC, CXX, CC_FLAGS, CXX_FLAGS для make
Распределенная компиляция (distcc) make -jN
Отладчики в 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
Отладка использования памяти. Valgrind
Запуск: $valgrind ./myprogram Сообщает о типичных ошибках
Использование неинициализированной переменной
Утечки (неосвобождение) памятиОбращения по «испорченным» указателям
Цикл разработки ПО
Получение задания cvs checkout evim/gvim make gdb, valgrind Тестирование Документирование make update_wi cvs commit
Тестирование
Для каждой функциональности необходимо писать тесты
Наборы тестов следует прогонять как минимум после любых значительных изменений
Для автоматизации можно использовать специальные пакеты QMTest
Документирование исходных текстов. Doxygen
Задача документирования Документирование интерфейсов и
типов данных Система Doxygen
Bugtracking. Bugzilla
Задача bugtracking’а (баги, фичи) Случай одного разработчика Ситуация коллективной разработки Bugzilla - bugtracker используемый в
ЛВК.http://zigzag.lvk.cs.msu.su/bugzilla
Цикл разработки ПО
Получение задания и исходных данных Редактирование Сборка Отладка Тестирование Документирование Инсталляция Передача результатов
Цикл разработки ПО
Получение задания, bugzilla cvs checkout evim/gvim make gdb, valgrind QMTest doxygen, bugzilla make update_wi cvs commit
Источники дополнительной информации. 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/
Источники дополнительной информации. II Редакторы
emacs http://www.gnu.org/software/emacs
vim vimtutor :help http://www.vim.org Внутренняя документация ЛВК
Компилятор gcc
gcc(1), g++(1) http://gcc.gnu.org
Отладчики gdb
gdb(1) http://www.gnu.org/software/gdb
valgrind valgrind(1) http://www.valgrind.org
Источники дополнительной информации. III Документирование
Doxygen doxygen(1) http://www.doxygen.org
Тестирование QMTest
http://www.codesourcery.com/qmtest Bugtracking
Bugzilla http://www.bugzilla.org
Источники дополнительной информации. IV
Русскоязычные ресурсы посвященные UNIX и OpenSource в Интернет:http://www.opennet.ruhttp://linux.org.ru/books
Спасибо за внимание