2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Как искать ошибки в коде (MATLAB)
Сообщение05.04.2011, 17:39 
Аватара пользователя
Например, вот передо мной довольно большая и сложная прога, написанная мной же (я программирую только на Матлабе). Она как-то работает, что-то выдает, ошибок синтаксических нет. Но мало ли что там может внутри происходить: неправильно набранные формулы, обращение к неправильным элементам массивов и т.д.
Вопрос мой такой: а как вы анализируете/проверяете свой сложной код? Может быть есть несколько конкретных рекомендаций, которые позволят относительно быстро найти ошибки в коде, если таковы есть? Может быть есть какие книги, в которых подробно рассматриваются такие вопросы?

 
 
 
 
Сообщение05.04.2011, 18:15 
Я в Mathematica (5, а сегодня поставил восьмую, но пока ещё не разобрался с новым; вроде, отладчик какой-то появился) когда писал непростые функции, по сути мини-программы, часто выражения оттуда по кусочкам вычислял на примерных данных, которые туда могут попадать. Остальное, наверно, уже различается от среды к среде — функции для трассировки и подобное.

А язык MATLAB на какой из «обычных» больше похож?

 
 
 
 
Сообщение05.04.2011, 18:27 
Аватара пользователя
arseniiv в сообщении #431559 писал(а):
А язык MATLAB на какой из «обычных» больше похож?

Ууу, это я не знаю даже... Я работал только в С, С++ и Матлабе. В первых двух мне не очень удобно прогать, так как требуется кучу тривиальных функций писать, это все отвлекает.
Но не об этом речь.
Ну да, может быть нужно просто разделить всю прогу на кучу мелких и протестировать последние на все возможные значения данных, которые туда могут попасть...

 
 
 
 Re: Как искать ошибки в коде (MATLAB)
Сообщение06.04.2011, 22:21 
Аватара пользователя
http://www.mathworks.com/help/techdoc/matlab_prog/f10-60570.html

http://www.drpaulcarter.com/cs/debug.php

 
 
 
 
Сообщение07.04.2011, 09:34 
Аватара пользователя
vJB

Спасибо, посмотрю! :-)

 
 
 
 
Сообщение07.04.2011, 17:34 
Аватара пользователя
«Стандартные» методы поиска ошибок — это:
  1. Доказательство правильности программы, или, проще и общее — рассуждения о программе;
  2. Отладочная печать;
  3. REPL;
  4. Пошаговая отладка;
  5. Юнит- и прочее тестирование.

Доказывать соответствие программы спецификации — это довольно сложно, обычно слишком сложно. Рассуждения (reasoning) о программе — это проще, потому что нет такой жёсткой цели дать доказательство, и потому, что не надо сначала составлять спецификацию, и общее, потому что вместо доказательства можно получить какой-то набор нетривиальных знаний о работе программы. Имеются ввиду рассуждения глядя на код, вида «вот тут у нас вызывается эта процедура, она изменяет вот эти переменные, а вот это считается по такой формуле». Впрочем, в языках типа фортрана или бейсика (на которые больше всего похож матлаб) рассуждения сильно затруднены.

Отладочная печать — имеется ввиду вставить в разные места инструкции типа printf("X = %0.4f\n", x); и потом анализировать вывод программы.

REPL (read-eval-print loop) — имеется ввиду копирование отдельных строк программы в интерактивную консоль с подстановкой туда каких-нибудь конкретных данных и проверка, что оно работает как задумано.

Про пошаговую отладку, надеюсь, рассказывать не нужно :)

Юнит-тестирование — это упомянутая выше проверка правильности работы каждой функции. Для того, чтобы это имело смысл, программу надо разбивать на много мелких функций (тех самых «юнитов»). Ещё бывает интеграционное тестирование — проверка того, что вся эта куча правильных функций вместе работает правильно. И всякие ещё варианты тестирования :)

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group