Оценка уровня подготовки в системе электронного обучения программированию

Дмитрий Григорьевич Хохлов,

доцент, к.т.н.,

Казанский национальный исследовательский технический университет им. А.Н. Туполева (КНИТУ-КАИ),

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

ул. К. Маркса, 10,  г. Казань, Россия, 420111, (843)2310028

Hohlovdg@mail.ru

Земфира Хаматовна Захарова,

доцент,

Казанский национальный исследовательский технический университет им. А.Н. Туполева (КНИТУ-КАИ),

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

ул. К. Маркса, 10,  г. Казань, Россия, 420111, (843)2310028

Zemfira@asu.kstu-kai.ru

Артур Николаевич Захаров,

аспирант,

Казанский национальный исследовательский технический университет им. А.Н. Туполева (КНИТУ-КАИ),

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

ул. К. Маркса, 10,  г. Казань, Россия, 420111, (843)2310028

Artur.zaharov@gmail.com

Аннотация

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

Subsystem of learner’s knowledge estimation in electronic learning system on basic programming is considered. Principles of development, complication estimation and examples of tests and tasks on program analysis and developing are described. Means for testing learner’s program correctness and techniques for his style of programming estimation are proposed. 

Ключевые слова

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

E-Learning on programming, task complication, program estimation, program testing, style of programming estimation.

 

Введение

Многолетний опыт преподавания программирования, а также  подготовки студентов и школьников  к соревнованиям по программированию [1, 11  - 17] побудили авторов заняться разработкой электронной системы обучения этой дисциплине  [2 – 5, 8, 17 - 19]. В данной статье мы рассмотрим вопросы контроля знаний в такой системе.

Электронное обучение в настоящее время можно считать новой образовательной парадигмой, а не только новым инструментом в образовательном процессе. Электронное обучение позволяет интегрировать образовательные системы в виртуальных учебных заведениях и получать доступ к образовательным ресурсам в любое удобное время и с любого удобного места.  Важным достоинством электронного обучения является индивидуализация обучения и активизация самостоятельной работы учеников [10].

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

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

Оценка знаний и умений

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

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

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

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

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

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

Методы оценки подготовки программиста

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

При подготовке индивидуальных заданий возникает необходимость оценки характера и сложности заданий  и разрабатываемых учениками программ. Задания ученику формируются из типовых заданий путем изменения количества и сложности ограничивающих условий, добавлением дополнительных условий, выбором стандартных или оригинальных условий, изменением диапазона обрабатываемых значений и т.п. [2 – 5, 17].

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

Существуют несколько методик оценки сложности заданий. Например, в своём знаменитом труде по информатике Д. Кнут [7] использует следующую «логарифмическую» шкалу рейтинга сложности задач:  00 - чрезвычайно простое упражнение, которое почти всегда можно решить «в уме»; 10 - простая задача без особых трудностей, для решения – не больше минуты, могут понадобиться карандаш и бумага; 20 – средняя задача на проверку основных положений изученного материала, для исчерпывающего ответа – 15 -20 минут; 30 – задача умеренной сложности, может потребовать более двух часов; 40 – сложная или трудоемкая задача для семинарских занятий. Предполагается, что ученик должен справиться с ней, и решение будет нетривиальным; 50 – не решенная научная проблема, за которую брались многие, когда будет решена, получит рейтинг 45.

Промежуточный рейтинг получается интерполяцией, например, 17 – немного проще задачи средней сложности. Остаток от деления рейтинга на 5 показывает объем рутинной работы для решения задачи. Для рейтинга 25 может понадобиться меньше работы, чем для рейтинга 24, но необходим более творческий подход. Буква  M  перед рейтингом – задача требует больше математики, чем обычно;  HM – необходимо знание высшей математики (это совсем не означает, что упражнение трудное). Дополнительная пометка означает рекомендуемое для решения особо поучительное упражнение. Каждый должен хотя бы попытаться решить все задачи с рейтингом не более 10.

На всероссийских олимпиадах школьников по информатике использовались разные подходы к оценке сложности задач и распределению общего числа баллов задачи на слагаемые для оценки прохождения программой каждого теста и их группы [6]. В последние годы отдельно оценивается  алгоритмическая сложность и техническая сложность, каждая из них может быть низкой, средней и высокой.

В самой известной в мире тестирующей системе университета испанского г. Валадолид [9], содержащей несколько тысяч разделенных по темам  задач, которые решают зарегистрированные в ней десятки тысяч желающих со всех континентов,  приняты на проверку уже миллионы попыток решения задач. Используются три показателя сложности каждой задачи: популярность (А, B или C) показывает, сколько человек пытались ее решить,  частота успеха (низкая, средняя, высокая) – сколько из них решили, уровень (от 1 до 4) - необходимые для решения знания, от  новичка до старшекурсника.

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

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

Автоматизированная система обучения программированию

Электронное обучение внедряется авторами в учебный процесс с 2007 года на кафедре АСОИУ КНИТУ-КАИ им. А.Н.Туполева. Базовым языком обучения выбран С/С++ - общее подмножество языков программирования высокого уровня С и С++.

Теоретический материал структурирован в виде гипертекстового документа. В электронном учебнике представлен материал, необходимый для изучения основных алгоритмических конструкций,  основных возможностей базового языка, примеры решения типовых задач, задания для самостоятельной работы (рис. 1 - 4).

Рис. 1. Электронный учебник по программированию. Фрагмент теоретического материала.

Рис. 2. Электронный учебник по программированию. Фрагмент примера разработки алгоритма программы.

Рис. 3. Электронный учебник по программированию. Фрагмент примера тестирования алгоритма программы.

Рис. 4. Электронный учебник по программированию. Фрагмент теоретического материала.

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

Разработаны тесты по следующим темам:

- основные понятия, операторы языка С, простые циклы и ветвления;

- массивы, подпрограммы;

- структуры хранения и абстрактные структуры данных.

Учитель имеет удобные средства для создания нового теста, добавления и корректировки заданий (рис. 5 - 6).

 

Рис. 5. Тестирующая система. Подготовка или корректировка тестовых заданий по основным понятиям программирования.

Рис. 6. Тестирующая система. Подготовка или корректировка тестовых заданий по обработке массивов.

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

 

Рис. 7. Тестирующая система. Тестовые задания по использованию простых циклов.

Тестирующая система позволяет готовить тесты по различным курсам, например, данная система используется для контроля знаний по дисциплине «Операционные системы», по языку ассемблера и др. (рис. 8).

 

Рис. 8. Тестирующая система. Тестовые задания по  программированию на языке ассемблера.

Материал для тестирования, информация об учениках и результаты тестирования хранятся на сервере.  Учитель имеет возможность добавления новой группы или нового ученика (рис. 9). На сервере отображается процесс тестирования группы учеников (рис. 10).

 

Рис. 9. Тестирующая система. Просмотр или корректировка данных об учениках.

 

 

Рис. 10. Тестирующая система. Мониторинг процесса тестирования.

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

 

Рис. 11. Тестирующая система. Просмотр итогов тестирования ученика.

Учитель может получить отчет по каждому пройденному учеником тесту, просмотреть его ошибки. Правильные ответы выделены зеленым цветом, а ошибочные - красным (рис. 12).

 

Рис. 12. Тестирующая система. Просмотр отчета по результатам тестирования ученика.

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

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

Для некоторых типовых задач задания генерируются автоматически, например, для задач обработки одномерных и двумерных массивов. Программа решения  каждого типа таких задач представляется в виде шаблона (фрейма). По этому шаблону программа обучающей системы, написанная на языке С, генерирует текст  задачи, программу решения задачи, набор тестов для проверки программы ученика и программу, проверяющую правильность результата программы ученика. Результаты работы программы ученика сравниваются с ожидаемыми правильными результатами с помощью специальной программы. Используются разные названия  подобных программ: сравниватель, checker (чекер), comparator (компаратор) и т.п. В данной системе принято название чекер [2-4, 17].

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

В рассматриваемой системе обучения программированию реализована генерация типовых заданий на обработку массивов. Алгоритм генерации задания и проверки программы ученика следующий:

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

2) Генерация задачи по заданным требованиям и формирование текста задачи.

3) Формирование решения задачи в виде исходного кода и компиляция сгенерированного решения.

4) Генерация тестов для задачи.

5) Получение эталонных результатов, на основе программы и тестов, полученных на шагах 3 и 4, соответственно.

6) Определение ограничения на время ожидания ответа ученика и передача текста задачи ученику.

7) Ожидание и получение ответа ученика в виде текста программы.

8) Компиляция программы ученика.

9) Выполнение программы ученика на тестах, полученных на шаге 4.

10) Сравнение эталонных результатов и результатов программы ученика.

11) Передача результатов сравнения ученику и сохранение в истории обучения.

Если задание выбирается из базы готовых заданий, то программа решения задачи, тесты и эталонные ответы также готовятся заранее и хранятся в базе данных системы. При автоматической генерации заданий пункты 3-5 могут выполняться параллельно с пунктом 7, т.е. во время ожидания ответа ученика.

Генерация типового задания по обработке массива, передача задания ученику и отправка решения на проверку представлены на рис. 13 - 15.

Рис.13. Окно для настройки параметров генерации задания, решения и тестов.

При нажатии кнопки «Начать тестирование» генерируется и выдается задание ученику, устанавливается  ограничение на время ожидания ответа ученика. За указанное время  ученику необходимо составить программу решения задачи, ввести программу в окно ответа и отправить на проверку. В это же время система генерирует свое решение и тесты для проверки задачи.

 

Рис.14. Окно с полученным заданием

Рис.15. Окно с ответом ученика

После нажатия кнопки «Отправить» система получает текст программы ученика и выполняет проверку программы. Проверка программы заключается в оценке корректности ее работы, а также в оценке стиля программирования.

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

Первоначально проверяется  соблюдение программой заданных в задаче ограничений на время выполнения и объем используемой оперативной памяти. Если программа превысила ограничения, то ее работа  прерывается, тест не засчитывается и выдается сообщение, например, сообщение о превышении ограничения на время - «Ошибка времени исполнения». При соблюдении ограничений результат работы программы сохраняется в выходном файле и запускается чекер этой задачи. Чекеру передаются имена входного и выходного файлов программы ученика и  ожидаемый эталонный ответ для каждого теста.  Чекер проверяет наличие выходного файла с результатом программы ученика и правильность записанного в файле  результата. Правильный результат сопровождается сообщением «ok» (хорошо), а ошибочный – сообщением «wrong answer». Например, сообщение об ошибке «wrong answer 35 instead of 5» означает, что получен ошибочный ответ: вместо эталонного ответа 35 получен ответ ученика равный 5. В случае отсутствия выходного файла выдается сообщение «wrong output format» (ошибка формата вывода).

 

Результат проверки корректности программы, правильно работающей на всех тестах, представлен на рис. 16. 

Рис. 16. Результат тестирования программы, которая на всех тестах выполняется правильно.

Результат проверки программы, работающей неправильно на большинстве входных данных, представлен на рис. 17.

 

Рис. 17. Результат тестирования программы, которая выполняется неправильно.

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

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

Во многих задачах результат программы неоднозначен. Но для некоторых таких задач возможно использование типовых чекеров, например, когда программа выводит множество целых чисел в произвольном порядке. В этом случае чекер сравнивает множество чисел в эталонном ответе с множеством чисел в ответе ученика, используя, например, характеристический вектор для представления множества целых чисел. В то же время для задач с неоднозначным результатом чаще требуется особый чекер, проверяющий соответствие результата программы ученика условиям задачи. Трудоемкость разработки подобного чекера соразмерна, а иногда и выше  разработки программы решения задачи [2].

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

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

Для оценки стиля программирования использован метод М. Дж. Риса [20], усовершенствованный и реализованный в системе обучения программированию для языков С, C++ и Java [18].

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

Для оценки качества программ использованы также  методы, основанные на метрической теории программ  М. Холстеда  [21].  Метрическая теория позволяет вычислять теоретическую длину программы, в зависимости от количества разных операндов и операций в программе.

В основу теории положено уравнение длины программы

Lt = n1·log2 n1 + n2·log2 n2,

где Lt – теоретическая длина программы (выраженная количеством слов – лексем), n1 – количество разных операндов в программе, n2 – количество разных операций в программе.

Отличие фактической длины программы Lf от ее теоретического значения Lt является показателем наличия некоторых «несовершенств» в программе, например, наличие лишних переменных или неэффективных операций или операторов, и может  служить критерием ее качества. Длина корректно составленной программы не должна отклоняться от теоретической длины программы более чем на 10-15%, но на практике эти величины существенно различаются.

 Для дополнительной оценки качества учебных программ предлагается оценка цикломатической меры  сложности программы по метрике Мак-Кейба. Сложность программы определяется по количеству ветвлений, циклов и их вложенности и представляется в виде сильносвязанного ориентированного графа (сильносвязанным называется орграф, любые две вершины которого взаимодостижимы).

Для вычисления цикломатического числа Z(G)  по метрике Мак-Кейба применяется формула

Z(G)=EV + 2*P,

где E - число дуг ориентированного графа G, V - число вершин, P - число компонентов связности графа.

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

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

Итоговая оценка программы вычисляется в виде взвешенной суммы оценок по метрике Холстеда, цикломатической меры сложности программы по метрике Мак-Кейба с учетом уровня ее комментированности, соблюдения ступенчатой формы записи вложенных конструкций программы и других характеристик стиля программирования. Разработанная система не только оценивает программу ученика, но и выдает ему некоторые рекомендации по ее улучшению [2, 4, 18, 19].

На рис. 18-19 представлены результаты оценки качества программы по стилю программирования и некоторым другим метрикам качества. Полученные оценки характеризуют программу по метрике Мак-Кейба как простую в тестировании, но имеющую некоторые «несовершенства» по метрике Холстеда. По стилю программирования оценка низкая из-за отсутствия комментариев.

 

Рис. 18. Выбор и отправка программы на оценку качества программирования.

Рис.19. Результаты оценки качества программирования.

Результаты традиционного тестирования, корректность  программы и  стиль программирования оцениваются по разным шкалам. За правильно выполненный тест из 40-50 вопросов дается 10 баллов. Корректность программы оценивается по 100-бальной шкале и имеет наибольший вес  в общей оценке ученика. Стиль программы оценивается по шкале от 0 до 1 и входит в общую оценку с весом 50. По каждой теме ученик выполняет в среднем от 5 до 10 заданий на составление программ.

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

Заключение

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

Литература

1. Бикмурзина А.Р., Захарова З.Х., Хохлов  Д.Г. Программирование и структуры данных: Учебное пособие. - Казань: Изд-во Казан. техн. ун-та, 2008. -147 с. (Инновационная программа КГТУ-КАИ 2007 - 2008 г.).

2. Бикмурзина А.Р., Захарова З.Х., Захаров А.Н., Хохлов Д.Г.  Электронный экзамен по программированию  // Инфокоммуникационные технологии глобального информационного общества: Сборник трудов 7-й ежегодной международной научно-практической конференции. Казань,  10-11 сентября 2009 г. Казань: ООО «Центр Оперативной  Печати», 2009. - 528 с.  С. 284 - 289.

3. Захарова З.Х., Хохлов Д.Г. Оценка программ в системе автоматизированного обучения программированию // Исследования по информатике. Вып. 10. – Казань: Отечество, 2006.  С. 159 - 162. 

4. Захарова З.Х., Захаров А.Н.., Хохлов Д.Г.  Методы и алгоритмы оценки учебных программ // Инфокоммуникационные технологии глобального информационного общетва: Тезисы докладов 6-й ежегодной международной научно-практической конференции. Казань, 4-5 сентября 2008 г. Казань: ООО «Центр Оперативной  Печати», 2008. - 348 с.  С. 247 - 250.

5. Захарова З.Х. Оценка учебных задач и их решений в системе электронного обучения программированию // Проблемы техники и технологий телекоммуникаций ПТиТТ-2011: Материалы XII Международной научно-технической конференции. Оптические технологии в телекоммуникациях ОТТ-2011: Материалы IX Международной научно-технической конференции, Казань, 21 - 24 ноября 2011 года. Казань: Изд-во Казан. гос. техн. ун-та, 2011. -560 с.  С. 521 - 522.

6. Кирюхин В.М. Информатика: всероссийские олимпиады. Выпуск 1 / В.М. Кирюхин – М.: Просвещение, 2008. – 220 с.

7. Кнут Д.Э.  Искусство программирования, том 1. Основные алгоритмы, 3-е изд. - М.: ООО «И.Д. Вильямс», 2000. - 720 с.

8. Подавалов А.А. Архитектура и организация  электронной системы обучения программированию // Проблемы техники и технологий телекоммуникаций ПТиТТ-2011: Материалы XII Международной научно-технической конференции. Оптические технологии в телекоммуникациях ОТТ-2011: Материалы IX Международной научно-технической конференции, Казань, 21 - 24 ноября 2011 года. Казань: Изд-во Казан. гос. техн. ун-та, 2011. -560 с. С. 533 - 534.

9. Скиена С.С., Ревилла М.А. Олимпиадные задачи по программированию. Руководство по подготовке к соревнованиям/ Пер. с англ.. – М.: КУДИЦ-ОБРАЗ, 2005. - 416 с.

10. Соловов А.В. Электронное обучение: проблематика, дидактика, технология. - Самара: «Новая техника», 2006. - 462 с.

11. Хохлов Д. Г.  Программирование на языке высокого уровня. Часть 1. Основы программирования:  Учебник. - Казань: Мастер Лайн, 2009. 253 с. Часть 2. Методы программирования: Учебник. - Казань: Мастер Лайн, 2009. - 270 с.

12. Хохлов Д. Г., Захарова З. Х. Практикум по структурам данных и комбинаторным алгоритмам:  Учебное пособие. - Казань: Изд-во Казан. техн. ун-та, 2005. - 48 с.

13. Хохлов Д. Г., Захарова З. Х. Введение в системное программирование: Учебное пособие. - Казань: Изд-во Казан. техн. ун-та, 2005. - 163 с.

14. Хохлов Д. Г., Захарова З. Х. Введение в программирование. Практикум на языке С: Учебное пособие. - Казань: Изд-во Казан. техн. ун-та, 2006. - 96 с.

15. Хохлов Д. Г., Захарова З. Х. Операционные системы:  Учебное пособие. - Казань: Мастер Лайн, 2010. - 155 с.

16. Хохлов Д. Г. ред. Казанский  турнир по программированию / Под ред. Д. Г. Хохлова. – Казань: Изд-во Казан. техн. ун-та, 2010. 
232 с.

17. Хохлов Д. Г. Проблемы и принципы создания системы автоматизированного обучения программированию // Информационные технологии в науке, образовании и производстве: Материалы Всероссийской научной конференции. 30-31 мая 2007 года. Казань: Изд-во Казан. гос. техн. ун-та, 2007. - 796 с.  С. 636 - 639.

18. Хохлов Д.Г., Захаров А.Н.,  Захарова З.Х., Подавалов А.А. Оценка качества студенческих программ при электронном обучении программированию // Вестник КГТУ им. А.Н. Туполева. 2011, № 4.
С. 153 – 156.

19. Хохлов Д. Г., Миннибаев Р. Ф. Интегрированная экспертная система обучения программированию. // Инновационное образование в техническом университете: Международная научно-методическая конференция. Казань: Изд-во Казан. техн. ун-та, 2004. - 644 с. С. 527-530.

20. Rees M.J. Automatic Assessment Aids for Pascal Programs, ACM Sigplan Notices, 1982, 17,  10. С. 33-42.

21. Холстед М. Х. Начала науки о программах /Пер. с англ. В. М. Юфы. – М.: Финансы и статистика, 1981. – 128 с.