Лекции по СП
Описание файла
Документ из архива "Лекции по СП", который расположен в категории "". Всё это находится в предмете "практикум (прикладное программное обеспечение и системы программирования)" из 4 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Онлайн просмотр документа "Лекции по СП"
Текст из документа "Лекции по СП"
Системы программирования.
Курс записан со слов Тамары Васильевны РУДЕНКО студентами 2 потока 2 курса 2005 года запуска. За ошибки дорогая редакция ответственности не несёт.
План курса:
1. Системы программирования.
2. Элементы теории трансляции.
3. Язык C++.
Рекомендуемая литература:
C++:
-
Б. Страуструп. ‘Язык C++. Специальное издание’. Бином, 2001.
-
Г. Шилдт. ‘Самоучитель C++’.
-
Ира Пол. ‘ООП на C++’.
-
Стандарт C++. ISO/IEC 14882. (1998)
-
Б. Страуструп. ‘Дизайн и эволюция языка C++’.
-
Г. Буч. ‘Об’ектно-ориентированный анализ и проектирование с примерами приложений на C++’. http://vmk.ugatu.ac.ru/book/buch/index.htm
-
Г. Буч, Д. Рэмбо, А. Джакобсон. ‘Язык UML. Руководство пользователя’. http://povt.zaural.ru/edocs/uml/content.htm
СП:
-
А.Ю. Молчанов. ‘Системное программное обеспечение’, 2003.
-
А.В. Гордеев, А.Ю. Молчанов. ‘Системное программное обеспечение’, 2001.
-
А. Ахо, Р. Сети, Дж. Ульман. ‘Компиляторы. Принципы, технологии, инструменты’.
-
А. Ахо, Дж. Ульман. “Green Dragon”. ‘Теория компиляции’.
-
Волкова И.А., Руденко Т.В. ‘Формальные грамматики и языки. Элементы теории трансляции’. 1999.
Материалы в поддержку лекций и практикума доступны на http://cmcmsu.no-ip.info/
Системы программирования. Вводные понятия.
Система программирования – комплекс программных средств, которые поддерживают весь технологический цикл разработки программного продукта.
Программа – текст на языке программирования, который его автор способен запустить на выполнение на ЭВМ в рамках некоторой конкретной среды, дать входные данные, получить результаты и понять их. Например, мы пишем программы в процессе обучения на ВМК.
Программный продукт – программа, которую пользователь может инсталлировать, задать ей входные данные, сам анализировать результаты, а так же сопровождать её, то есть программный продукт может жить без присутствия автора (отличительное свойство – отчуждаемость). Для этого программа должна быть хорошо документирована, тщательно протестирована, должна быть возможность настройки. Расходы при разработке программного продукта возрастают примерно в три раза относительно разработки программы.
Интегрированный программный продукт – программный продукт, который может быть интегрирован с другими программными продуктами в рамках некоторой программной системы. Интегрированные программные продукты одной системы, как правило, имеют похожий пользовательский интерфейс, средства обмена данными друг с другом. Возникает проблема совместного доступа к ресурсам (процессор, память).
Например, Microsoft Office. Приложения имеют похожие кнопочки и менюшки, могут обмениваться данными с помощью технологии OLE (Object Linking Environment).
При разработке интегрированного программного продукта расходы возрастают ещё в три раза.
Технологический цикл программного продукта.
Технологический цикл (жизненный цикл) – последовательность действий, выполняющихся при разработке программного продукта.
По статистике Standish Group, разработка программ не всегда заканчивается успешно. Было исследовано 300 компаний и 24 тысячи проектов. Только 26% из них были завершены в срок, бюджет не был превышен, вся функциональность была реализована. 46% были завершены не вовремя, бюджет был превышен, функциональность реализована не полностью. 28% проектов вообще не были завершены. Поэтому выбор технологии программирования – очень важная и нетривиальная задача. Он зависит от различных факторов: от специфики проекта, от компании-разработчика и т.д.
Технология программирования – набор рекомендаций по разработке программного продукта, включающий в себя разбиение на этапы, выбор инструментальной поддержки и т.д.
Этапы технологического цикла:
-
анализ требований (требования заказчика уточняются, документируются, хотя бы частично формализуются. Для этого применяется простое текстовое описание, таблица решений, которая содержит условия на входные данные и эффекты на них, а также специальные языки спецификации, например Use case.)
-
проектирование (как правило, используется стратегия divide & conquer, проектирование в большом и в малом. Сначала выявляется структура, потом уточняются элементы структуры. Применяется алгоритмическая или об’ектная декомпозиция. При первой процесс обработки данных разбивается на модули, в рамках каждого из которых выбираются некоторые алгоритмы. При второй предметная область разбивается на активные части – об’екты, которые могут взаимодействовать с другими об’ектами. Применяются диаграммы взаимодействия об’ектов, а также UML – Universal Markup Language.)
-
кодирование (по описанной в спецификации функциональности и интерфейсам кодится модуль/класс)
-
тестирование и отладка (тестирование – запуск программы на некоторых входных данных с целью обнаружить дефект – несоответствие ожидаемого результата и выданного программой. Отладка – обнаружение причины дефекта и её исправление. Различают тестирование методом белого ящика и методом чёрного ящика (когда известен исходный код, или, соответственно, нет). По цели различают функциональное, нагрузочное, стрессовое, регрессионное, адаптивное тестирование.)
-
внедрение (перенос продукта на целевую систему с инструментальной)
-
сопровождение (исправление ошибок, перевод в новую среду, добавление функциональности).
Этапы 1 – 4 относятся к непосредственной разработке продукта. Используют различные модели чередования этапов:
-
каскадная (устар.)
-
каскадно-возвратная (появляется возможность возврата в любой момент)
-
спиральная (итерационная) – сейчас наиболее распространена
Прототипы обладают частичной функциональностью и могут быть показаны заказчику. Достоинством этой модели является возможность на каждой итерации согласовывать требования заказчика со своим видением задачи. Сопровождение продукта при использовании этой модели не требует перестройки работы.
Идеальная система программирования
Идеальная система программирования должна включать в себя некоторые составные части, поддерживающая технологический цикл.
1, 2. Анализ требований и проектирование:
-
средство для создания текстовых материалов и диаграмм
-
контролёр непротиворечивости (например, в таблице решений – неперекрываемость входных данных)
-
браузер, который показывает взаимодействие компонентов системы
-
средства вывода этой информации
-
репозиторий проекта – организованное хранилище всех этих материалов, для него должны быть обеспечены:
-
согласованность изменений (непротиворечивость дополнений по сравнению со старой архитектурой)
-
непротиворечивость
-
санкционированный доступ (разрешение прав группам – проектировщикам, которые могут менять структуру проекта, кодеры могут менять интерфейс об’ектов, которые они описывают, но только в разрешённых пределах)
-
контроль версий (конфигураций) (версии, зависимости, восстановление)
-
3. Кодирование:
-
частичная автоматизация генерации кода (например, генерация кода пользовательского интерфейса)
-
богатые библиотеки алгоритмов/классов (и программа-библиотекарь)
-
синтаксически-ориентированный редактор (хинты, хоткеи, выделение служебных слов, баланс скобок, дописывание идентификаторов)
-
транслятор (компилятор или интерпретатор) – это нечто, что может помочь человеку, написавшему программу на языке высокого уровня, обеспечить её выполнение в рамках некоторой среды
-
редактор связей (линкер) – программа, получающая на вход отдельные файлы с неразрешёнными внешними ссылками и увязывающая отдельные связи
-
макрогенератор
-
загрузчик – программа, обеспечивающая настройку модуля на конкретные адреса оперативной памяти, функции загрузчика в последнее время выполняет не система программирования, а операционная система
4. Тестирование и отладка:
-
отладчик (желательно общение программы с программистом не в терминах адресов, а в терминах программы – переменных, функций, об’ектов, т.е. использование не только адресно-кодового, но и символьного отладчик)
-
генератор тестов (по частично формализованной спецификации)
-
автоматизация прогона (полезно при регрессивном тестировании). По словам ТВ, в Microsoft проги тестируют автоматически по ночам. Я знал, что их пишут не для людей
-
частичная автоматизация обработки результатов прогона
-
анализ тестового покрытия – проверка на соответствие выборки заявленному требованию (например, при тестировании методом белого ящика с проверкой всех операторов программы аналайзер проверит, прошлись ли мы по всем ветвям алгоритма)
Кроме того, идеальная система программирования должна включать также средства управления проектом (как оказывается, ни программисты, ни менеджеры не могут эффективно управлять проектом; как показывает практика, для этого необходим человек, выросший из этого или похожего проекта). Средства системы программирования для управления проектом должны включать в себя:
-
средства заблаговременного планирования работ (составление списка задач, графика работ, распределение ответственности)
-
управление рисками – оценка степени рисков и решение проблем (менеджеры говорят, что проблемы возникают, как правило, не технические, а организационные: нестабильные требования заказчика, низкая вовлечённость высшего руководства, низкое привлечение пользователей)
-
координация и отслеживание плана работ
Также важна для систем программирования поддержка виртуальных групп разработчиков. Понятно, что взаимодействие программистов можно организовать с помощью электронной почты, мгновенных сообщений, форумов, видеоконференций. Но при этом возникают проблемы секретности, совмещения разных средств обмена информацией, архивирования и ведения логов.
Близки к нашей идеальной системе программирования так называемые CASE-средства (Computer Aided Software Engineering). Там подразумевается:
-
наличие репозитория проекта
-
поддержка визуальных методов проектирования (мощные графические средства, язык моделирования и т.д.)
-
средства ведения документации
-
интеграция всех этих средств.
Реальные CASE-средства:
-
Rational Suite – очень дорогая система. Компания Rational предлагает не только инструментальные средства, но и методику использования – Rational Unified Process
-
Rational Rose (анализ и проектирование)
-
Rational Team Test (тестирование)
-
Rational Robot – запоминание переходов в пользовательском интерфейсе
-
ERwin от фирмы Computer Outsource Internal
-
Paradigm Plus от Platinum
-
Oracle Design от угадайте кого
Система программирования C в UNIX:
-
компиляторы
-
редакторы
-
отладчики
-
координатор make – программа, которая по описанию зависимостей между частями проекта и действий по их сборке (нужен более широкий термин!) обеспечивает перекомпиляцию только тех частей проекта, которые это требуют (которые были изменены); непосредственно компиляцией и сопутствующими действиями make не занимается, используя указанные ему средства
-
Source Code Control System (SCCS) – управление доступом и сохранение версий
-
lint анализирует код лучше, чем компилятор, но не создаёт об’ектного модуля
-
manual (man man)
-
форматёры nroof (визуализирует специально размеченный текст) и tbl (перевод в таблицу)
-
lex – генератор лексических анализаторов и yacc – генератор синтаксический анализаторов
ЧАСТЬ I
Системы программирования, поддерживающие об’ектно-ориентированную разработку. Принципы об’ектно-ориентированного программирования.
Проектирование (декомпозиция) – разбиение системы на подсистемы.
Нас интересует об’ектная декомпозиция, то есть статическая структура системы – об’екты и связи между ними, и динамическое поведение системы – обмен сообщениями между об’ектами. В C++ обмен сообщениями представлен набором методов об’екта, которые можно вызывать из других об’ектов.