如何在MATLAB中可视化项目结构?

Ben*_*kes 53 matlab refactoring visualization

我已经拥有数千行Matlab代码,有些作为> 900行函数和一些充满function_name.m文件的目录.很难弄清楚一切正在做什么(或与之相关)或找出依赖关系.您可以建议将函数结构可视化,例如从哪个函数调用哪些函数以及按什么顺序调用?

pto*_*ato 44

港口到NumPy.

(玩笑.)

通常在Matlab中,您将一些文件写为函数,一些文件作为脚本编写.脚本执行的操作包括加载要处理的数据,并将其提供给函数,并对其进行绘图.

为了组织事情,我将从顶级脚本开始,找出哪些函数进行加载,绘图,处理等.将脚本保存在顶级目录中,并尝试将函数分离到子目录中,根据目的功能.将函数的依赖项放入同一子目录中.尝试使目录中的代码不依赖于父目录(或表兄弟目录)中的任何内容.

每当你弄清楚函数的作用以及它的参数是什么时,写一个doc注释.

这假设编写代码的人是合理的.如果没有,Matlab可以很容易地将所有内容放入一个目录中,并且所有内容都依赖于摇摇晃晃的代码塔中的所有其他内容,因此您最终可能会进行大量的重构.

  • 哈哈,完全同意你答案的第一行!:-) Matlab在代码组织方面非常可怕. (14认同)
  • @Idigas - 这是为了什么?我一直认为它是编程语言和数学公式的笨拙孩子,也不是很擅长. (7认同)
  • 如果你认真对待"Port to NumPy",我会两次投票. (4认同)
  • @Olivier - 真的.其中一个主要缺点.但话说回来,对于大型应用来说并不是真的.它更专为快速和使用而设计. (3认同)
  • `addpath`和`rmpath`.不幸. (2认同)

Jon*_*nas 14

你的代码是否带有不错的帮助文本?在这种情况下,m2html将是一个很好的帮助,因为它允许您创建链接的HTML帮助,以方便浏览.

此外,它允许您创建依赖关系图,这有助于您更好地了解组织代码的方式.


Mat*_*oug 13

我在The MathWorks的各种角色中不得不多次处理这个问题.这就是我为MATLAB代码做的大事:

  1. 支持它,也许两次!
  2. 选择全部,Ctrl-I到智能缩进
  3. 选择全部,Ctrl-J以包装注释

  4. 如果我感觉纸质 - 打印所有文件,并获得一组荧光笔 - 手动跟随,突出显示长期变量和重要的函数调用.

~~~ AND/OR ~~~

5如果我感到幸运,请开始在调试器中运行代码,一次单步执行一行(单步执行用户编写的子功能)

在这一点上,我可以通过控制结构并遵循典型的流程.我可能不知道一切都做了什么,但我对正在发生的事情有一个很好的想法.

通常,我的目标是找到一个bug,解决它并继续前进.你的目标可能完全不同.这是我用来快速理解多年来发送的不同MATLAB代码片段的方法.


Mat*_*eau 7

理查德约翰逊的MATLAB编程风格指南是一个很好的资源.


Urs*_*jor 7

关于Matlab编码约定的一些建议:

  1. 使用addpath来避免文件混乱并协助函数taxnomony

  2. 分解功能脚本的section_或为条件运行设置,这也可以帮助插件/输出模块和重用或代码引用.

  3. 使用配置文件打开和关闭选项

  4. 概述了构造的架构设置,以及操作方式
  5. 保留一个状态/自述文件(将自己视为新用户,如何在新用户自己的模块或部分解决方案中无缝地将其作为一部分进行无缝协作?如果您在3个月后再回到代码中丢失或无法追查 - 有些事情是错误的.)我的建议是:保留期刊以改进您对维持巧妙项目的想法.不断完善您的艺术!
  6. 对于方程式,使用乳胶作为文档(并将其保存在附近的文件夹中,例如文档,确保它们易于访问和跟踪 - 如果您必须在驱动器上使用'搜索',项目管理有问题)
  7. 将代码分解为用于本地化和较短代码的短模块,通过较少的滚动,代码将更容易跟踪.
  8. 使用有意义的变量和函数名称(java风格似乎很好,例如'.backupupDataForVerification'),不要限制缩短单词,你以后会受到影响
  9. 在设计中,重新思考是否应该使用函数,脚本或OO(面向对象)
  10. 不要急于过早的优化,因为速度matlab不是最好的选择.如果你真的必须,保持一个非优化的版本进行左右可读性比较,故障排除和调试将不会是一个诅咒.
  11. 始终,始终,始终注释您的代码.永远不要以没有时间为借口,你以后会浪费更多时间.
  12. 为了区分,考虑为代码修改设置一个新节点,例如.设置树以区分版本.

  13. 使用单独的文件夹输入/输出,图像,中间结果等.

  14. 使用时间戳来跟踪您的版本

  15. 与其他人共享您的代码,如果他们发现难以维护,使用或修改,请重新考虑如何优化您的构建.