Автоматизация контроля стиля учебных программ
Описание программы для автоматизации контроля стиля учебных программ на языке Паскаль. Использование мнемонических идентификаторов, абзацных отступов, комментариев, именованных констант для повышения читабельности программы. Реализация StyleChecker.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | статья |
Язык | русский |
Дата добавления | 26.04.2019 |
Размер файла | 334,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.Allbest.Ru/
Размещено на http://www.Allbest.Ru/
Размещено на http://www.Allbest.Ru/
Пермский государственный университет
Государственный университет «Высшая школа экономики» (Пермский филиал)
Автоматизация контроля стиля учебных программ
Д.А. Васенина
М.А. Плаксин
Россия, Пермь
Аннотация
Описывается программа для автоматизации контроля хорошего стиля учебных программ на языке Паскаль. Программа позволяет автоматизировать часть работы преподавателя по обучению основам программирования.
Ключевые слова: программирование для ЭВ; стиль программирования; автоматизация обучения.
D.A. Vasenina, M.A. Plaksin. Automation of checking style of the beginner's programs
The program for automation of the checking good style of the beginner's programs written in language Pascal is described. The program allows to automate a part of work of the teacher on training to bases of programming.
Key words: computer programming; style of computer programming; automation learning.
Введение
Описанная в данной статье программа StyleChecker является частью комплекса средств по автоматизации труда преподавателя, ведущего начальное обучение программированию. Она предназначена для автоматизации проверки стиля программ начинающих программистов.
Обучение программированию включает в себя ряд аспектов: постановку задачи, содержательное решение задачи, запись программы на выбранном языке программирования, правильное оформление, тестирование, отладку и др. Причем учить всему этому приходится одновременно, в комплексе. В результате внимание рассредоточивается сразу по нескольким направлениям. Это требует значительных усилий как от обучаемого, так и от преподавателя.
В настоящее время проблема обостряется в связи с двумя факторами.
Во-первых, в вузах расширяется число специальностей, при поступлении на которые придется сдавать экзамен по информатике. А поскольку основной формой сдачи вступительных экзаменов является ЕГЭ, соответственно возрастет число выпускников, сдающих ЕГЭ по информатике. Самая сложная (и дорогая по баллам) часть ЕГЭ - часть С. Она включает в себя написание программ. Соответственно школы будут вынуждены уделять больше внимания подготовке к экзамену по информатике вообще и обучению программированию, в частности. То есть количество школьников, которые начнут обучаться азам программирования, в ближайшее время возрастет.
Во-вторых, в вузах в связи Болонским процессом идет сокращение аудиторных часов и увеличение часов на самостоятельную работу студентов.
Для того чтобы уменьшить нагрузку на преподавателя, предлагается автоматизировать его работу. Создание единой программы "автоматического преподавания информатики" представляется слишком сложным. Более перспективным кажется разделение обучения программированию по нескольким направлениям и автоматизация преподавания по каждому из них отдельно.
Данная работа посвящена автоматизации проверки стиля учебных программ.
1. Постановка задачи автоматизации контроля стиля учебных программ
Под стилем понимается определенный набор правил записи текста программы.
Правильное оформление программы способно весьма существенно упростить ее понимание. И наоборот, небрежность в оформлении может сделать даже простую программу совершенно непонятной.
На рис. 1 приведен пример плохо оформленной программы. Содержательного смысла в ней нет, она просто демонстрирует пример плохого стиля.
program a1;
var oo,o0:real;ll,il:string; begin read(oo);o0:=oo+2;
readln(ll;readln(il);if o0>10 then writeln(ll,o0)) else writeln(il,o0);end;
Рис. 1. Пример плохо оформленной программы
В таком нагромождении слов очень сложно понять, что делает программа. Еще сложнее найти в ней ошибку.
Имена переменных не несут никакой смысловой нагрузки, близки по написанию и звучанию. Расположение текста никак не связано со структурой программы, никак не способствует выделению составляющих программу языковых конструкций.
Для сравнения на рис.2 приводится та же программа, но записанная в более читабельном виде.
program test;
const gran = 10; {граница}
var num, {вводимое число}
res: real; {получаемое число}
DiagUslVyp, {диагностические сообщения}
DiagUslNeVyp: string;
begin
writeln('Введите, пожалуйста, исходную величину');
read(num);
res:=num+2;
writeln('Что делать, если условие выполнено?');
readln(DiagUslVyp);
writeln('Что делать, если условие НЕ выполнено?');
readln(DiagUslNep);
if num > gran then
writeln(DiagUslVyp,':',Res)
else writeln(DiagUslNeVyp,':',Res);
end;
Рис. 2. Пример хорошо оформленной программы
В данном случае для повышения читабельности программы используются такие нехитрые приемы, как мнемонические идентификаторы, абзацные отступы, комментарии, именованные константы.
Подразумевается, что StyleChecker "знает" некоторый набор правил оформления программ, способен проверить, соблюдаются ли эти правила при записи конкретной программы, выявить отклонения, место нарушения и указать, в чем именно нарушение состоит.
Поскольку в любых правилах могут быть исключения, сообщения StyleChecker'а рассматриваются не как обязательные требования, а как рекомендации. Однако отступление от этих рекомендаций должно быть обосновано.
Планируется, что студент будет сначала проверять свою программу StyleChecker'ом. И только после его "одобрения" представлять ее на проверку преподавателю.
StyleChecker является аналогом "взрослых" программ для проверки стиля программного текста, таких как Microsoft.StyleCop, FxCop и др. Главные его отличия: ориентация на язык Паскаль и на простые программы студентов, которые только начинают изучать программирование. Профессиональные "проверяльщики" ориентированы, как правило, на C#, встроены в профессиональные системы программирования (типа Visual Studio) и представляются слишком сложными для начинающих.
2. Противоречия при обучении хорошему стилю программирования
Обучение новичков хорошему стилю программирования связано с рядом противоречий.
Главное из них заключается в том, что будущих профессиональных программистов надо учить писать большие программы, но поскольку в момент обучения студенты программировать не умеют, их можно учить только на маленьких программах.
Подразумевается, что большие программы разрабатываются в течение длительного времени. С ними работает большой коллектив программистов. Эти программы долго эксплуатируются и переделываются. Маленькие - учебные - программы разрабатываются одним человеком за короткий срок и сразу выбрасываются.
Многие требования, естественные для больших программ, для маленьких программ кажутся (а иногда и действительно являются) ненужными. Но, несмотря на это, указанные требования приходится соблюдать.
Особенность разработки учебных программ состоит в том, что результатом студенческого труда являются вовсе не написанные программы, а те знания, умения и навыки, полученные студентами в процессе разработки этих учебных программ.
Противоречие, которое возникает при работе над любой программой (как учебной, так и производственной), заключается в удобстве двух противоположных действий: записи и чтения. При написании программы желательно, чтобы запись была более короткой. А при чтении ее - чтобы текст был более расшифрованным. Поскольку пишут программу один раз, а читают - много, это противоречие имеет смысл разрешить в пользу чтения. Лучше один раз потратить усилия на написание, чем много раз тратить их на чтение неразборчивого текста.
Заметим, что для большой программы выбор в пользу удобства чтения представляется вполне естественным. Для маленькой учебной программы такой выбор, вообще говоря, "навязывается извне".
контроль стиль учебный программа паскаль
3. Правила оформления программ
Хорошим стилем программирования считается соблюдение следующего набора правил.
Общие требования
1. Программа должна быть оформлена в одном стиле: если в каких-то правилах допускается вариативность, то для конкретной программы должен быть выбран какой-то один вариант, и именно он должен применяться во всех случаях.
2. Строки программы должны быть видны целиком (не должны уходить за правый край экрана). Более точно, длина строки не должна превышать N символов, где значение N настраивается.
3. Для выделения вложенных конструкций следует использовать абзацные отступы. Это относится как к операторам, так и к описаниям.
4. Абзацный отступ может варьироваться от 2 до 5 позиций. Отступ меньше 2 позиций не обеспечивает удобства чтения. Отступ больше 5 позиций приводит к тому, что текст программы быстро смещается вправо и уходит за край экрана.
5. Размер отступа настраивается, но все абзацные отступы в программе должны быть одинаковыми.
Идентификаторы
6. Имя должно содержать не менее 3 символов: tek, max, sum, LenLine.
7. Имя не должно совпадать по написанию или звучанию с другими именами (Ol и OI, max и maks, fon и phone) и служебными словами (than, functions).
8. Следует избегать комбинации трудноразличимых символов o/0 (буква "о" и нуль), 1/I/l (единица, латинские буквы "и" и "л"): a01 - ao1, I1 - l1.
Комментарии
9. Строки с комментариями должны составлять не менее трети строк программы.
Операторы
10. В одной строке записывается только один оператор.
11. Соответствующие друг другу операторные скобки begin и end должны располагаться на одном экране. Более точно, требуется, чтобы между begin и end было не более N строк, где N - настраиваемый параметр.
Это требование связано с тем, что восприятие алгоритма очень существенно зависит от того, можно ли охватить его одним взглядом или требуется листание страниц. Если сравнить время на разработку двух процедур, таких что алгоритм первой целиком помещается на экране, а алгоритм второй превышает размер экрана на несколько строк, то окажется, что время, требуемое на вторую процедуру, в разы превышает время, требуемое на первую. Необходимость листания резко усложняет восприятие и замедляет работу. Поэтому надо стремиться к тому, чтобы операторная часть процедуры целиком размещалась на экране. Эта идея может потребовать некоторого смягчения других требований, прежде всего требования размещать в каждой строке только один оператор.
12. Служебное слово end должно быть выровнено по соответствующей объемлющей конструкции.
В операторе ветвления слово end выравнивать по слову case. Варианты записывать с отступом с одного и того же уровня:
case color of
red: S1;
green, blue: S2;
else S3
end
Для условных операторов операторные скобки располагать так:
if C1 then begin
s1;
s2
end
else begin
s3;
s4
end {if С1}
Для цикла с предусловием операторные скобки располагать так:
while a > b do begin
s1;
s2
end; {while a > b }
Для цикла со счетчиком операторные скобки располагать так:
for k:= m to n do begin
S1;
S2
end; {for k}
Такое расположение end'а связано с неудачным синтаксисом языка Паскаль. В Паскале существуют позиции, в которых может стоять только один оператор. Именно поэтому необходим составной оператор. Эти конструкции и потребность в составном операторе Паскаль унаследовал в 1968 г. от Алгола-60. В современных языках составной оператор стал не нужен, поскольку синтаксис позволяет в любом месте, где может стоять один оператор, поставить их несколько. Заметим, что по этому пути пошел и автор Паскаля Н. Вирт в своем следующем языке - Модула-2.
Формально end закрывает составной оператор, начинающийся begin'ом. Но фактически открывающей скобкой является не begin, а начальная лексема объемлющего оператора: if, while, for. Именно по ней и предлагается выравнивать end.
Дозволяется размещать begin не в строке с заголовком объемлющего оператора, а на следующей строке:
if C1 then
begin
s1;
s2
end
else
begin
s3;
s4
end {if С1}
while a > b do
begin
s1;
s2;
end; {while a > b }
for k:= m to n do
begin
S1;
S2
end; {for k}
Однако, учитывая требование размещать begin и end на одном экране, трата на begin целой строки представляется слишком расточительной.
13. Не должно быть лишних (идущих подряд) символов "точка с запятой".
14. Не должно быть лишних переносов внутри конструкций (например, внутри заголовков процедур или циклов for).
Вообще говоря, список требований и рекомендаций, выдаваемых студентам, более обширен. Однако не все эти требования удается проверить автоматически. Например, от студентов требуется использовать каждую переменную только для одной цели, описывать ее как можно ближе к тому месту, где она нужна, и уничтожать как можно скорее после того, как она перестала быть нужной.
Соблюдение этих требований существенно упрощает отладку и модификацию программы. Но проверить их выполнение автоматически не представляется возможным.
4. Реализация StyleChecker
StyleChecker разработан в Windows XP, реализован в виде отдельного приложения, не требует специальной установки, но во время работы записывает информацию на диск (т.е. должен иметь право записи файлов).
StyleChecker обладает интуитивно ясным интерфейсом, выполненным в традиционном "майкрософтовском" духе.
Пример работы StyleChecker'а приведен на рис. 3.
Рис. 3. Пример работы StyleChecker'а
После запуска StyleChecker'а пользователь может загрузить в него текстовый файл с программой и выполнить проверку. Места стилевых ошибок отмечаются в тексте программы. Рядом с номером строки выдается количество ошибок в этой строке. Диагностика выдается в отдельном окне. Продвижение по окнам с текстом программы и с диагностикой синхронизированы в обе стороны: при движении по тексту выделяется сообщение об ошибке, относящееся к текущей позиции текста; при движении по сообщениям текст позиционируется на место, соответствующее текущему сообщению.
В случае многократного повторения одной и той же ошибки после N сообщений диагностика укорачивается (параметр N настраивается). Считается, что, встретив в первый раз сообщение об ошибке, студент разберется в ее причине. И в дальнейшем ему уже не понадобятся подробные разъяснения, а будет достаточно простого напоминания.
В качестве ограничений реализации следует указать, что StyleChecker рассчитан на начинающих программистов, которые не используют наиболее "продвинутые" возможности современных расширений Паскаля. Поэтому он не работает с классами, модулями, событиями и пр. Создатели StyleChecker исходили из тех соображений, что проверять правильность оформления имеет смысл только для синтаксически правильных программ. (Исправление синтаксических ошибок потребует изменения текста программы). Поэтому, встретив в программе синтаксическую ошибку, StyleChecker прекращает проверку и ограничивается тем, что отмечает ошибочную часть программы.
В настоящее время StyleChecker внедряется в учебный процесс Пермского госуниверситета и Пермского филиала ВШЭ. Система предлагается всем желающим для бета-тестирования.
Размещено на allbest.ru
...Подобные документы
Схема разбора арифметического и логического выражения. Внешняя спецификация конвертора и алгоритм перевода программ на языке Паскаль в текст на языке Си. Назначение подпрограмм, особенности констант и переменных. Код программы и ее тестирование.
курсовая работа [567,5 K], добавлен 03.07.2011Создание приложения, исполняющего трансляцию программы из языка Паскаль в язык Си: разработка алгоритма реализации задачи, описание необходимых констант, переменных, функций и операторов, представление листинга программы и распечатка результатов.
курсовая работа [305,9 K], добавлен 03.07.2011Выбор метода проектирования транслятора с языка Паскаль на язык Си, разработка и кодирование алгоритма программы. Использование допустимых операторов в исходном тексте, определение типов переменных и синтаксиса логических и арифметических выражений.
курсовая работа [1,0 M], добавлен 03.07.2011Сравнительный анализ языков программирования высокого уровня Си и Паскаль. Реализация алгоритма обработки данных. Тестирование и отладка программы или пакета программ. Структура программы на языке Турбо Паскаль. Указатели и векторные типы данных.
курсовая работа [233,5 K], добавлен 14.12.2012Создание программы для перевода кодов с языка Pascal на язык Си. Обработка программ операторами case, assign, rewrite и write. Способы объявления файла, комментария, переменных, логических и арифметических выражений. Виды синтаксических анализаторов.
курсовая работа [461,0 K], добавлен 03.07.2011Автоматизация промежуточного и финального контроля результатов обучения учащихся различных учебных заведений. Тестирование, основанное на диалоге вычислительной системы с пользователем. Реализация приложения генерации тестов из базы данных на языке РНР.
курсовая работа [234,1 K], добавлен 04.08.2009Программный комплекс для разработки программы транслирующей программу с языка Pascal на язык С++. Построение логической и арифметической модели решения. Разработка компилятора для программы. Методы отладки программы и создание для нее документации.
курсовая работа [742,6 K], добавлен 03.07.2011Программирование на языке Паскаль: алфавит, решение задач, простейшие программы, разветвляющие программы, циклические программы, ввод-вывод, массивы, подпрограммы, строковые данные, записи, файлы, использование библиотеки CRT, графика в Паскале.
учебное пособие [211,1 K], добавлен 30.03.2008Назначение программ офисной автоматизации. Преимущества ERP-систем, критерии их выбора. Характеристики ряда программ: "БЭСТ-5" - информационной системы управления предприятием, описание 1С:Предприятие 8.1, Microsoft Dynamics AX, Галактика Business Suite.
курсовая работа [907,2 K], добавлен 19.12.2011Создание транслятора, обрабатывающего код программы на языке Паскаль и за счет эквивалентных операторов генерирующего программу на Си. Особенности внешней спецификации и работы лексического анализатора. Структура программы, вывод результатов на экран.
курсовая работа [254,0 K], добавлен 02.07.2011Последовательность работ при разработке объектно-ориентированных программ. Виды синтаксических анализаторов и способы их применения. Описание алгоритма и анализ результативности работы программы, написанной на языке С, ее константы, переменные и функции.
курсовая работа [441,7 K], добавлен 03.07.2011Программный комплекс автоматизации телефонных соединений. Разработка графического интерфейса пользователя, технологической инструкции для пользователя программы, контроля и аттестации программ. Расчет затрат при автоматизации телефонных соединений.
дипломная работа [4,7 M], добавлен 15.10.2013Изучение основных конструкций и способов написания программ на языке Паскаль. Обзор принципов работы и интерфейса написанной программы. Обработка и модификация двумерных массивов. Файловые структуры данных. Текстовые файлы. Элементы машинной графики.
курсовая работа [761,7 K], добавлен 11.03.2015Сущность понятия "комбинаторика". Программа формирования перестановок, сочетаний, размещений с выводом результатов на экран дисплея. Алгоритм программы, написанной на языке Паскаль. Список идентификаторов переменных программы. Список процедур программы.
лабораторная работа [19,8 K], добавлен 27.07.2010Средства интегрированной среды Microsoft Visual Studio, предоставляемые программисту для реализации программ на языке С++. Особенности стиля написания программ. Типовые приемы и методы создания и отладки программ. Листинги программ и их тестирование.
лабораторная работа [814,3 K], добавлен 26.05.2013База данных как основа автоматизации. Разработка, описание и реализация программного обеспечения "Точность и правильность методов и результатов измерений для центральной заводской лаборатории ОАО "Акрилат". Листинг, исходные коды программы и базы данных.
дипломная работа [1,0 M], добавлен 23.06.2012Принципы организационно-методического обеспечения образовательного процесса многоуровневого комплекса; согласованность учебных планов и программ. Диверсификационная схема реализации преемственных учебных программ на примере информационной системы ЮРГУЭС.
реферат [651,4 K], добавлен 20.03.2011Система гиперболических дифференциальных уравнений в частных производных. Таблица идентификаторов для программы. Реализация программы на языке С++. Исходный код программы для вывода в среде MATLAB. Тестовые примеры для программы, реализующей явную схему.
курсовая работа [1,2 M], добавлен 19.03.2012Анализ существующих систем автоматизации документооборота. Выбор шаблона проектирования. Microsoft SQL Server как комплексная высокопроизводительная платформа баз данных. Язык программирования C#. Разработка интерфейса и иллюстрация работы системы.
дипломная работа [2,5 M], добавлен 19.07.2014Анализ автоматизируемых при разработке учебных планов с нормативными документами. Определение целевого сегмента пользователей. Разработка структуры базы данных и отчетных документов. Дизайн интерфейса. Процесс подготовки образовательных программ.
дипломная работа [1,5 M], добавлен 19.01.2017