Лекция №15.2: Технология программирования и отладки

страницы: 1 2 3

Содержание

Кусочки, куски и кусищи...

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

Совет 7. Не нуждается в особой пропаганде главное правило: на каждой строке должен находиться только один оператор. А сложные операторы лучше и вовсе размещать на нескольких последовательных строках. Тогда при пошаговой прогонке легче будет локализовать искомую ошибку.

Совет 8. Не нужно полагать, что если вы являетесь автором программы, то никаких трудностей её чтение во время отладки у вас не вызовет. Невозможно выучить непрерывно изменяемую программу настолько, чтобы ориентироваться в ней «с закрытыми глазами», поэтому не скупитесь на краткие, но дельные комментарии. Следите, чтобы они верно отражали происходящее: если, прочитав комментарий, вы будете думать, что поясняемый им блок программы «делает шаг на север», в то время как на самом деле производится «шаг на юг», то понять причину ошибки вы вряд ли сможете.

Совет 9. Пишите программы «лесенкой», позволяющей легко видеть, где кончается один блок и начинается другой. Разные блоки должны иметь различные отступы, а все операторы одного блока — одинаковые; причём чем глубже уровень вложенности блока, тем дальше отстоит он от левого края экрана. Совсем без отступа можно записывать только разделы описаний головной программы, слова begin ... end., ограничивающие основное тело программы, а также заголовки процедур и функций. Все остальные операторы, даже строки–комментарии, должны иметь отступ.

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

Совет 10. Большие блоки, отвечающие за крупные шаги алгоритма, отделяйте друг от друга строками–комментариями, облегчающими ориентирование по тексту программы в процессе её отладки.

Совет 11. Операторные скобки begin ... end всегда расставляйте парами, причём каждый end должен начинаться с той же позиции строки, что и открывший его begin, а заключённый между ними операторный блок должен быть сдвинут на две позиции вправо, чтобы скобки не сливались с остальным текстом программы.

Порядок написания любого блока должен быть следующим:

  1. begin
  2. end;
  3. <...> {вложенный блок между begin и end}

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

Если в вашей программе несколько (хуже — много) вложенных или просто очень длинных блоков (для одного или двух коротких это ещё не так актуально), то возле каждого оператора end ставьте комментарий–пометку, какой именно begin он закрывает. Не забывайте, что простое совпадение количества begin–ов и end–ов не может служить гарантией того, что все они расставлены в нужных местах. А если среди нескольких идущих подряд end–ов, закрывающих обычные begin–ы, встречается и end, замыкающий оператор case, то возле него обязательно нужно поставить указание {end_case}, иначе вы можете потратить немало времени на поиски якобы недостающего оператора begin. Дело в том, что когда мозг человека настраивается на поиск какого–либо конкретного слова, то не похожие на него слова он имеет обыкновение пропускать, не обращая на них никакого внимания, а поскольку слово case даже отдалённо не напоминает begin, то при таком поиске–просмотре оно, скорее всего, будет отброшено.

Совет 12. Желательно, чтобы каждый оператор if содержал ветви в операторных скобках, даже если оператор всего один. Это позволит избежать путаницы с принадлежностью else–ветви, а также исключить некоторые ошибки по невнимательности, которые происходят, когда программа не с нуля пишется, а редактируется. Например, можно забыть добавить begin ... end вокруг оператора при добавлении второго оператора в одну из ветвей.

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

if ... then
  if ... then
    ... 
  else
    <один отладочный оператор> 
else
  ...

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

Спасением от такой напасти служат добавочные операторные скобки — нужно только следить, чтобы они не слишком засоряли текст блока:

if ... then
begin
  if ... then
    ... 
  else
    <один отладочный оператор> 
end 
else
  ...

Если теперь мы удалим ту же строку, никакого вреда программе это не нанесёт. Поэтому:

Совет 13. Ненужные с точки зрения алгоритма, однако не нарушающие структуры программы операторные скобки ещё никому не мешали. Как говорится, «кашу маслом не испортишь»!

Совет 14. Никогда не пользуйтесь оператором goto! Язык Pascal предоставляет достаточное количество операторов, позволяющих легко структурировать любую программу. Единственным исключением из этого правила является ситуация нескольких вложенных циклов, описанная в лекции 3. И в любом случае оператор goto не должен передавать управление назад по тексту программы.

Спасение утопающих — дело рук самих утопающих

Дадим ещё один важный

Совет 15. Не полагайтесь на надёжность техники, производите время от времени сохранение написанного. Простое нажатие клавиши F2 может спасти от многих неприятностей в случае «зависания» задачи, не говоря уж о внезапном отключении электроэнергии (конечно, большинство серьёзных организаций сейчас имеют источники бесперебойного питания, позволяющие в экстренных случаях спасти содержимое оперативной памяти, однако особенно рассчитывать на это не стоит). По крайней мере, если вдруг когда–нибудь вы попадёте в такую неприятную ситуацию, не говорите, что вас не предупреждали.

Отладка и тестирование

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

Программа написана, но не работает так, как надо...

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

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

  • во–первых, найти этих делинквентов;
  • во–вторых, призвать их к порядку.

страницы: 1 2 3

Примечания

Код для вставки: :: :: :: ::
Поделиться: // //