内聚性:

内聚性是一种非量化的量测,可利用评量规准来确认待确认源代码的内聚性的分类。内聚性的分类如下,由低到高排列:

  • 偶然内聚性(Coincidental cohesion,最低)偶然内聚性是指模块中的机能只是刚好放在一起,模块中各机能之间唯一的关系是其位置在同一个模块中(例如:“工具”模块)。
  • 逻辑内聚性(Logical cohesion)逻辑内聚性是只要机能在逻辑上分为同一类,不论各机能的本质是否有很大差异,就将这些机能放在同一模块中(例如将所有的鼠标和键盘都放在输入处理副程序中)。模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
  • 时间内聚性(Temporal cohesion)时间内聚性是指将相近时间点运行的程序,放在同一个模块中(例如在捕捉到一个异常后调用一函数,在函数中关闭已打开的文件、产生错误日志、并告知用户)。
  • 程序内聚性(Procedural cohesion)程序内聚性是指依一组会按照固定顺序运行的程序放在同一个模块中(例如一个函数检查文件的权限,之后打开文件)。
  • 联系内聚性/信息内聚/通信内聚(Communicational cohesion)联系内聚性是指模块中的机能因为处理相同的数据或者指各处理使用相同的输入数据或者产生相同的输出数据,所以放在同一个模块中(例如一个模块中的许多机能都访问同一个记录)。必须要有相同的数据结构。
  • 依序内聚性/顺序内聚(Sequential cohesion)依序内聚性是指模块中的各机能彼此的输入及输出数据相关,一模块的输出数据是另一个模块的输入,类似工厂的生产线(例如一个模块先读取文件中的数据,之后再处理数据)。【信息是隐蔽的】
  • 功能内聚性(Functional cohesion,最高)功能内聚性是指模块中的各机能是因为它们都对模块中单一明确定义的任务有贡献(例如XML字符串的词法分析)。
    由赖瑞·康斯坦丁、爱德华·尤登及史蒂夫·麦康奈尔等人的研究都提出偶然内聚性和逻辑内聚性是不好的,联系内聚性和依序内聚性是好的,而功能内聚性是最理想的状态
    【功能内聚】和【顺序内聚】是最好的,【通信内聚】【过程内聚】【时间内聚】可以接受,【逻辑内聚】和【偶然内聚】是不能接受的。
    通信内聚:相同的数据
    过程内聚:相同的问题
    时间内聚:相同的时间

    抽象与信息隐藏

    信息隐藏:

    • 往往体现为与模块化并作用的一种册罗。
    • 旨在设计和确定模块时,是一个模块内包含的信息(过程或者数据),对于不需要这些信息的其他模块来说是不能访问的。

    消除重复功能

    • 通过模块分解或者合并,降低耦合提高内聚

    将模块的影响范围限制在控制范围之内

    • 影响范围:受模块内一个判定影响的所有模块的集合
    • 控制范围:这个模块本身影响的模块集合
    模块规模适中
    • 模块过大:可理解程度下降
    • 模块国小:开销大于有效操作系统接口复杂
    • 在考虑模块的独立性同时,为了增加可理解性,模块的大小最好在50~150条语句左右,可以用1~2页纸打印,便于人们阅读和研究

    单一入口,单一出口

    • 单入口和单出口的模块能有效地避免内容耦合

     

    详细设计的描述工具

    常考:程序流程图,盒图(N-S图)和问题分析图(PAD图)

    程序流程图

    以图形方式说明系统中的控制流

    优点:

    • 直观清晰,易于使用,是普遍的采集工具

    缺点:

    盒图

    N-S图,也被称为盒图 或NS图(Nassi Shneiderman图)。是结构化编程中的一种可视化建模。

    问题分析图

    又名PAD图,用二维树形结构的图来表示程序的控制流,控制流程自上而下,从左往右的执行。

    HIPO图

    层次加输入-处理-输出

    • 能够表示输入/输出数据与软件过程之间的关系

    H图:Hierarchy总体设计

    • 以层次方框形式表达程序主功能模块与次功能模块之间的关系。

    IPO图:输入-处理-输出

    分类: 软件工程

    0 条评论

    发表回复

    Avatar placeholder

    您的电子邮箱地址不会被公开。 必填项已用 * 标注