标题：功能模块
概述
功能模块化的根据是，如果一个问题有多个问题组合而成，那么这个组合问题的复杂程度将大于分别考虑这个问题时的复杂程度之和。这个结论使得人们乐于利用功能模块化方法将复杂的问题分解成许多容易解决的局部问题  软件结构图示。功能模块化方法并不等于无限制地分割软件，因为随着功能模块的增多，虽然开发单个功能模块的工作量减少了，但是设计功能模块间接口所需的工作量也将增加，而且会出现意想不到的软件缺陷。因此，只有选择合适的功能模块数目才会使整个系统的开发成本最小。
独立性
功能模块独立的概念是功能模块化、抽象、信息隐蔽和局部化概念的直接结果。
抽象是指对事物、状态或过程之间所存在的某些相似的方面集中和概括起来，而暂时忽略他们之间的差异，即考虑抽象事物的本质特征而暂时不考虑他们的细节。信息隐蔽是指再设计功能模块时使得一个功能模块内所包含的信息（过程或数据），对于不需要这些信息的功能模块来说是不能访问的。信息隐蔽原则对于以后在软件维护期间修改软件时会带来极大的好处，因为大量数据和过程是软件的其他部分所不能觉察的，因而再对某个功能模块修改时就不大会影响到软件的其他部分，所谓局部化是指把一些关系密切的软件元素在物理位置上彼此靠近。
功能模块独立性是通过制定具有单一功能并且和其他功能模块没有过多联系的功能模块来实现的。每个功能模块只涉及该软件要求的一个具体子功能，而且与软件结构的其他部分的接口是简单的。比如，五四络科网所运用到的功能模块在一定程度上就克服了传统建站的弊端，可以从根本上建立一个完全独立的网站，具体表现在：五四络科建站所生成的数据库是独立的，也就意味着可以移植到其他服务器平台上，从而解决生成的网站不能迁移的难题；五四络科建站平台可以让生成的网站互不干涉，相互独立，进而提高了系统的安全性；有建站需求的客户往往趋向于个性化，可以在五四络科建站的基础上进行二次开发；在管理上网站也是独立的，管理员可以给网站开通独立的FTP权限，在管理网站时不会影响到其他网站，迁移出去也很方便。
功能模块独立性好的软件接口简单，易于编制，独立的功能模块也比较容易测试和维护，限制了功能模块之间由于联系紧密而引起的修改副作用。独立性是保证软件质量的重要因素。
独立性的度量
功能模块独立性是由内聚性和耦合性两个定性指标来度量的。内聚性是度量一个功能模块内功能强度的一个相对指标。耦合性则用来度量功能模块之间的相互联系的程度。耦合耦合是软件结构中各功能模块之间相互连接的一种度量，耦合强弱取决于功能模块间接口的复杂程度、进入或访问一个功能模块的点以及通过接口的数据。
耦合有以下几种，他们之间的耦合度由高到低排列：
☆内容耦合。如一个功能模块直接访问另一个功能模块的内容，则这两个功能模块称为内容耦合。
☆公共耦合。如一组功能模块都访问统一全局数据结构，则称之为公共耦合。
☆外部耦合。如一组功能模块都访问统一全局数据项，则称之为外部耦合。
☆控制耦合。如一功能模块明显地把开关量、名字等信息送入另一功能模块，控制另一功能模块的功能，则为控制耦合。
☆标记耦合。如一组功能模块共享了某个记录，而不是简单变量，即这些功能模块都需某一数据的子结构时，就需要按该记录的结构进行操作，并通过参数表来传递记录信息，这样的耦合称之为标记耦合。
☆数据耦合。如一个功能模块访问另一个功能模块，被访问的功能模块的输入和输出都是数据项参数，则这两个功能模块为数据耦合。
☆非直接耦合。若两个功能模块没有直接关系，他们之间的联系完全是通过主程序的控制和调用来实现的，便称这两个功能模块为非直接耦合，独立性最强。
上面只是对耦合机制进行了一个分类。原则上讲，功能模块化设计总是希望功能模块之间的耦合表现为非直接耦合方式。但是，由于问题所固有的复杂性和空间方面的考虑，有时则要根据实际情况，全面权衡，选用其它类型的耦合。内聚内聚是从功能角度来度量功能模块内的联系，一个好的内聚功能模块应当恰好做一件事。它描述的是功能模块内的功能联系。
内聚有如下的种类，其内聚度由弱到强排列：
☆偶然内聚。一功能模块中的代码无法定义其不同功能的调用。但它使该功能模块能执行不同的功能，这种功能模块称为巧合强度功能模块。
☆逻辑内聚。这种功能模块把几种相关的功能组合在一起，每次被调用时，有传送给功能模块参数来确定该功能模块应完成那一种功能。
☆时间内聚。这种功能模块顺序完成一类相关功能，比如初始化功能模块，它顺序为变量置初值。
☆过程内聚。如果一个功能模块内的处理元素是相关的，而且必须以特定次序执行则称为过程内聚。
☆通信内聚。这种功能模块除了具有过程内聚的特点外，还有另外一种关系，则它的所有功能都通过使用公共数据而发生关系。
☆顺序内聚。如果一个功能模块内的处理元素和同一个功能密切相关，而且这些处理必须顺序执行，通常一个处理元素的输出数据作为下一个处理元素的输入数据，则称为顺序内聚。
☆功能内聚。如果一个功能模块包括并仅包括未完成某一具体任务所必需的所有成分，或者说功能模块中所有成分结合起来是为了完成一个具体的任务，此功能模块称为功能强度模块。
类型
软件开发中的功能模块类型系统中的各功能模块在纳入时间、激活机制和控制方式等方面可以不相同。
1）纳入时间
纳入时间是指一个功能模块被归并到软件的源语言描述之中的时间。比如宏功能模块是由编译器把它作为程序的一部分直接插入到引用位置上去的。而普通的子程序则是通过产生目标代码与连接代码而纳入到软件中的。
2）激活机制
功能模块的激活机制通常有两种：一个是通过引用来调用功能模块，另一个是通过中断来调用一个功能模块。在实时系统中，通常使用后者。比如，使用一个外部时间来引起处理过程的中断，然后使控制转到另一个功能模块。
3）控制方式
一般功能模块具有单一入口和单一出口，并作为程序的一部分顺序地执行，有时，也需要更为复杂的控制方式，如可重入功能模块。这种功能模块不以任何方式修改它自己或它所访问的局部地址，从而这样的功能模块就可以同时被几个任务使用。
4）结构分类
在软件结构中，功能模块可以分为以下几类：
顺序功能模块：它在没有明显中断情况下被应用软件调用和执行。
增量功能模块：它在调用结束之前可以被应用程序中断，然后在中断点重新启动。
并行功能模块：它在并行多处理机环境中与别的功能模块同时执行。网站建设中的功能模块类型1.新闻系统功能模块
新闻管理系统，又称为网站信息管理系统，广泛应用于各种专业网站、政府网站、企业网站等几乎所有的网站上，是将新闻、信息栏目和业界动态等信息集中起来发布、管理等为一体的一种网站应用程序。无论企业网站管理人员身处何地，只要能够上网就能对网站信息进行更新及维护,支持无限级分类。
2.产品展示功能模块
企业通过管理后台，根据企业产品特点进行分类，访问者可对产品进行分类及关键词搜索。产品更新及分类更改完全由企业自助完成，具有明显的高效性和准确性。使用方便，立即生效,支持无限级分类。
3.招聘系统功能模块
管理员可以后台添加招聘职位、要求、待遇、招聘期限，通过网络进行招聘。网站访问者可以浏览招聘职位，应聘相应的岗位。
4.计数器功能模块
统计网站总访问量。可以设置网站的初始值；可以按刷新计数或者按ip统计。
5.会员系统功能模块
该系统用于掌握潜在客户资料（包括姓名、性别、地址、电话、E-MAIL等个人资料和注册者所在企业的性质、规模、经营范围等）；管理潜在客户资料（如区别不同层级会员进行授权，以邮件列表方式进行服务跟进等）；分析潜在客户群（分析潜在客户来源、分布、性质、规模等，以辅助决策）。
6.网上订单功能模块
通过购物车的形式，提交订购产品，并填写相关内容。管理员通过后台查看订单，及时收集到信息，迅速同订购方联系。
7.访客留言功能模块
留言即时发布，风格与网站完全统一；在线管理、删除留言内容；留言自动分页；其他访问者可以直接回复，管理员也可以进行回复。访问者可以发表意见、咨询价格等商务行为，提高交易量。
8.网上调查功能模块
用户对企业产品的评价如何？用户对行业的各种看法如何？企业出台一种新产品或者服务，用户对她的反映如何？如何有效的统计用户对热点问题的一些看法？如何有效的调查用户对企业一些意见？如何收集潜在用户对企业关心的问题的一些建议与意见？智能建站网络调查统计分析系统能轻松管理用户的各种调查统计。
9.友情连接功能模块
管理员可以添加其他网站网址以便交换连接，提高网站访问量，可以是文字连接或是图片连接。
10.公告管理功能模块
管理员可以通过本系统发布公司公告，可以以弹出窗口形式出现。
11.广告管理功能模块
可以在页面上添加各种网站广告，只要你把相应的代码拷到相应的位置就可以浏览到你想要宣传的内容。可以起到宣传作用，或给网站带来相应的收益。
12.多国语言功能模块
可以面向于多个国家和地区，突破国籍的界限，使其应用更广泛。支持中文简体、中文繁体、英文等。且可无限扩展。
13.模 板 库功能模块
系统内有大量的各类模版供用户选择，制作精美，分类齐全，包含了各个领域的应用模版，用户可以自由选择。
14.自定栏目功能模块
用户可以在设定的栏目数量内任意添加、删除、修改栏目，包括一级栏目、二级栏目，栏目设定可以外接其它的网址，栏目设定选择相应的栏目类型便具备相应的功能。
15.自定链接功能模块
在网站编辑内容，可以在某个地方添加链接地址，可以是图片或者是文字，另外设定栏目的时候还可以链接外部的地址。
16.CSS 样式功能模块
可以根据喜好修改栏目文字的色彩，系统提供的大量的色彩供选择，使生成的网站看起来更具个性化。
17.在线编辑功能模块
系统采用先进的编辑器，功能齐全、使用方便，在线就可以任意编辑，可以图文混编，不需要下载编辑。
18.资源管理功能模块
用户可以通过资源管理可以上传网站需要的文件，可以更改文件。
19.全站编辑功能模块
为了满足具有一定技术并且需要对网站页面有大的改动的要求，系统提供了全站编辑功能，他可以让你改变每个页面的内容及其布局，使系统更具灵活性。
20.网站管理功能模块
总管家可以管理本系统内的所有客户，代理商可以管理其代理账号下的所有客户。可以给客户设定使用权限（比如：模版类型、试用期限、最大栏目数量、可用语言等等），可以开通、封杀、删除本管理账号下的客户账号。
21.多级代理功能模块
系统支持四级代理，上级代理可以管理下级代理。能方便的为您发展您的代理商、发展您的直接客户，为客户提供最大的方便。
22.代理平台功能模块
总管家及代理商都可以拥有代理平台，平台信息都是每个代理商的，各个代理商可以通过该平台发展自己的客户。
23.分离网站功能模块
Access版本系统，生成独立的access数据库，可以脱离系统放置到支持asp\access数据库的任意空间独立运行，系统拥有者可以给客户进行此项操作。
24.锁定模版功能模块
对于特殊的客户，可以给他锁定使用某一个模版，由总管家操作.
添加模版功能模块
系统拥有者可以把自己做好的模版，通过总管家账号添加自己的模版。
25.二级域名功能模块
系统支持二级域名，但是本功能为辅加插件，必须有自己的服务器才可以。
26.自动简繁功能模块
系统可以自动进行简体繁体语言转换。
27.网站数据备份模块
本功能只有access版具有，管理员可以备份、恢复网站后台数据库。
28.ICP备案功能模块
通过后台轻松实现ICP证书/编号上传。
29.安全验证功能模块
增加安全验证码功能，让用户账户更加安全。
30.多管理员功能模块
生成网站可以根据需求添加多个管理员，并且授予不同的管理权限。
31.wap建站功能模块
可以通过智能建站用户专区建立企业手机网站。
32.wap网站功能模块
可以用手机访问建立的wap网站。
目前移动手机全面默认开通支持，联通cdma手机全面默认开通支持。联通其他手机到营业厅咨询。
33.超强用户管理模块
列出1周内到期未封杀的用户,列出1周内到期被封杀的用户,列出15天到期未封杀用户,列出15天到期封杀用户,列出1月内到期未封杀的用户,列出1月内到期被封杀的用户, 列出付费未封杀用户,列出付费封杀用户,列出到期未封杀用户,列出到期被封杀用户,封杀所有过期用户,删除所有过期且被封杀用户,删除过期一个月且被封杀用户，系统提醒、便捷操作功能，提醒最新注册用户，提醒过期用户，封杀过期用户等。
设计
1.提高功能模块独立性
在得到软件结构之后，就应首先着眼于改善功能模块的独立性，考验是否应该把一些功能模块提取或合并，力求降低耦合提高内聚。例如，多个功能模块共有的一个子功能可以独立成一个功能模块，由这些功能模块调用，有时可以通过分解或合并功能模块以减少控制信息的传递及对全局数据的引用，并且降低接口的复杂度。
2.功能模块规模适度
经验表明，当功能模块过大时，功能模块的可理解性就会迅速下降。但是对过大的功能模块分解时，也不应降低功能模块的独立性。因为当对一个大的功能模块分解时，有可能增加功能模块之间的依赖。
3.深度、宽度、扇出和扇入要适当
如果深度过大则说明有的控制模块可能简单了。如果宽度过大则说明系统的控制过于集中。而扇出过大则意味着功能模块过于复杂，需要控制和协调过多的下级模块，这时应适当地增加中间层次，扇出太小则可以把下级模块进一步分解成若干个子功能模块，或者合并到上级功能模块中去。一个功能模块的扇入是表明有多少个上级功能模块直接调用它，扇入越大则共享该模块的上级模块数目越多，这是有好处的。
4.要使模块的作用范围保持在该模块的控制范围内
功能模块的作用范围是指受该功能模块内一个判定影响的所有功能模块的集合。功能模块的控制范围是指这个功能模块本身以及所有直接或间接从属于它的功能模块的集合。在一个设计得很好的系统中，所有受判定影响的功能模块应该都从属于作出判定的那个功能模块，最好局限于做出判定的那个功能模块本身及它的直接下级模块。对于那些不满足这一条件的软件结构修改的办法是：将判定点上移或者将那些在作用范围内但是不在控制范围内的功能模块移植到控制范围内。
5.应减少功能模块的接口的复杂性和冗余度，并改善一致性
功能模块接口复杂是软件发生错误的一个主要原因。应该仔细设计模块接口，使得信息传递简单并且和模块的功能一致。
6.设计成单入口、单出口的功能模块，避免病态连接
要防止内容耦合性，如果功能模块都是从顶部入口、从底部出口的话，这样的软件也更易于理解和易于维护。病态连接关系是指从中部进入或访问一个模块。
7.模块的功能可预测
如果一个功能模块可以当做一个黑箱，即只要输入的数据相同就产生同样的输出，这个模块的功能就是可以预测的。而那些具有内部记忆的功能模块则可能是不可预知的，因为它可能记载了某个内部标志并且利用这个标志去选择处理方案。由于这个标志对上级功能模块来说是看不见的，因而可能引起混乱。
8.组装软件根据设计的约束和移植的需要
组装是指用来把软件组合起来，以便把软件放入特定的处理环境或送往其他的地方。有时，设计约束要求一个程序要在内存中覆盖自己。如果有这种要求的话，原设计结构就可能必须重新组织以便按照重复的次数、存取的频率以及各次调用之间的间隔来把功能模块组合起来。
总之，不管什么样的功能模块都有可能出现软件缺陷，主要类型有：软件没有实现产品规格说明所要求的功能模块；软件中出现了产品规格说明指明不应该出现的错误；软件实现了产品规格说明没有提到的功能模块；软件没有实现虽然产品规格说明没有明确提及但应该实现的目标；软件难以理解，不容易使用，运行缓慢，或从测试员的角度看，最终用户会认为不好。因此一定要重视软件功能模块的设计和软件测试的进行，这样才能从根本上保证软件质量。