Как визуализировать структуру проекта в MATLAB? [закрытый]

53
задан Benjamin Oakes 7 January 2014 в 19:00
поделиться

6 ответов

Порт на NumPy.

(Шутка).

Обычно в Matlab некоторые файлы написаны как функции, а некоторые - как скрипты. Сценарии делают такие вещи, как загрузка данных, которые вы хотите обработать, и передача их функциям, и построение графиков.

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

Каждый раз, когда вы выясняете, что делает функция и каковы ее аргументы, напишите комментарий в документе.

Предполагается, что человек, написавший код, был разумным. В противном случае Matlab позволяет легко поместить все в один каталог и сделать так, чтобы все зависело от всего остального в шаткой башне кода, так что вам может потребоваться много рефакторинга.

44
ответ дан 7 November 2019 в 08:42
поделиться

Я согласен с большинством комментариев о том, что Matlab не поддерживает современное программное обеспечение. структурирование исходного кода, но я не считаю, что слишком сложно навязать какую-то свою собственную структуру с небольшой дисциплиной.

Организуйте исходные файлы в иерархию каталогов, как если бы исходные файлы для любой программы, написанной на другом языке программирования. Вам не нужно придерживаться иерархии, при желании выберите свою структуру. Используйте команду setpath (или как там ее еще называют), чтобы сообщить Matlab, где искать ваши m-файлы, когда вы работаете.

Познакомьтесь с инструментом профилировщика Matlab, который может предоставить вам графики вызовов (не очень графически, больше как графики вызовов gprof), которые немного помогают в расшифровке кода спагетти.

Конечно, все наши m-файлы находятся в репозитории, и мы обслуживаем их из него. У нас есть личный набор инструментов на одном из наших сетевых дисков, и все пользователи могут напрямую вызывать «выпущенный» код в этом наборе инструментов.

3
ответ дан 7 November 2019 в 08:42
поделиться

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

Взгляните на функции depfun () и depdir () в Matlab, которые обнаруживают статические зависимости. Это может помочь вам увидеть зависимости между функциями Matlab. С помощью команды «depfun -toponly» для всех файлов и небольшого изменения строк вы можете создать список непосредственных зависимостей и добавить его в файл GraphViz для создания большого ориентированного графа соединений вызовов вашей кодовой базы. Кластеры на графе могут быть хорошим местом для разделения кода. (РЕДАКТИРОВАТЬ: см. Решение Джонаса; похоже, m2html сделает это за вас.)

Если у вас есть много свободы для переписывания кода, подумайте о том, чтобы переписать часть кода как объекты, используя служебные классы без сохранения состояния с методами класса и частными функциями как способы упаковки связанных функций вместе и обеспечения некоторой инкапсуляции. Я работал с огромными базами кода Matlab, организованными таким образом, и все работает нормально. В классическом Matlab классы - это ваш единственный способ создавать какие-то пакеты.Я считаю, что новая OO-система Matlab также имеет поддержку пространства имен.

Если вы не хотите преобразовывать код в объектно-ориентированный формат, вы можете организовать связанные функции в подкаталогах. Это помогает организовать его хотя бы для просмотра исходного кода.

Все функции должны иметь некоторую документацию в стандартном формате справочного текста Matlab, включая строку H1. Если нет, оставьте там комментарии к тому, что вы изучаете. Затем используйте инструмент «contentsrpt» для автоматического создания файлов оглавления для классов или каталогов.

Удачи.

3
ответ дан 7 November 2019 в 08:42
поделиться

Есть ли в вашем коде приличный текст справки? В этом случае m2html будет большим подспорьем, поскольку он позволяет вам создавать связанную html-справку для удобного просмотра.

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

14
ответ дан 7 November 2019 в 08:42
поделиться

Мне приходилось сталкиваться с этой проблемой много раз на разных должностях в The MathWorks. Вот что я делаю для больших частей кода MATLAB:

  1. Сделайте резервную копию, может быть, дважды!
  2. Выделить все, Ctrl-I для интеллектуального отступа
  3. Выделить все, Ctrl-J, чтобы обернуть комментарии

  4. Если я чувствую себя бумажным - распечатайте все файлы и получите набор маркеров - следуйте вручную , выделяя долговременные переменные и важные вызовы функций.

~~~ И / ИЛИ ~~~

5 Если мне повезет, начну запускать код в отладчике, переходя по одной строке за раз (переходя к подфункциям, написанным пользователем )

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

Обычно моя цель - найти ошибку, решить ее и двигаться дальше. Ваши цели могут быть совершенно разными. Это метод, который я использовал для быстрого понимания сотен различных частей кода MATLAB, которые мне присылали за эти годы.

13
ответ дан 7 November 2019 в 08:42
поделиться

Руководство по стилю программирования MATLAB Ричарда Джонсона — хороший ресурс.

7
ответ дан 7 November 2019 в 08:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: