Код спагетти - Spaghetti code
Код спагетти - это уничижительное выражение для неструктурированного и сложного в обслуживании исходного кода . Спагетти - код может быть вызван несколько факторами, такими как летучие проект требований, отсутствие стиль программирования правил и инженеров программного обеспечения с недостаточной способностью или опытом.
Имея в виду
Код, в котором чрезмерно используются операторы GOTO, а не структурированные программные конструкции, что приводит к запутанным и неподдерживаемым программам, часто называют спагетти-кодом. Такой код имеет сложную и запутанную структуру управления , в результате чего поток программы концептуально напоминает миску со спагетти , скрученную и запутанную. В публикации Национального бюро стандартов США в 1980 г. фраза « программа спагетти» использовалась для описания более старых программ, имеющих «фрагментированные и разрозненные файлы». Спагетти-код также может описывать антипаттерн, в котором объектно-ориентированный код написан в процедурном стиле, например, путем создания классов, методы которых слишком длинные и беспорядочные, или отказа от объектно-ориентированных концепций, таких как полиморфизм . Наличие этой формы спагетти-кода может значительно снизить понятность системы.
История
Неясно, когда фраза «спагетти-код» вошла в обиход; однако в 1977 г. появилось несколько упоминаний, в том числе « Макароны лучше, чем спагетти » Гая Стила. В книге 1978 года «Учебник по дисциплинированному программированию с использованием PL / I, PL / CS и PL / CT» Ричард Конвей использовал этот термин для описания типов программ, которые «имеют такую же чистую логическую структуру, как тарелка со спагетти». повторяется в 1979 году в книге «Введение в программирование», которую он написал в соавторстве с Дэвидом Грайсом . В статье 1988 года «Спиральная модель разработки и усовершенствования программного обеспечения» этот термин используется для описания старой практики модели « код и исправления» , которой не хватало планирования и которая в конечном итоге привела к разработке водопадной модели . В книге 1979 года « Структурированное программирование для программиста на COBOL» автор Пол Нолл использует фразы « спагетти-код» и « крысиное гнездо» как синонимы для описания плохо структурированного исходного кода.
В Ada - Европа '93 конференции, Ада была описана как заставить программист «продукции понятных, вместо запутанного кода», из - за его ограничительный механизм распространения исключений.
В 1981 году в издании Michigan Technic подделке компьютерных языков под названием «БАЗОВЫЕ БАЙТЫ ... FORTRAN bytes !!» автор описал FORTRAN, заявив, что «он полностью состоит из спагетти-кода».
Ричард Хэмминг описал в своих лекциях этимологию этого термина в контексте раннего программирования в двоичных кодах:
Если при исправлении ошибки вы хотели вставить несколько пропущенных инструкций, вы взяли непосредственно предыдущую инструкцию и заменили ее переносом в какое-то пустое место. Там вы вставляете инструкцию, которую только что написали, добавляете инструкции, которые хотите вставить, а затем переходите обратно в основную программу. Таким образом, программа вскоре превратилась в последовательность переходов элемента управления в странные места. Когда, как это почти всегда бывает, в исправлениях были ошибки, вы снова использовали тот же трюк, используя какое-то другое доступное пространство. В результате путь управления программой через хранилище вскоре стал похож на банку спагетти. Почему бы просто не вставить их в выполнение инструкций? Потому что тогда вам придется просмотреть всю программу и изменить все адреса, относящиеся к любой из перемещенных инструкций! Что угодно, только не это!
Связанные фразы
Код равиоли
Код равиоли - это термин, специфичный для объектно-ориентированного программирования . Он описывает код, который состоит из хорошо структурированных классов , которые легко понять по отдельности, но трудно понять в целом.
Код лазаньи
Код лазаньи относится к коду, слои которого настолько сложны и взаимосвязаны, что внесение изменений в один слой потребует изменений во всех других слоях.
Примеры
Далее следует то, что можно было бы считать тривиальным примером кода спагетти в BASIC . Программа выводит на экран каждое из чисел от 1 до 100 вместе с квадратом. Отступы не используются для различения различных действий, выполняемых кодом, а GOTO
операторы программы полагаются на номера строк . Труднее предсказать поток выполнения из одной области в другую. Реальные случаи появления спагетти-кода более сложны и могут значительно увеличить затраты на обслуживание программы.
1 i=0;
2 i=i+1;
3 PRINT i; "squared=";i*i;
4 IF i>=100 THEN GOTO 6;
5 GOTO 2;
6 PRINT "Program Completed.";
7 END
Вот тот же код, написанный в стиле структурированного программирования :
1 FOR i=1 TO 100
2 PRINT i;"squared=";i*i
3 NEXT i
4 PRINT "Program Completed."
5 END
Программа переходит из одной области в другую, но этот переход является формальным и более предсказуемым, потому что циклы и функции for обеспечивают управление потоком, тогда как оператор goto поощряет произвольное управление потоком. Хотя этот пример небольшой, реальные программы состоят из многих строк кода и их трудно поддерживать, если они написаны в виде спагетти-кода.
Вот еще один пример кода спагетти со встроенными операторами GOTO.
INPUT "How many numbers should be sorted? "; T
DIM n(T)
FOR i = 1 TO T
PRINT "NUMBER:"; i
INPUT n(i)
NEXT i
'Calculations:
C = T
E180:
C = INT(C / 2)
IF C = 0 THEN GOTO C330
D = T - C
E = 1
I220:
f = E
F230:
g = f + C
IF n(f) > n(g) THEN SWAP n(f), n(g)
f = f - C
IF f > 0 THEN GOTO F230
E = E + 1
IF E > D THEN GOTO E180
GOTO I220
C330:
PRINT "The sorted list is"
FOR i = 1 TO T
PRINT n(i)
NEXT i
Смотрите также
- Большой комок грязи , программа без видимой архитектуры
- International Obfuscated C Code Contest , соревнование по созданию приятно непонятного C-кода
- Язык только для записи , язык с таким причудливым синтаксисом, что результирующий код непонятен
- Технический долг
использованная литература
внешние ссылки
- Перейти к заявлению, которое считается вредным . Классический отказ от спагетти-кода Эдсгером Дейкстрой
- Мы не знаем, куда ПЕРЕЙТИ, если мы не знаем, откуда мы ПРИБЫЛИ. Автор Р. Лоуренс Кларк из DATAMATION, декабрь 1973 г.
- Рефакторинг спагетти-кода Java в код Java-бенто, разделив чашу, полную кода, из одного класса на семь классов
- Объекты и рамки - Шаг назад Брайан Ринальди
- Программирование пасты - код спагетти, лазаньи, равиоли и макарон
- Паста Теория программирования
- Код спагетти: распутывание жизни и работы с мудростью программиста (английское издание)