分析法,从解决方案出发,从求解出发,去分析结论,找出和问题之间的关系。
understand是一款很强大的阅读代码软件。我通过一个java小代码的分析来梳理一下代码分析的过程。
- 系统外部学习,从使用者的角度来学习。画出系统的用例图和操作过程。画出流程图和顺序图(用户操作顺序图)。
- 从系统内部学习,从体系结构的角度去学习,画出系统的类图,也可以使用工具逆向出类图
- 从系统内部学习,从代码角度,从数据结构+算法的角度去学习和理解,列出所有的变量及其含义列出所有的函数和这些变量之间关系(影响矩阵)画出每个方法的顺序图和流程图。
- 将外部用户操作顺序图与内部操作之间映射起来,画出系统内部顺序图。
这个节选一下
1.Graph Architecture:展示一个框架节点的结构关系;
2.Declaration:展示一个实体的结构关系,例如:展示参数,则返回类型和被调用函数,对于类,则展示私有成员变量(谁继承这个类,谁基于这个类)
3.Parent Declaration:展示这个实体在哪里被声明了的结构关系;
4.Declaration File:展示所选的文件中所有被定义的实体(例如函数,类型,变量,常量等);
5.Declaration Type:展示组成类型;
6.Class Declaration:展示定义类和父类的成员变量;
7.Data Members:展示类或者方法的组成,或者包含的类型;
8.Control Flow:展示一个实体的控制流程图或者类似实体类型;
9.Cluster Control Flow:展示一个实体的流程图或者类似实体类型,这个比上一个更具有交互性;
10.UML Class Diagram:展示这个项目中或者一个文件中定义的类以及与这个类关联的类
11.UML Sequence Diagram:展示两个实体之间的时序关系图;
12.Package:展示给定包名中声明的所有实体
13.Task:展示一个任务中的参数,调用,实体
14.Rename Declaration:展示实体中被重命名的所有实体
跑一个绘制圆形的小程序。
使用rose绘制用例图
操作流程图
顺序图
利用rose绘制
绘制类图
然后可以重新建立顺序图,对其流程大体把握(虽然只是一个简简单单的绘制扇形,绘制圆形java代码)
对于我们所写的代码,生产,java程序,可以交由understand来分析一下自己所写代码的逻辑和脉络。
直接生产uml图,这只表示出类之间的继承关系,没有表示出其关联和依赖关系,需要用另外的图。如果要看到类之间的引用关系,还需要产生graphs->graphs for ArcTest.java –>cluster call internal图,产生的图如下:
选中ArcControls,产生Graphs->cluster call internal
如果选择主菜单graphs-call butterfly,则产生如下图:
同时分析逻辑,看自己的代码在哪些耦合性方面有缺陷