





























创建于 2023年2月23日 02:15:27 · 约2,814字
大家应该在从事软件开发领域工作时间有一段时间之后,就开始有画图的意识,不管是懵懂的学别人还是想更好的让其它人理解自己的一个观点。所谓“一图胜千言”,我们身处于软件开发这个水很深且要求精确的复杂领域里,要想把事情做好,最基本的是要把事情想明白,其次还要让相关的人能够明白你要说的东西,进行协作。
特别对于一位架构师来说,能否画得一手好图尤其重要,因为相关的干系人数较多,要让不同领域的人能够达成一个统一的认识,是一件不太容易但也是必须要做好的事情。
软件开发涉及的流程是:需求 --> 开发 --> 测试 --> 发布上线。
作图本身是个设计的工作,是个前期工作。那么从软件开发的整个生命周期来说,用到的图的地方是在前期的需求、开发阶段较多。在软件开发这个非常抽象的领域,只要涉及到多人协作,那么通过文字来进行交流叙述是非常晦涩难懂的,需要沟通好几遍才能理解达成一致也是比较常见的情况。那么我们画图,就是为了把不适合用言语表述的内容通过作图的方式呈现出来,让相关协作者有一个共同的具象的参照物。这个参照物可以有它的额外价值,是对软件长期价值的延伸,一份一致、清晰的设计图,可以给后续的软件迭代提供非常有帮助的决策依据。当然保证设计图与系统的一致本身也是件费精力的事情。
txt
scale 1.5
@startuml
left to right direction
skinparam usecase {
BackgroundColor #FFFF99
BorderColor black
FontColor black
FontSize 13
FontName Arial
}
actor 游客
actor 注册会员
actor 管理员
usecase (注册) as UC1
usecase (发表评论) as UC2
usecase (发布新闻) as UC3
usecase (新闻管理) as UC4
usecase (评论管理) as UC5
usecase (会员管理) as UC6
游客 --> UC1
UC1 .> 注册会员 : <<extends>>
注册会员 --> UC2
管理员 --> UC3
管理员 --> UC4
管理员 --> UC5
管理员 --> UC6
@enduml用例图是UML交互图中的一种,是指由参与者(Actor)、用例(Use Case),边界以及它们之间的关系构成的用于描述系统功能的视图。用例图(User Case)是外部用户(被称为参与者,一般为软件的面向用户)所能观察到的系统功能的模型图。

可能英文名Robustness Diagram更为常见一些,用于衔接用例图之后的设计,识别出系统在用例图中的各种职责,对后续的细节设计提供基础。算是对用例图的一种延伸。
思维导图是一个很厉害的发明,他将我们的思考过程具象化了,完美展示了由点到面不断发散的过程。但是它最大的价值,反而不是最终呈现出来的这个图,而是促进了思考的过程。并且需要注意的是,一定要把一条分支走到尽头,再回过头来走其它的分支,把思想榨干。

DFD图是从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。
上面贴了2张图都是流程图,流程图有时也称作输入-输出图。该图直观地描述一个工作过程的具体步骤,各种操作一目了然,不会产生“歧义性”,便于理解,算法出错时容易发现。流程图对准确了解事情是如何进行的,以及决定应如何改进过程极有帮助。大到系统级别、小到某个操作背后的运转逻辑都可以使用流程图来画,我个人认为这应该是被最多人认识的图,没有之一。
UML类图是UML交互图中的一种,也是我们较常见的一种。类图是描述系统中的类,以及各个类之间的关系的静态视图。它不但是设计人员关心的核心,更是实现人员关注的核心。
状态图是对类图的补充。描述类的对象所有可能的状态,以及事件发生时状态的转移条件。可以捕获对象、子系统和系统的生命周期。他们可以告知一个对象可以拥有的状态,并且事件(如消息的接收、时间的流逝、错误、条件变为真等)会怎么随着时间的推移来影响这些状态。一个状态图应该连接到所有具有清晰的可标识状态和复杂行为的类;该图可以确定类的行为,以及该行为如何根据当前的状态变化,也可以展示哪些事件将会改变类的对象的状态。
E-R图提供了表示实体型(Entity)、属性(Attribute)和联系(Relationship)的方法。其中最核心的还属联系(Relationship)的表示。
时序图也是UML交互图中的一种,是描述对象是如何交互的,并且将重点放在消息序列上。也就是说,描述消息是如何在对象间发送和接收的。时序图有两个坐标轴:纵坐标轴显示时间,横坐标轴显示对象。
其实上一节中图的顺序就是按照由层次从高到底,粒度从粗到细规划的。我们可以用用例图来确定用户核心需求,再用Robustness Diagram定义好关键功能,随后在关键功能的实现上通过思维导图进行发散,然后用DFD图把粗粒度的内容串起来,至此大体的设计工作算是完成了。
然后再通过流程图、UML类图、状态图、E-R图、时序图在不同的场景确定细节实现。最终就是Coding的事情了。
其实最好的图是手稿,不但画起来快,还能让你的思维专注到构思上,用什么颜色之类的问题不会对你产生干扰。另外我们不要为了画图而画图,结合实际的情况把握好尺度,一般情况下,时间上不太会允许我们把图画的面面俱到,能覆盖到核心甚至80%就很好了。
参考资料:
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。