这周学习了软件结构图。软件结构图(Structure Chart, 简称SC)是软件系统的模块层次结构,反映了整个系统的功能实现。 软件结构以层次表示程序的系统结构,即一种控制的层次体系,并不表示软件的具体过程。 件结构一般用树状或网状结构的图形来表示。 软件结构图的主要元素有: 模块:模块用带有名字的方框表示,名称应体现模块的功能。 控制关系:控制关系用单向箭头或直线表示模块间的调用关系。 信息传递:用带注释的短箭头表示模块调用过程中传递的信息。 循环调用和选择调用:在上部模块底部加一个菱形符号表示选择调用,在上部模块的下方家一个弧形箭头,表示循环调用。
软件结构图的形态特征: 深度:指结构图控制的层次,也是模块的层数。图8-4中的结构图的深度为5。能粗略表示一个系统的大小和复杂程度,深度和程序长度之间存在着某种对应关系。 宽度:指一层中最大的模块个数。图8-4中的结构图的宽度为8。一般来说,结构的宽度越大,则系统就越复杂。 扇出:指一个模块直接下属模块的个数。图8-4中的结构图的模块I的扇出为5。扇出过大,表示模块过分复杂,需要控制和协调的下级模块太多。扇出的上限一般为 5~9,平均一般为3或4。 扇入:指一个模块直接上属模块的个数。图8-4中的结构图的模块T的扇入为4。扇入过大,意味着共享该模块的上级模块数目多,这有一定的益处,但是决不能违背模块的独立性原则而片面追求高扇入。 画结构图应注意的事项: 模块不能重名。 调用关系只能从上到下。
阅读内容:(软件架构)
就如同其他复杂结构一样,软件必须要建构在一个坚实的基础之上。没有考虑到关键场景,没有针对常见问题的设计,或者没有考虑一些重要决定带来的长期结果,就会将你的软件应用程序置于危险之中。代码没有架构,就如同花园中的常青藤,会变得很难维护,添加新特性也困难。
软件架构是一个技术蓝图,诠释了在优化诸如软件性能,安全性以及可管理性等常见的属性时候系统是如何由子系统(模块)构建的。
软件架构的5中视图包括:逻辑架构、开发架构、运行架构、物理架构、数据架构。
逻辑架构:关注功能。不仅包括用户可见的功能,也包括一些基础模块以及辅助模块。
开发架构:关注程序包,不仅包括要编写的程序,还包括可以直接使用的第三方SDK或者现成的框架、类库以及开发的系统将运行于其上的系统软件或者中间件。
运行架构:关注进程、线程、对象等运行时概念,以及相关的并发、同步、通信等问题。
物理架构:关注‘目标程序及其依赖的运行库和系统软件’最终如何安装或部署到物理机器,以及如何部署机器和网络来配合软件系统的可靠性、可伸缩性等要求。
数据架构:关注持久化数据的存储方案,不仅包括实体及其实体关系的数据存储格式,还包括数据传递、数据复制和数据同步等策略。
运行架构和开发架构的关系:开发架构一般偏重于程序包在编译时期的静态依赖关系,而这些程序运行起来后会表现为对象、线程、进程,运行架构比较关注这些运行时单元的交互问题。
物理结构和运行架构的关系:运行架构特别关注目标程序的动态执行情况,而物理架构重视目标程序的静态位置问题;物理架构还要考虑软件系统和包括硬件在内的整个IT系统之间是如何相互影响的。
数据架构和物理架构的关系:对于很多集成系统,数据需要在不同系统之间的传递、复制和暂存,这往往要涉及到不同的物理机器。
五种架构视图的关注点各有侧重。逻辑架构侧重功能需求;开发架构侧重开发期间质量属性;运行架构侧重运行期质量属性;物理架构侧重安装和部署需求;数据架构侧重数据需求。