2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Как искать ошибки в коде (MATLAB)
Сообщение05.04.2011, 17:39 
Заслуженный участник
Аватара пользователя


11/04/08
2748
Физтех
Например, вот передо мной довольно большая и сложная прога, написанная мной же (я программирую только на Матлабе). Она как-то работает, что-то выдает, ошибок синтаксических нет. Но мало ли что там может внутри происходить: неправильно набранные формулы, обращение к неправильным элементам массивов и т.д.
Вопрос мой такой: а как вы анализируете/проверяете свой сложной код? Может быть есть несколько конкретных рекомендаций, которые позволят относительно быстро найти ошибки в коде, если таковы есть? Может быть есть какие книги, в которых подробно рассматриваются такие вопросы?

 Профиль  
                  
 
 
Сообщение05.04.2011, 18:15 
Заслуженный участник


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

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

 Профиль  
                  
 
 
Сообщение05.04.2011, 18:27 
Заслуженный участник
Аватара пользователя


11/04/08
2748
Физтех
arseniiv в сообщении #431559 писал(а):
А язык MATLAB на какой из «обычных» больше похож?

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

 Профиль  
                  
 
 Re: Как искать ошибки в коде (MATLAB)
Сообщение06.04.2011, 22:21 
Аватара пользователя


17/11/10
11
http://www.mathworks.com/help/techdoc/matlab_prog/f10-60570.html

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

 Профиль  
                  
 
 
Сообщение07.04.2011, 09:34 
Заслуженный участник
Аватара пользователя


11/04/08
2748
Физтех
vJB

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

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


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

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

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

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

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

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group