Технология программирования
Рабочая программа учебной дисциплины
Министерство образования и науки Российской Федерации
Владивостокский государственный университет экономики и сервиса
ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ
Рабочая программа учебной дисциплины
по специальности
230201.65 Информационные системы и технологии
Владивосток
Издательство ВГУЭС
2014
ББК **.*
Учебная программа дисциплины "Технология программирования" составлена в соответствии с требованиями Государственного образовательного стандарта высшего профессионального образования Российской Федерации.
Предназначена для студентов по специальности 230201.65 Информационные системы и технологии.
Составитель: , доцент кафедры информационных систем прикладной информатики
Утверждена на заседании кафедры ИСПИ 22.04.14 г. г., протокол
Утверждена на заседании Ученого совета института ИИБС 03.06.14 г. г., протокол
© Издательство Владивостокского
государственного университета
экономики и сервиса, 2014
Введение
Дисциплина "Технология программирования" относится к федеральному компоненту цикла общепрофессиональных дисциплин специальности 230201.65 «Информационные системы и технологии» и введена в учебные планы в соответствии с требованиями Государственных образовательных стандартов указанной специальности.
Дисциплина "Технология программирования" базируется в основном на знаниях информатики в объеме программы высшей школы, а также таких дисциплин, как “Алгоритмизация и программирование”, “Программирование”.
Знания, полученные при изучении дисциплины, используются в последующих дисциплинах: «Операционные системы», «Проектирование информационных систем», «Программирование для Интернет» и в практической деятельности инженера. Дисциплина исключительно важна для выпускников, планирующих работать в индустриальном процессе разработки ПО.
1. Организационно – методические указания
1.1. Цели и задачи изучения дисциплины
Целью изучения дисциплины "Технология программирования" является теоретическая и практическая подготовка студентов в области технологий разработки программ в такой степени, чтобы при менеджменте программного проекта или в процессе участия в его реализации они могли выбирать необходимые технические, алгоритмические, программные и технологические решения, уметь объяснить принципы их функционирования и правильно их использовать. Иметь представление о каждом этапе жизненного цикла программы от проектирования до внедрения и сопровождения. Знать современные стандарты качества программного обеспечения и перспективные направления развития технологии разработки ПО.
Основные задачи изучения дисциплины:
-изложение основных положений технологии разработки ПО, формулировка практических рекомендаций по организации работы коллективов программистов, руководства такими коллективами.
-формирование у студентов знаний по дисциплине, связанных с процессом разработки ПО, включая связи с предметной областью, реализацию, организацию производства, контроль сроков исполнения и качества;
-ознакомление с техническими программными и технологическими решениями, используемыми при разработке ПО;
-приобретение практических навыков работы в коллективе программистов, умения находить правильные технологические решения по выбору структуры программного проекта, методов тестирования и контроля исполнения использование современных инструментальных и методологических средств.
1.2. Перечень компетенций, приобретаемых при изучении дисциплины
В результате освоения дисциплины студент должен приобрести следующие компетенции:
- способность к самостоятельному изучению предметной области.
- составление технического задания, выбор необходимых математических моделей и способов их алгоритмической реализации.
- выбор программных и инструментальных средств для разработки ПО.
- организация верификации, тестирования и проверки стабильности ПО.
- разработка технического задания, составление и анализ плана работ, создание пользовательского интерфейса и выполнение интеграции проекта.
В результате теоретического изучения дисциплины студент должен овладеть такими базовыми понятиями, как:
-Жизненный цикл программ.
-Планирование и управление проектами.
-Тестирование и обеспечение качества.
-Работа в коллективе, версионный контроль.
-Организация команды разработчиков.
-Документация и Сопровождение.
-Стандарты качества программного обеспечения: ISO 9000.
-Структурное проектирование. Восходящий и нисходящий способы проектирования и реализации ПО.
-Реинжиниринг программного обеспечения.
-Встроенные системы синтаксического анализа..
1.3. Основные виды занятий и особенности их проведения при изучении дисциплины
Дисциплина "Технология программирования" изучается студентами очной формы обучения в пятом семестре, Общее количество часов, которое отводится для изучения дисциплины, - 112.
Для студентов очной формы обучения количество аудиторных часов – 68, из них: лекций – 34 часа, лабораторных работ – 34 часа. На самостоятельную работу отводится 44 часов, из них: 10 часов на подготовку к экзамену, 4 часа на подготовку к защите лабораторных работ, 20 часов на курсовую работу, 10 часов на самостоятельное изучение материала и консультации.
1.3.1. Лекционные занятия
При проведении лекций учитывается, что значительная часть материала, описана в литературе весьма противоречиво, существуют прямо противоположные рекомендации для решения одинаковых проблем. Анализируются различные подходы к процессу разработки ПО. На лекциях особое внимание уделяется рассмотрению примеров создания программных комплексов для различных предметных областей.
1.3.2. Лабораторные работы
Лабораторные работы компьютерные, проводятся с использованием программных средств gcc, FLTK, Kdevelop, QTDesigner. Программной средой является операционная система Linux.
1.4. Взаимосвязь аудиторной и самостоятельной
работы студентов при изучении дисциплины
В ходе изучения дисциплины студент слушает лекции по теоретическому материалу, ряд вопросов выносится на самостоятельное изучение. Для помощи студенту в освоении теоретического материала лекционных занятий предусматриваются консультации ведущего преподавателя.
Помимо посещения лекций и лабораторных занятий для освоения теоретического материала и приобретения практических навыков, предусматривается в рамках самостоятельной работы студента ознакомление с интегрированными средами разработки в ОС Linux и платформенно-независимой библиотекой виджетов FLTK.
Для подготовки к экзамену студенту отводится 10 часов самостоятельной работы и консультация ведущего преподавателя перед экзаменом.
1.5. Виды контроля знаний студентов
и их отчетности
В ходе изучения дисциплины предусматриваются следующие виды контроля знаний студентов: текущая и промежуточная аттестация.
Текущая аттестация предназначена для контроля знаний студентов в середине семестра и включает:
защиту отчетов по выполняемым лабораторным работам;
оценку знаний и умений студентов при проведении консультаций по лекционным и лабораторным занятиям;
оценку степени завершенности курсовой работы.
Текущая аттестация проводится в форме защит лабораторных, курсовых работ и является фактическим допуском к экзамену в соответствии с Положением о рейтинговой системе оценки успеваемости студентов во Владивостокском государственном университете экономики и сервиса. Аттестация может быть проведена (в виде исключения) в форме письменного опроса по разделам дисциплины, изученных студентом в семестре, при этом для выставления оценки учитывается количество выполненных и защищенных лабораторных работ за отчетный период, активность студентов на консультациях. Тестирование допускается только для обнаружения пробелов в теоретических знаниях и с предоставлением полного доступа к результатам тестирования (с указанием неверных ответов) преподавателю и студентам.
Результаты текущей и промежуточной аттестаций заносятся в ведомость установленной формы (возможно в цифровой форме).
Промежуточная аттестация – экзамен в пятом семестре. Условием допуска студента к экзамену является успешное прохождение двух текущих аттестаций в соответствии с требованиями Положения о рейтинговой системе оценки успеваемости студентов во ВГУЭС. Кроме того, студент должен выполнить и защитить не менее 60% всех лабораторных работ. Итоговая оценка формируется на основе результатов текущих и промежуточной аттестаций.
1.6. Техническое и программное обеспечение дисциплины
При проведении лекционных занятий особого оборудования в силу традиционности дисциплины не требуется. Необходимость идеомоторного закрепления способов составления плана работ и получения навыков поэтапного создания проекта ПО наилучшим образом реализуются классическими способами изложения материала и ведения конспекта.
Для проведения лабораторных работ используются программные средства редактирования и компиляции программ, стандартные для дисциплин данного направления во ВГУЭС (Visual C, Borland C++ Builder, gcc), FLTK, Kdevelop, QTDesigner. Программными средами являются операционные системы Linux и MS Windows (9x, NT/2000/XP).
2. Содержание дисциплины
2.1. Перечень тем лекционных занятий
Введение
При проведении лекций учитывается, что материал, излагаемый в курсе, усваивается на практически важных примерах, для чего используются экскурсы в различные предметные области. На лекциях особое внимание уделяется принципам организации процесса разработки ПО, методам его тестирования.
Тема 1.Понятие технологии программирования: Особенности промышленного программирования, "программирование для себя" (Just for fun) и "программирование на заказ".
Тема 2.Жизненный цикл программного обеспечения (ПО). Общая организация проекта. Модели разработки ПО. Основные технологические подходы: каскадный, каркасный, сборочный, адаптивный (экстремальное программирование).
Тема 3.Значение предметной области. Каскадная и спиралевидная модели процесса разработки ПО. Возникновение и исследование идеи.
Тема 4.Постановка задачи, оценка осуществимости: Как оценить сложность задачи? Реальность ее решения в заданные сроки при заданных финансовых ограничениях.
Тема 5.Планирование: Сетевой и ленточный графики, треугольник – сроки, работы, ресурсы. Анализ требований и выработка спецификаций ПО. Проектирование архитектуры продукта. Выбор средств реализации.
Тема 6.Управление: Регулярные проверки соответствия графику, меры преодоления отставаний. "Добавлять людей в горящий коллектив – все равно, что заливать пожар керосином"
Тема 7.Тестирование, обеспечение качества: Оценка качества – существенно более широкая задача, чем тестирование. Методы белого и черного ящиков. Создание тестовых наборов данных.
Тема 8.Групповая разработка, управление версиями. Единый репозиторий проекта. Системы RCS, CVS. Методы нумерации версий. Параллельная и конкурентная разработка.
Тема 9.Организация коллектива разработчиков: Матричный метод, метод главного специалиста, вертикальные и горизонтальные координации управления проектом. Основные и вспомогательные подразделения и их задачи.
Тема 10.Документирование: задачи документирования. Самодокументирующиеся программы, состав документации ПО, внутренние и пользовательские документы.
Тема 11.Сопровождение: Исправление ошибок, внесение дополнительной функциональности, повышение эффективности. Требования предъявляемые к ПО и документации для реализации успешного сопровождения.
Тема 12.Управление качеством. Характеристики качества ПО. Количественные критерии качества. Стандарты ISO 9000, 9001. Стандартизация информационных технологий.
Тема 13.Структурное проектирование: Иерархическая декомпозиция, базовые структурные конструкции, Различия структурного и объектно-ориентированного проектирования.
Тема 14.Разработка интерфейса пользователя: решаемые задачи и средства. Целесообразность и метафоричность интерфейса. Виды интерфейсов.
Тема 15.Средства автоматизации разработки программ: CASE-средства. Примеры инструментальных технологических средств: RationalRose, ErWin.
Тема 16.Реинжиниринг программных систем: Перевод устаревших программ на новые языки и платформы, возвратное проектирование – извлечение знаний из текста программы.
2.2. Перечень тем лабораторных занятий
Тема 1.Использования средств автоматизации при создании программных проектов. Генерация make-файлов, формирование проекта.
Тема 2.Выбор устойчивых алгоритмов и их реализация. Разработка программы в соответствии со спецификацией. Предлагаемая предметная область – вычислительная геометрия. Пересекаются ли два отрезка? Находится ли точка внутри многоугольника?
Тема 3.Реализация ПО методами нисходящего и восходящего проектирования (на примере к.-л. конкретного проекта).
Тема 4.Пользовательский интерфейс к задаче из лабораторной работы 1. Средства реализации – FLTK (допускается Windows API).
Тема 5.Нахождение решения – различные пути к успеху. Отсечения лишних попыток. Метод узловых точек.
Тема 6.Создание синтаксического распознавателя (грамматика выражений). Инструментарий для создания распознавателей.
Тема 7.Реализация автоматического тестирования программы путем реализации конвейерной обработки.
2.3 Примерные темы курсовых работ
Курсовая работа проводится с целью закрепления теоретических знаний и выработки навыков работы в коллективе программистов. Работы выполняются коллективами (3-4 студента на один проект), производится распределение ролей и составляются графики выполнения работ. Темы курсовых работ изменяются год от года и относятся к различным предметным областям, представляя различные классы задач. Выбор средств реализации студентами производится самостоятельно.
Далее приводится несколько примеров тем с предварительной оценкой структуры проекта и необходимых средств реализации.
Тема 1.Форматирование и выравнивание текста на странице с многими колонками с учетом ширины отдельных символов.
Ресурсы: компиляторы, графические библиотеки, алгоритмы вывода символа (возможно PCL-шрифты, алгоритмы работы с ними)
Компоненты программного проекта (очевидные) :
-модуль ввода текста из файла и установочных параметров из файла конфигурации
-интерфейс пользователя (дизайн, элементы управления)
-подпрограммы расчета формата строки, колонки
-модуль отображения
-модуль вывода в файл (на печать)
-модуль помощи
Тема 2.Интерполяция на треугольной сетке
Программа для осуществления интерполяции на карте. Программа выполняет ввод цифрового рельефа местности, заданного изолиниями и решает интерполяционные задачи:
-проведение промежуточной изолинии;
-вычисление высоты в любой заданной точке.
Программа должна содержать также средства для ввода изолиний, проверки правильности ввода и отображения карты на экране.
Ресурсы: компиляторы, графические библиотеки, алгоритмы интерполяции в барицентрических координатах, алгоритмы триангуляции.
Компоненты программного проекта (очевидные) :
-модуль ввода данных и их проверки
-интерфейс пользователя (дизайн, элементы управления)
-подпрограммы интерполяции
-модуль отображения и управления мышью
-модуль помощи
Тема 3.Программа, выполняющая морфологический анализ слов в предложениях на русском языке
В программе необходимо выделять корни слов, приставки, суффиксы, окончания, определять составные двухкоренные слова. Ввод текста – из текстового файла.
Частичные подзадачи: нахождение определенных грамматических форм (прилагательные, наречия) во всем тексте и составление их частотного словаря. Программа должна правильно работать с любыми морфологически правильными фразами, например "глокая куздра штеко бодланула бокра и куздрячит куздренка" (Бодуэн де Куртенэ).
Ресурсы: Морфология русского языка, алгоритмы работы с AVL-деревьями
Компоненты программного проекта (очевидные) :
-модуль ввода текста из файла и вывода словаря в файл;
-интерфейс пользователя (дизайн, элементы управления);
-подпрограммы морфологического анализа;
-модуль составления сортированного сбалансированного дерева;
-модуль помощи;
-модуль гипертекстового описания ( справка по морфологии языка).
Тема 4.Программа для вывода графика функции одной переменной, нахождения экстремумов функции и ее корней.
Необходимо разработать программу построения графика функции по ее формульному представлению. Формула задается в виде выражения на языке Си, например, y=sin(x*x)/2 или y=x*x-2*x+4.
Реализовать синтаксический разбор этого выражения с одновременным вычислением значений функции для набора значений абсцисс.
Ресурсы: средство yacc (pcyacc), грамматика языка формул.
Компоненты программного проекта (очевидные) :
-yacc-программа;
-интерфейс пользователя (дизайн, элементы управления);
-подпрограммы отображения осей координат;
-модуль помощи;
-модуль ввода параметров и формульной строки с одновременной проверкой синтаксиса (и, возможно семантики).;
-библиотека формульных записей функций на языке Си.
3. Методические рекомендации
по изучению дисциплины
3.1. Перечень и тематика
самостоятельных работ студентов
В рамках общего объема часов, отведенных для изучения дисциплины, предусматривается выполнение следующих видов самостоятельных работ студентов (СРС): изучение теоретического материала при подготовке к защите лабораторных работ, итоговое повторение теоретического материала.
Для самостоятельного изучения дисциплины выносится часть материала по всем темам дисциплины с самоконтролем по контрольным вопросам и возможностью консультации у ведущего преподавателя общим объемом 40 часов СРС. Для закрепления материала и приобретения навыков расчета рекомендуется выполнение следующих задач:
1.Освоение методов работы в интегрированной оболочке VisualC или Kdevelop;
2.Изучение методов работы с утилитами make, autoconfig, CVS.
Задания и методические указания по их выполнению размещаются перед выполнением работ на сервере [7].
3.2. Методические рекомендации по организации
самостоятельной работы студентов
Для выполнения лабораторных работ в соответствии с разделом 2.2 настоящей учебной программы студент должен предварительно самостоятельно освоить теоретический материал соответствующих тем.
Для защиты работы он должен знать теоретический материал и продемонстрировать знание путем написания программ.
Объем СРС, отводимый на эту работу составляет 20 часов.
На подготовку к экзамену отводится 20 часов СРС.
3.3 Состав технических средств
и рекомендации по работе с ними
Для проведения лабораторных работ и самостоятельного изучения дисциплины используются компиляторы языков программирования C C++ (gcc, Borland C++ Builder, Visual C, - по выбору студентов), генератор синтаксических распознавателей bison (yacc), в случае работы под операционной системой Windows необходима установка пакета программ unxutils.
Методические указания по использованию FLTK и yacc содержатся в [3, 7].
3.4Обзор рекомендованной литературы
Дисциплина "Технология программирования" является в основном эмпирической, в ней рассматриваются типовые ситуации, на базе которых осуществляются рекомендации и вырабатываются стандарты (общие и отраслевые). По тематике курса можно рекомендовать в качестве основных учебников книги [1,2]. При изучении тем, связанных с разработкой пользовательского интерфейса и выполнении лабораторных работ по этой теме рекомендуется пособие [6], там же можно найти материал, связанный с создание собственных синтаксических анализаторов [6, глава 4]. Для углубленного изучения курса можно рекомендовать издания [4-5].
Для изучения теоретического материала по дисциплине можно предложить классический учебник [1].
Параллельно с ним для изучения тем 1, 2, 3, 5, 6 рекомендуется использовать [4,5], где ряд вопросов рассмотрен несколько более подробно.
Для выполнения лабораторных работ во ВГУЭС материалы в достаточном количестве изданы и размещены на сервере [7]. Эти материалы соответствуют перечню лабораторных работ раздела 2.2.
3.5. Темы для самостоятельного освоения дисциплины (подготовка для обсуждения на семинарах)
Инструментальные средства
1.Принципы выбора программных средств для реализации программных проектов.
2.Инструментарий разработчика ("toolbox"). Состав инструментария и источники его пополнения.
3.Пакеты прикладных подпрограмм и библиотеки алгоритмов. Их использование.
4.Применение генераторов синтаксических распознавателей. Программное средство YACC.
5.Использование утилиты make.
6. Использование разнородных языков программирования в проекте, применение ассемблерных вставок и внешних ассемблерных подпрограмм в языках высокого уровня (Си, ПРОЛОГ).
6.Специализированные программные продукты для разработки пользовательского интерфейса. Стандартные элементы управления (FLTK).
7.Использование готовых программных средств при разработке проекта (реинжениринг).
8.Средства контроля версий программных проектов.
9.Особенности отладки программных продуктов, разработка тестирующей программы. Трассировка программы. Средства используемые для отладки.
10.Среды разработок программного обеспечения.
11.Алгоритмизация
12.Оценка времени работы различных алгоритмов. О-символика.
13.Оценка времени работы алгоритма и объема используемой памяти.
14.Качество ПО, качество процесса разработки
15.Характеристики качества программного обеспечения.
16.Понятия «робастная программа», «правильная программа», «хорошая программа».
17.Модель знаний о процессе разработки ПО. SWEBOK.
18.Методы тестирования. Использование методов черного и белого ящиков.
Жизненный цикл ПО
20.Основные фазы жизненного цикла программного обеспечения.
21.Спиральная модель жизненного цикла ПО
22.V-образная модель жизненного цикла ПО
23.Сопровождение программного обеспечения. Особенности сопровождения сложных программных продуктов.
24.Требования к документации программного обеспечения.
Проектирование и менеджмент
25.Управление выполнением проекта. Подбор кадров и проблемы коммуникации. В коллективе программистов
26.Принципы формирования коллектива программистов для разработки крупного программного проекта.
27.Влияние предметной области на структуру и функции программных продуктов. Важность наличия специалиста по предметной области в бригаде программистов.
28.Использование метода главного программиста при разработке программного проекта. Области применения метода ГП.
29.Роль математической модели в разработке программного проекта.
30.Пользовательский интерфейс, его роль и выбор средств для его реализации. Привести примеры удачных решений.
31.Восходящий и нисходящий способы разработки программного проекта. Области применения этих методов разработки.
32.Установление рамок проекта разработки программного продукта. Виды рамочных ограничений
33.Языки моделирования процесса разработки ПО. Язык UML
34.Анализ потоков данных при разработке ПО. Выявление узких мест и способы их устранения.
35.Модульное программирование. Понятие модуля, его свойства.
36.Граф подчиненности модулей и оверлейная организация программ.
37.Типы межмодульной связи. Преимущества и недостатки сильносвязанных и слабосвязанных модулей.
38.Сопровождение программного обеспечения. Особенности сопровождения сложных программных продуктов.
Представители задач различных предметных областей
38.Построение выпуклой оболочки на наборе n-мерных точек (n=2,3)..
39.Деревья. Описание структуры двоичных деревьев. Алгоритмы работы с двоичными деревьями.
40.Устойчивость и регуляризация в применении к уравнениям Фредгольма 1 рода. Порядок регуляризации.
41.Разбиение области на треугольные конечные элементы (триангуляция)
42.Задачи интерполяции на прямоугольной и треугольных сетках. Барицентрические координаты
43.Изопериметрические задачи (задача Дидоны и др.), методы их решения на ЭВМ.
44.Принцип оптимальности Р. Беллмана и его использование в составлении алгоритмов программ.
45.Задачи сглаживания и фильтрации экспериментальных данных.
46.Задача поиска в неупорядоченных и упорядоченных массивах. Сравнение времени работы различных алгоритмов.
47.Задачи аппроксимации, интерполяции и сглаживания для одномерных и многомерных задач (постановка задачи, используемые алгоритмы).
Вопросы для самоконтроля
1.Из каких этапов состоит жизненный цикл ПО?.
2.Как классифицируются программные проекты по количеству участников?.
3.Какие классы предметных областей существуют?
4.В каких единицах можно выразить сложность программы?
5.Как находится и какое значение имеет критический путь на сетевом графике проекта?
6.Для чего используется ленточный график?
7.С помощью каких средств определяется размерность психологического типа?
8.Для устранения ошибок в крупном проекте, предназначенном для управления промышленным предприятием целесообразно послать на предприятие …
9.Психология людей и выбор правильного пользовательского интерфейса
10.В каких случаях недопустимо использование настраиваемого представления интерфейса?
11.Каким способом оценивается минимальное время выполнения проекта?
12.Какова специфика небольшого (3-5 человека) коллектива программистов?
Список литературы
Основная
1.Мозговой программирования. СПб, Наука и техника, 2006 г.
2.С. Орлов. Технологии разработки программного обеспечения. СПб.; Питер., 2004 г. (2-е издание в плане издательства на 2009 г.)
3.Главы из книги , , . Управление программными проектами.- М.: «Вильямс», 2003: режим доступа: http://www. cognitive. ru/innovation/sbornic8.
4.. Технология готовых решений в программировании (учебное пособие).-Владивосток, Изд-во ВГУЭС, 2004.
Дополнительная
5.. Технология программирования. М., Изд-во МГТУ, 2002.
6.. Правила программирования С и С++.- М.: Бином, 1996.
7.ftp://bkv. vvsu. ru/pub/TP/Books - книги по программированию.


