Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Код спагетти - это уничижительное выражение для неструктурированного и сложного в обслуживании исходного кода . Спагетти - код может быть вызван несколько факторами, такими как летучие проект требований, отсутствие стиль программирования правил и инженеров программного обеспечения с недостаточной способностью или опытом. [1]

Значение [ править ]

Код, в котором чрезмерно используются операторы GOTO, а не структурированные программные конструкции, что приводит к запутанным и неподдерживаемым программам, часто называют спагетти-кодом. [2] Такой код имеет сложную и запутанную структуру управления , что приводит к потоку программы, который концептуально напоминает миску со спагетти , скрученную и запутанную. [3] В публикации 1980 года Национальным бюро стандартов США фраза программа спагетти использовалась для описания старых программ, имеющих «фрагментированные и разрозненные файлы». [4] Спагетти-код также может описывать антипаттерн, в которомобъектно-ориентированный код написан в процедурном стиле, например, путем создания классов, методы которых слишком длинные и беспорядочные, или отказа от объектно-ориентированных концепций, таких как полиморфизм . [5] Наличие этой формы спагетти-кода может значительно снизить понятность системы. [6]

История [ править ]

Неясно, когда фраза «спагетти-код» вошла в обиход; однако в 1977 г. появилось несколько ссылок, в том числе « Макароны лучше, чем спагетти » Стила, опубликованные в Трудах симпозиума 1977 г. по искусственному интеллекту и языкам программирования. В книге 1978 года «Учебник по дисциплинированному программированию с использованием PL / I, PL / CS и PL / CT» Ричард Конвей использовал этот термин для описания типов программ, которые «имеют такую ​​же чистую логическую структуру, как тарелка со спагетти» [7 ] фраза, повторенная в 1979 году в книге «Введение в программирование», которую он написал в соавторстве с Дэвидом Грайсом . [8] В статье 1988 г. «Спиральная модель разработки и улучшения программного обеспечения»., этот термин используется для описания старой практики модели кода и исправлений , которая не имела планирования и в конечном итоге привела к разработке водопадной модели . [9] В книге 1979 года « Структурное программирование для программиста на COBOL» автор Пол Нолл использует фразы « спагетти-код» и « крысиное гнездо» как синонимы для описания плохо структурированного исходного кода. [10]

В Ada - Европа '93 конференции, Ада была описана как заставить программист «продукции понятных, вместо запутанного кода», из - за его ограничительный механизм распространения исключений. [11]

В 1981 году в издании The Michigan Technic подделке компьютерных языков под названием «БАЗОВЫЕ БАЙТЫ… FORTRAN bytes !!» автор описал FORTRAN, заявив, что «он полностью состоит из спагетти-кода». [12]

Ричард Хэмминг описал в своих лекциях [13] этимологию этого термина в контексте раннего программирования в двоичных кодах:

Если при исправлении ошибки вы хотели вставить несколько пропущенных инструкций, вы взяли непосредственно предыдущую инструкцию и заменили ее переносом в какое-то пустое место. Там вы вставляете инструкцию, которую только что написали, добавляете инструкции, которые хотите вставить, а затем переходите обратно в основную программу. Таким образом, программа вскоре превратилась в последовательность переходов элемента управления в странные места. Когда, как это почти всегда бывает, в исправлениях были ошибки, вы снова использовали тот же трюк, используя какое-то другое доступное пространство. В результате путь управления программой через хранилище вскоре стал похож на банку спагетти.Почему бы просто не вставить их в выполнение инструкций? Потому что тогда вам придется просмотреть всю программу и изменить все адреса, относящиеся к любой из перемещенных инструкций! Что угодно, только не это!

Похожие фразы [ править ]

Код равиоли [ править ]

Код равиоли - это термин, специфичный для объектно-ориентированного программирования . Он описывает код, который состоит из хорошо структурированных классов , которые легко понять по отдельности, но трудно понять в целом. [14]

Код лазаньи [ править ]

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

Примеры [ править ]

Далее следует то, что можно было бы считать тривиальным примером кода спагетти в BASIC . Программа выводит на экран каждое из чисел от 1 до 100 вместе с квадратом. Отступы не используются для различения различных действий, выполняемых кодом, и для того, чтобы GOTOоператоры программы полагались на номера строк . Труднее предсказать поток выполнения из одной области в другую. Реальные случаи появления спагетти-кода более сложны и могут значительно увеличить затраты на обслуживание программы.

1 i = 0 2 i = i + 1 3 PRINT i ; "в квадрате =" ; i * i 4 IF i > = 100 THEN GOTO 6 5 GOTO 2 6 PRINT «Программа завершена». 7 КОНЕЦ               

Вот тот же код, написанный в стиле структурированного программирования :

1 ДЛЯ i = 1 ДО 100 2 ПЕЧАТЬ i ; "в квадрате =" ; i * i 3 ДАЛЕЕ i 4 ПЕЧАТЬ «Программа завершена». 5 КОНЕЦ           

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

Вот еще один пример кода спагетти со встроенными операторами GOTO.

 INPUT «Сколько чисел отсортировать?» ; T DIM n ( T ) FOR i = 1 TO T PRINT "NUMBER:" ; i INPUT n ( i ) NEXT i 'Вычисления: C = T E180: C = INT ( C / 2 ) IF C = 0 ТО НАХОДИТСЯ C330 D = T - C E = 1 I220:                                            е = Е F230: г = е + C IF п ( е ) > п ( г ) ТОГДА SWAP - н ( е ), п ( г ) ф = F - C IF F > 0 THEN GOTO F230 Е = Е + 1 IF E > D THEN GOTO E180 GOTO i220 C330: PRINT                                             "Отсортированный список:" FOR i = 1 TO T PRINT n ( i ) NEXT i          

См. Также [ править ]

  • Большой комок грязи , программа без видимой архитектуры
  • International Obfuscated C Code Contest , соревнование по созданию приятно непонятного C-кода
  • Язык только для записи , язык с таким причудливым синтаксисом, что результирующий код непонятен
  • Технический долг

Ссылки [ править ]

  1. ^ Markus, Pizka (2004). "Выпрямление спагетти-кода с помощью рефакторинга?" (PDF) . Исследования и практика программной инженерии : 846–852 . Проверено 5 марта 2018 .
  2. Cram, Дэвид; Хедли, Пол (2005). «Местоимения и процедурное значение: актуальность спагетти-кода и параноидального заблуждения» (PDF) . Рабочие документы Оксфордского университета по лингвистике, филологии и фонетике . 10 : 187–210 . Проверено 5 марта 2018 .
  3. ^ Хорстман, Кэй (2008). «Глава 6 - Итерация» . Концепции Java для AP Computer Science (5-е изд. [То есть 2-е изд.]. Изд.). Хобокен, Нью-Джерси: J. Wiley & Sons. С. 235–236. ISBN 978-0-470-18160-7. Проверено 2 января 2017 года .
  4. ^ Национальное бюро стандартов США (1980). Специальная техническая публикация ASTM . Типография правительства США.
  5. ^ Moha, N .; Gueheneuc, YG; Duchien, L .; Меур, AF Le (январь 2010 г.). «ДЕКОР: метод определения и обнаружения кодовых и дизайнерских запахов». IEEE Transactions по разработке программного обеспечения . 36 (1): 20–36. CiteSeerX 10.1.1.156.1524 . DOI : 10.1109 / TSE.2009.50 . ISSN 0098-5589 .  
  6. ^ Abbes, M .; Khomh, F .; Gueheneuc, YG; Антониол, Г. (2011). Эмпирическое исследование влияния двух антипаттернов, кода Blob и Spaghetti, на понимание программы . 2011 15-я Европейская конференция по сопровождению и реинжинирингу программного обеспечения . С. 181–190. CiteSeerX 10.1.1.294.1685 . DOI : 10,1109 / CSMR.2011.24 . ISBN  978-1-61284-259-2.
  7. ^ Конвей, Ричард (1978). Учебник по дисциплинированному программированию с использованием PL / I, PL / CS и PL / CT . Издатели Winthrop. ISBN 978-0-87626-712-7.
  8. ^ Конвей, Ричард; Грис, Дэвид (1979). Введение в программирование (3-е изд.). Маленький, Браун. ISBN 978-0-316-15414-7.
  9. Перейти ↑ Boehm, Barry W. (май 1988 г.). «Спиральная модель разработки и улучшения программного обеспечения». Компьютер IEEE . 21 (2): 61–72. DOI : 10,1109 / 2,59 .
  10. ^ Нолл, Пол (1977). Структурированное программирование для программиста на COBOL: дизайн, документация, кодирование, тестирование . М. Мурач и партнеры.
  11. ^ Schwille, Jürgen (1993). «Использование исключений и злоупотребление ими - 12 рекомендаций по правильной обработке исключений». Конспект лекций по информатике . Ада - Европа '93 (Труды). 688 . Springer Berlin Heidelberg. С. 142–152. DOI : 10.1007 / 3-540-56802-6_12 .
  12. ^ MTSBS [ необходимы разъяснения ] (март-апрель 1981). "БАЗОВЫЙ СЛОВА ... байты FORTRAN !!". Техника Мичигана . 99 (4).CS1 maint: несколько имен: список авторов ( ссылка )
  13. ^ Хэмминг, Ричард (1996). Искусство заниматься наукой и разработкой . ISBN 9056995006.
  14. Тройер, О. Де (13 мая 1991 г.). Модель объектно-ориентированных отношений: действительно объектно-ориентированная концептуальная модель . Передовая инженерия информационных систем . Заметки о численной механике жидкости и междисциплинарном проектировании. 141 . С. 561–578. DOI : 10.1007 / 3-540-54059-8_104 . ISBN 978-3-319-98176-5.
  15. ^ Томов, Латчезар; Иванова, Валентина (октябрь 2014 г.). «Обучение передовым методам разработки программного обеспечения с помощью контрпримеров» . Информатика и образование в области компьютерных наук (1): 397–405 . Проверено 5 марта 2018 .

Внешние ссылки [ править ]

  • Перейти к заявлению, которое считается вредным . Классический отказ от спагетти-кода Эдсгером Дейкстрой
  • Мы не знаем, куда ПЕРЕЙТИ, если мы не знаем, откуда мы ПРИБЫЛИ. Автор Р. Лоуренс Кларк из DATAMATION, декабрь 1973 г.
  • Рефакторинг спагетти-кода Java в код Java-бенто, разделив чашу, полную кода, из одного класса на семь классов
  • Объекты и рамки - Шаг назад Брайан Ринальди
  • Программирование пасты - код спагетти, лазаньи, равиоли и макарон
  • Паста Теория программирования
  • Код спагетти: распутывание жизни и работы с мудростью программиста (английское издание)