自顶而下的软件架构分析

 

 

1.   前言

自己在工作当中经常会遇到需要快速并且完整地了解一个软件系统的事情。本来想写一写如何快速了解一个系统,但想着想着就想到了软件的架构。本文以一个软件业务分析师的视角阐述本人理解的软件架构。目的是提供一个适用的,易用的方法,帮助业务分析师或软件架构师系统地,快速的分析和了解软件系统。如有技术性错误,还请各位大牛指正。

2.   软件架构理解

首先来了解一下什么是架构,架构就是为了组织部件和资源,让部件及资源发挥单体所无法发挥的作用,从而实现架构所要达到的战略目标。(有点类似于一个组织存在的目的,说明世界上许多知识都是通用的,只是应用的场景不同)不同的架构本质和目的都一样,甚至架构方法的思想来源都一样,只是所被组织的部件和资源不一样,从而牵引出不同的架构形式。例如企业架构就是为了将企业的人,财,物,流程进行整合,并用IT来实现整合目标,一个软件的架构也类似,就是将数据,功能,网络,流程整合,实现软件的价值。而整合的方法多种多样,不同的方法达到的效果也有差异。架构的目的就是研究如何去整合,协调这些资源,为品质高的系统奠定基础。

3.   自顶而下与自底而上

这里想说说我为什么推荐自顶而下的分析方法而不推荐自底而上的分析方法。首先解释一下什么叫自顶而下,简单说就是从大到小,从粗到细,例如企业预算的制定:从公司到部门再科室再到成本中心。软件的自顶而下就是从业务到功能到数据,再到基础架构。自底而上就是反过来。那么我为什么推荐自顶而下呢,原因如下:

  1. 从业务的角度(原谅我是个业务分析师吧),一款软件存在的价值就是业务需要,必须先了解软件或系统的目标是什么,才能做进一步分析。
  2. 软件的开发与实施是为了业务服务,虽然我们在分析软件的时候要考虑到技术的局限性,但应当最大限度地满足业务需求。如果采用自底而上分析,就是在暗中埋下许多技术限制,违背软件存在的初衷。

4.   自顶而下分析步骤

Step1:战略及业务

要想了解一个系统或分析一个系统,首先最重要的就是要了解这个系统存在的价值,是为了提高客户满意度,为了增加企业利润,还是市场发展需要,或是老板睡了一觉,拍拍脑袋想出一个点子。这决定了这个系统或软件在企业当中的地位以及高层对这个系统的支持程度。了解系统存在的价值及系统实现的目标,可以帮助架构师把握核心问题,不在以后的分析过程当中走弯路。虽然这些看似很虚无飘渺,对系统的开发没有实质性的帮助,但却是一个合格的分析师不得不首要考虑的事情。

Step2:系统级分析

这一步我们将整个系统作为个体看待。主要是分析这个系统与现有系统之间的依赖关系,会不会对其它系统产生影响。这样也可以初步分析出系统可能会涉及到的外部接口。另外在这一步也要定义出主要的系统功能,不必要太细,但不能遗漏主要功能。

Step3:功能分析

这一步需要分析的内容是最多的,主要包括功能性需求,非功能性需求。功能性需求里分主要业务功能和数据分析及运营要求。功能性需求可以是一个模块实现,也可以是单一的功能点实现。识别出功能块后,要分析功能的完备性和功能之间的联系。如基础的用户管理,权限管理,物流及销售的订单管理,仓储的物料管理,财务的记账等。

数据分析及运营要求包括基础数据维护,运营数据的报表及分析。

非功能性需求指的是保证功能的正确性,支持功能更好地发挥作用的需求。包括常见的安全性,易用性,灾备,也包括一些系统独有的如跨域,单点登录等具体问题。

Step4:数据架构

分析完功能性需求后,就需要着手设计数据库表结构。作为业务分析师,我认为只要能识别及设计出对业务有主要作用的表结构,包括每个字段的含义及作用。分析各表之间的关系即可。当然,数据库表设计是一门专业的知识,要想做得好还得深入研究。这一步的工作与Step3可同时并行。

Step5:基础架构

基础架构即系统运行的环境,包括网络,服务器和数据库系统。一般公司里基本都有一个固定的架构,常用的系统在此基础上就可以完成开发。基础架构是软件运行的基础,却也常常会成为系统技术的瓶颈。分析及了解这些的主要作用就是对系统环境有个大概的了解,避免给客户承诺一些根本实现不了的功能。

5.   总结

以上内容只给出简单描述,不涉及具体的技术分析,详细技术请参考其它资料,虽然内容比较多,但如果能够理清楚,有条理,有针对性地去分析,便能够快速了解一个系统。也能够有目的地去分析还未实现的系统。希望本文可以帮助到系统分析师们。

2015年5月8日星期五

时间: 2024-10-14 09:23:31

自顶而下的软件架构分析的相关文章

自顶而下系统构架分析

1.   前言 自己在工作当中经常会遇到需要快速并且完整地了解一个软件系统的事情.本来想写一写如何快速了解一个系统,但想着想着就想到了软件的架构.本文以一个软件业务分析师的视角阐述本人理解的软件架构.目的是提供一个适用的,易用的方法,帮助业务分析师或软件架构师系统地,快速的分析和了解软件系统.如有技术性错误,还请各位大牛指正. 2.   软件架构理解 首先来了解一下什么是架构,架构就是为了组织部件和资源,让部件及资源发挥单体所无法发挥的作用,从而实现架构所要达到的战略目标.(有点类似于一个组织存

wpa_supplicant软件架构分析

wpa_supplicant软件架构分析 1. 启动命令 wpa supplicant 在启动时,启动命令可以带有很多参数,目前我们的启动命令如下: wpa_supplicant /system/bin/wpa_supplicant -Dwext -ieth0 -c/data/wifi/wpa_supplicant.conf -f/data/wifi/wpa_log.txt wpa_supplicant对于启动命令带的参数,用了两个数据结构来保存, 一个是 wpa_params, 另一个是wpa

自顶而下设计FPGA

对IC设计而言,FPGA设计层级大致包括:系统级和行为级,RTL级,门级和晶体管级.然而更普遍的情况,FPGA只是用作实时数据采集控制.某些快速处理算法.PCIe\DDR3等高速数据通道,甚至某些简单的胶合逻辑等,FPGA开发工程师基本不会接触到门级和晶体管级.自顶而下FPGA设计方法,按照职位分工不同,大致归纳如下. 1. 系统架构师工作在系统级,一般使用高级语言如System C描述一个系统的规格,仿真整个系统的功能和性能等,往往不涉及具体的实现细节,但应该对系统实现所需要的资源等关键指标进

【转载】linux环境下tcpdump源代码分析

linux环境下tcpdump源代码分析 原文时间 2013-10-11 13:13:02   原文链接   主题 Tcpdump 作者:韩大卫 @ 吉林师范大学 tcpdump.c 是tcpdump 工具的main.c, 本文旨对tcpdump的框架有简单了解,只展示linux平台使用的一部分核心代码. Tcpdump 的使用目的就是打印出指定条件的报文,即使有再多的正则表达式作为过滤条件.所以只要懂得tcpdump -nXXi eth0 的实现原理即可. 进入main之前,先看一些头文件 n

Oracle 11g不同情形下的登录分析

对于Oracle初学者,甚至有些经验的Oracle DBA来说,Oracle的账户登录问题往往非常棘手,即便成功登录oracle也是知其然而不知其所以然.作者经过系统学习和反复实践,本着打破砂锅问到底的态度,总算对Oracle的登录原理与操作细节有了较全面的认识.本文记录下这些体会与经验,希望能帮助Oracle初学者自信地顺利登录oracle. 1 学习本文的先决条件 Oracle相关的知识很多,但一些基本的术语是所有dba都应该熟悉的.为更好的理解本文内容,读者需要理解如下术语: Instan

Apache Spark源码走读之15 -- Standalone部署模式下的容错性分析

欢迎转载,转载请注明出处,徽沪一郎. 概要 本文就standalone部署方式下的容错性问题做比较细致的分析,主要回答standalone部署方式下的包含哪些主要节点,当某一类节点出现问题时,系统是如何处理的. Standalone部署的节点组成 介绍Spark的资料中对于RDD这个概念涉及的比较多,但对于RDD如何运行起来,如何对应到进程和线程的,着墨的不是很多. 在实际的生产环境中,Spark总是会以集群的方式进行运行的,其中standalone的部署方式是所有集群方式中最为精简的一种,另外

win32下PE文件分析之节表

接上一篇的win32下PE文件分析之NT头 (一).FileBuffer与ImageBuffer (1).FileBuffer是将文件原原本本的读入申请的内存区域中,那部分区域就是FileBuffer,里面的内容与磁盘中的文件一模一样.如下图: (2).ImageBuffer是按照一定规则加载到内存中的某个区域,并且通过一定的处理,能立刻执行的区域,那部分区域叫做ImageBuffer.其大小就是可选PE头中的SizeOfImage.结构如下图: (3).二者之间的关系: ImageBuffer

PullToRefreshListView设置标题置顶和下拉跟随

这几天想着界面的优化,关于PullToRefreshListView标题栏置顶和下拉跟随的效果.这里说说我的大体思路(如果你有跟好的方法,不吝赐教.)在listview的头部添加一个虚拟的headerView(跟标题一样)并设置成INVISIBLE.然后在下拉的时候隐藏标题栏,显示headerView. 首先看一下PullToRefreshBase的源码.这里是获得PullToRefreshListView下拉的距离(value). protected final void setHeaderS

Linux下apache日志分析与状态查看方法

假设apache日志格式为:118.78.199.98 – - [09/Jan/2010:00:59:59 +0800] “GET /Public/Css/index.css HTTP/1.1″ 304 – “http://www.a.cn/common/index.php” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB6.3)” 问题1:在apachelog中找出访问次数最多的10个IP.awk '{print $1}