功能模块划分

Posted by Heng on June 26, 2019

首先对于功能模块划分提出两个问题:

  1. 功能模块划分时应遵循什么样的原则
  2. 功能模块划分有哪些比较好的方法

功能模块划分需遵循的原则

首先说一下第一个问题:功能模块划分时应遵循什么样的原则?

  • 原则:高内聚,低耦合

耦合:模块之间的联系紧密程度

  1. 非直接耦合 两个模块之间没有直接关系,它们之间的联系完全时通过主模块的控制和调用来实现的。耦合度最低,模块独立性最强
  2. 数据耦合 模块之间有调用关系,传递的是简单的数据值
  3. 标记耦合 模块之间有调用关系,传递的是数据结构。如数组名、文件名,其实传递的是这个数据结构的地址。
  4. 控制耦合 模块之间有调用关系,传递的是控制变量(如开关、标志等),被调用模块通过控制变量的值有选择地执行某一功能。
  5. 外部耦合 多个模块都访问同一全局简单变量,不是同一数据结构,不是通过参数表传递该变量的信息
  6. 公共耦合 多个模块都访问同一公共数据环境,如全局数据结构,共享通信区.
  7. 内容耦合 一个模块直接使用另一个模块的内部数据,或则通过非正常入口而转入另一个模块内部,是最差的耦合。

内聚:模块内部各元素联系的紧密程度

  1. 功能内聚 模块内所有元素共同完成某一功能,联系紧密,缺一不可,是最强的内聚类型。
  2. 顺序内聚 模块完成多个功能,这些功能顺序执行,各功能之间有数据传递。
  3. 通信内聚 模块内所有处理元素都在同一个数据结构上操作,或则指各处理使用相同的输入数据或者产生相同的输出数据。
  4. 过程内聚 模块完成多个功能,这些功能顺序执行,各功能之间可能没有数据传递。
  5. 时间内聚 把需要同时执行的动作组合在一起,所有动作在统一时间段内执行。如初始化
  6. 逻辑内聚 把机重相关的功能组合在一起,每次调用时,由传送给模块的参数来确定该模块应完成哪一种功能。
  7. 偶然内聚 模块内各部分之间没有联系,或则有联系,这种联系也很松散,最弱的内聚类型。如初学C语言时,所有代码都写在主函数里面。

功能模块划分的方法

说完了功能模块划分的原则后,现在说一下功能模块划分的方法:

1.功能流程法

定义:将功能的基本流程画出来,根据流程的每个大的环节进行模块划分,然后再细化和查漏补缺。

举一个例子,比如说:请就银行ATM的取款功能进行模块划分?

那么对于这个问题,就可以得到下面的流程:

  1. 插卡环节
  2. 密码登录环节
  3. 输入金额环节
  4. 取走钱币环节
  5. 取卡环节

看完这5个流程,有人可能会问,这样子就行了吗?密码的构成规定不需要研究一下吗?输入金额有没有最大值什么的也不需要研究一下吗?是的,你想的这些没有错,但是那些细节是在得到流程模块确定之后,再对某一个流程模块进行细化、查漏补缺等。对症下药很重要,回到这个问题,它是问如何进行模块划分,所以中但是模块的划分而不是某些小功能的研究;要做的是先将流程的模块确定出来,其次才是细化模块的一些东西,然后再查看缺漏的东西。

再如,请针对于利用代理后台为玩家充值房卡的功能进行模块划分?

对于这个问题,我们也可以得到下面的回答:

  1. 打开代理后台网页
  2. 密码登录
  3. 房卡充值
  4. 退出登录

这么首先是要列出了主要的功能流程,再对主要每一个功能精心细化,如打开代理后台网页,利用IE浏览器是不是正常打开,谷歌浏览器、360浏览器等;登陆的账号密码后台的要求是什么?账号有规定是8-16位吗?密码是不是不可以有空格,必须要字母跟数字的结合?房卡充值有没有快速搜索玩家的功能?


2.层次划分法

定义:按照逻辑层次逐层细化处模块的过程,比较适合用于UI划分,大的系统模块划分等。

结合我们平时测试的棋牌游戏,那么就可以理解为两部分,第一部分就是牌局外的内容,第二部分就是牌局内的内容。层次划分法其实就像剥洋葱一样,一层一层的往细的剥,直到最后最细的无法再分离出新的层次;然后把前面剥出来的每一层排列出来,这样子就得到了我们想要的功能层次划分图,我们进行测试就可以根据这个图一步一步的设计测试用例、执行测试用例;层次划分良好的测试用例用起来也会比较舒服。

这里只是简单地举一个例子,有些功能模块或许还可以分得更细,可以在私下自己深入研究。


3.类型划分法

定义:按照功能包含内容的不同类型进行划分。

比如说消耗后数量会减少的有:比赛劵、拜财神,这些物品用一个少一个,在背包中拥有数量也会根据使用或者获得而相应地改变。

消耗后数量不变的有:免费的表情(飞吻、送花、敲桌子),这些物品不管你使用多少次,都不会有数量上的减少。

设计测试用例的时候就可以根据数量会不会改变的这一类型而进行划分,你最后得到的测试用例会比较清晰明了、直观,