毕业设计(论文)元搜索引擎的设计与实现.doc

上传人:仙人指路1688 文档编号:3977669 上传时间:2023-03-30 格式:DOC 页数:30 大小:1,020KB
返回 下载 相关 举报
毕业设计(论文)元搜索引擎的设计与实现.doc_第1页
第1页 / 共30页
毕业设计(论文)元搜索引擎的设计与实现.doc_第2页
第2页 / 共30页
毕业设计(论文)元搜索引擎的设计与实现.doc_第3页
第3页 / 共30页
毕业设计(论文)元搜索引擎的设计与实现.doc_第4页
第4页 / 共30页
毕业设计(论文)元搜索引擎的设计与实现.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《毕业设计(论文)元搜索引擎的设计与实现.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)元搜索引擎的设计与实现.doc(30页珍藏版)》请在三一办公上搜索。

1、 本 科 毕 业 设 计院 系 计算机科学与技术系 专 业 计算机科学与技术 题 目 元搜索引擎的设计与实现年 级 2007级 学 号 学生姓名 刘宣 指导老师 职 称 教授 论文提交日期 2011.6.14 南京大学本科生毕业论文(设计)中文摘要毕业论文题目: 元搜索引擎的设计与实现 计算机科学与技术 院系 计算机科学与技术 专业 2007 级本科生姓名: 指导教师(姓名、职称): 摘要:自从华顿大学的学生开发的Metacrawler问世以来,元搜索引擎这个概念被提出。搜索引擎顾名思义是指根据一定的策略、运用特定的计算机程序搜集互联网上的信息,在对信息进行组织和处理后,为用户提供检索服务的系

2、统。较传统搜索引擎而言,它弥补传统搜索引擎的不足。具有搜索效率高、反馈信息更加全面、反馈界面更加个性化、便于浏览等许多优势。但是经过初步调查,元搜索引擎的使用却并未普及。我认为,这是由元搜索引擎的性质所致的。人们会更加津津乐道于自己以往使用的习惯,微软的成功就见证了这一点。将元搜索引擎的技术运用于实用软件中,这一问题就会迎刃而解。另一方面,如何使软件更加便于操作和使用一直是软件设计中的一项重要要求。本文首先介绍了元搜索引擎的历史背景及运用技术,然后对本文实现的软件的设计框架进行具体阐述。关键词:MFC、搜索引擎、元搜索引擎、信息检索、ActiveX组件南京大学本科生毕业论文(设计)英文摘要TH

3、ESIS: Meta Search Engine Design and Implementation DEPARTMENT: Computer Science and TechnologySPECIALIZATION: Computer Science and TechnologyUNDERGRADUATE: Liu XuanMENTOR: Yuan ChunfengABSTRACT:Since the students at the University Wharton Metacrawler developed since the advent of the concept of meta

4、 search engine is presented. Search engine the name suggests is based on certain strategies, the use of specific computer programs to collect information on the Internet, in the organization and information processing, retrieval services to provide users with the system. Than traditional search engi

5、nes, which make up the deficiencies of traditional search engines. With a search for efficiency, feedback is more comprehensive, more personalized feedback interface, easy to navigate, and many other advantages. However, after preliminary investigation, the use of meta search engines are not popular

6、. I think this is the nature of meta-search engine caused. People will be more talked about in his previous habit of using Microsofts success to witness this. Meta search engine technology used in utility software, this problem will be solved. On the other hand, how to make the software more user-fr

7、iendly operation and use of software design has been an important requirement. This paper introduces the historical background of meta search engines and the use of technology, then we realize the design of the software framework specifically addressed.KEY WORDS: MFC, search engines, meta search eng

8、ine, information retrieval, ActiveX目录第一章:搜索引擎概述11.1搜索引擎的发展历史11.2元搜索引擎与传统搜索引擎的对比21.3元搜索引擎的系统架构及其工作原理2第二章:元搜索引擎的设计与实现42.1 开发平台和运行环境42.2 软件设计框架42.3 模块具体实现72.3.1软件界面模块72.3.2功能模块92.3.3网页嵌入模块92.3.4元搜索引擎162.4软件评估18第三章:有待实现的功能213.1虚拟机防毒功能213.2放大镜功能22第四章:总结244.1总结24参考文献25致谢26第一章:搜索引擎概述1.1搜索引擎的发展历史在互联网发展的最初阶段

9、,网站的数量相对较小,人们对信息的查找比较方便;随着web 2.0的普及,网络信息的膨胀速度呈指数型增长。人们越来越难以找到自己需求的信息。这时,搜索引擎出现了,一些为了满足大众信息检索信息需求的专业搜索引擎网站也应运而生。搜索引擎的历史主要经历了以下几个阶段:所有搜索引擎的祖先,是1990年由蒙特利尔大学学生Alan Emtage发明的Archie。虽然当时World Wide Web还未出现,但网络中文件传输还是相当频繁的,而且由于大量的文件散布在各个分散的FTP主机中,查询起来非常不便,因此Alan Emtage想到了开发一个可以以文件名查找文件的系统,于是便有了Archie。Archi

10、e工作原理与现在的搜索引擎已经很接近,它依靠脚本程序自动搜索网上的文件,然后对有关信息进行索引,供使用者以一定的表达式查询。由于Archie深受用户欢迎,受其启发,美国内华达System Computing Services大学于1993年开发了另一个与之非常相似的搜索工具,不过此时的搜索工具除了索引文件外,已能检索网页。当时,“机器人”一词在编程者中十分流行。电脑“机器人”(Computer Robot)是指某个能以人类无法达到的速度不间断地执行某项任务的软件程序。由于专门用于检索信息的“机器人”程序像蜘蛛一样在网络间爬来爬去,因此,搜索引擎的“机器人”程序就被称为“蜘蛛”程序。世界上第一个

11、用于监测互联网发展规模的“机器人”程序是Matthew Gray开发的World wide Web Wanderer。刚开始它只用来统计互联网上的服务器数量,后来则发展为能够检索网站域名。与Wanderer相对应,Martin Koster于1993年10月创建了ALIWEB,它是Archie的HTTP版本。ALIWEB不使用“机器人”程序,而是靠网站主动提交信息来建立自己的链接索引,类似于现在我们熟知的Yahoo。随着互联网的迅速发展,使得检索所有新出现的网页变得越来越困难,因此,在Matthew Gray的Wanderer基础上,一些编程者将传统的“蜘蛛”程序工作原理作了些改进。其设想是,

12、既然所有网页都可能有连向其他网站的链接,那么从跟踪一个网站的链接开始,就有可能检索整个互联网。到1993年底,一些基于此原理的搜索引擎开始纷纷涌现,其中以JumpStation、The World Wide Web Worm(Goto的前身,也就是今天Overture),和Repository-Based Software Engineering (RBSE) spider最负盛名。然而JumpStation和WWW Worm只是以搜索工具在数据库中找到匹配信息的先后次序排列搜索结果,因此毫无信息关联度可言。而RBSE是第一个在搜索结果排列中引入关键字串匹配程度概念的引擎。最早现代意义上的搜索

13、引擎出现于1994年7月。当时Michael Mauldin将John Leavitt的蜘蛛程序接入到其索引程序中,创建了大家现在熟知的Lycos。同年4月,斯坦福(Stanford)大学的两名博士生,David Filo和美籍华人杨致远(Gerry Yang)共同创办了超级目录索引Yahoo,并成功地使搜索引擎的概念深入人心,从此搜索引擎进入了高速发展时期。1.2元搜索引擎与传统搜索引擎的对比传统搜索引擎 (search Engine)实质是个专用的WWW服务器,它存有庞大的索引数据库,收集了全世界成千上百万个WWW主页的文字信息。而元搜索引擎较传统搜索引擎而言,它没有自己的数据库,它是依赖

14、于传统搜索引擎而存在的。元搜索引擎的出现,对于那些需要连续地使用不同的搜索引擎重复相同的检索的人来说,是一个福音。使用元搜索引擎同时对几个搜索引擎进行检索,获得分级编排的检索结果。元搜索引擎是在搜索引擎的基础之上,根据该请求向多个搜索引擎发出实际检索请求,搜索引擎执行元搜索引擎检索请求后将检索结果以应答形式传送给元搜索引擎,元搜索引擎将从多个搜索引擎获得的检索结果经过整理再以应答形式传送给实际用户。1.3元搜索引擎的系统架构及其工作原理 元搜索引擎又称多搜索引擎,它可以同时查找多个单搜索引擎的www站点.按其搜索机制可分为并列式和串行式.并行式元搜索引擎指的是将查询要求同时发向各个独立的搜索引

15、擎,然后将结果按特定的顺序提供给用户。串行式元搜索引擎是将查询要求先发给某个独立的搜索引擎,待其返回结果再将请求发给另一个搜索引擎。并行式元搜索引擎运行模式好,搜索时间短。如图1-1所示是元搜索引擎的系统框架和工作原理图。用户通过客户端浏览器提交检索请求,然后由元搜索引擎对检索请求进行处理,提取检索关键字交给检索接口代理,由检索代理将关键字分发到每个具体的搜索引擎,最后将所有搜索引擎得到的结果进行去重、合并,最终提交给用户。图1-1 元搜索引擎的工作原理 一个真正的元搜索引擎由三部分组成,即:检索请求提交机制、检索接口代理机制、检索结果显示机制。请求提交负责实现用户个性化的检索设置要求,包括调

16、用哪些搜索引擎、检索时间限制、结果数量限制等。接口代理负责将用户的检索请求翻译成满足不同搜索引擎本地化要求的格式。结果显示负责所有元搜索引擎检索结果的去重、合并、输出处理等。我们可将元搜索引擎看成具有双层客户机服务器结构的系统。用户向元搜索引擎发出检索请求,元搜索引擎再根据该请求向多个搜索引擎发出实际检索请求,搜索引擎执行元搜索引擎检索请求后将检索结果以应答形式传送给元搜索引擎,元搜索引擎将从多个搜索引擎获得的检索结果经过整理再以应答形式传送给实际用户。当然,某些元搜索引擎具有略微不同的机制。第二章:元搜索引擎的设计与实现2.1 开发平台和运行环境本文实现的元搜索引擎软件采用C+语言开发,开发

17、平台为Visual Studio 2010;操作系统为Windows7 sp1 (x64). 2.2 软件设计框架该软件的设计框架如图2-1所示。启动软件用户界面天气预报新闻股市行情文学阅读预置与历史记录关键词搜索引擎1搜索引擎2搜索引擎3.结果比较、排序、筛选、汇总图2-1 元搜索引擎的设计框架首先启动软件,加载历史浏览信息,同时再加载预置关键字与历史关键字文档。启动软件后显示出一个人机交互界面,其中有天气预报查询、新闻浏览、股市行情浏览、文学阅读等功能。点击不同的功能按钮后,可分别进入其各自的功能页面。每个功能页面的起始界面中显示有该功能的历史浏览记录中的所浏览过的网页片段。为了便于那些不

18、会使用键盘的用户使用本软件,一个新的查询操作可通过两种方式来进行:一种方式是通过鼠标点击预置的或历史记录的关键字进行查询;另一个方式是通过键盘输入关键字进行查询,每一次输入的关键字都将被写进历史记录。随后通过元搜索引擎模块,并行的将关键字使用不同的搜索引擎进行查询,查询的结果进行比较、筛选、排序之后以网址的方式反馈给用户。用户可以用鼠标点击相关网址,通过IE浏览器对该网页进行浏览。最后,用户浏览的网页以HTML的文件格式被保存下来,供下次浏览。本文实现的元搜索引擎软件的模块组成如图2-2所示。 元 搜 索 引 擎 模 块 网 嵌 模 入 模 块功 能 模 块软件界面模块图2-2 元搜索引擎模块

19、组成软件主要分成四个模块:软件界面模块、功能模块、元搜索引擎模块、网页嵌入模块。界面模块用于显示一个友好的人机交互界面;功能模块用于通过对象实现对功能的抽象;元搜索引擎模块用于将关键字在网络上进行检索;网页嵌入模块用于抓取的网页内容并以控件的形式在软件中显示出来。 各模块所关联的源程序文件如表2-1所示。表2-1 源文件列表源文件 功能模块literature1.cppnews1.cppstockmarket1.cppweather1.cpp主程序模块略 界面模块buttons.cppLiterature.cppStock market.cppnews.cppWeather.cppwindow

20、s.cpp 元搜索引擎模块Acquisition.cppDatabase.cppJudge.cppResults.cpp 网页嵌入模块download.cpptemp.htmupload.cppMFCWinSockCtl.cpp外部资源文件 背景及图标略网页变体文件天气预报.liu新闻浏览.liu股市行情.liu文学阅读.liu 说明文档 Readme.txt2.3 模块具体实现2.3.1软件界面模块 本文实现的元搜索引擎采用C+编写,C+中的MFC是微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C+环境下编写应用程序的一个框架和引擎,VC+

21、是WinOS下开发人员使用的专业C+ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包。它是Win API与C+的结合,API,即微软提供的WinOS下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身。需要注意的是MFC不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建,销毁),而是一些在WinOS(用MFC编写的程序绝大部分都在WinOS中运行

22、)中实现内部处理的类。 本文软件开发环境的框架如图2-3所示。图2-3 软件开发环境及组成框架 本文实现的软件的主画面如图2-4所示。图2-4 软件的主画面2.3.2功能模块功能模块在本软件中起到了承上启下的作用,它承接了界面模块与网页嵌入模块两大模块的交互。功能模块的具体实现是由literature1、news1、stockmarket1、weather1四个抽象类完成的,他们分别完成了文学欣赏、新闻阅读、故事行情和天气预报四个功能的抽象。软件交互界面中网页的嵌入只能通过调用功能模块来完成,因为只有功能模块可以直接调用网页嵌入模块。这一模块中没有牵扯到任何复杂技术的运用,故不作过多详细解释。

23、2.3.3网页嵌入模块根据微软权威的软件开发指南MSDN(Microsoft Developer Network)的定义,ActiveX插件以前也叫做OLE控件或OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页或其它应用程序中。在因特网上,ActiveX插件软件的特点是:一般软件需要用户单独下载然后执行安装,而ActiveX插件是当用户浏览到特定的网页时,IE浏览器即可自动下载并提示用户安装。 它的安装的一个前提是必须经过用户的同意及确认。ActiveX提供丰富的各种功能的控件,包括:多媒体控件、数据库控件、网络控件、界面控件、图像控件、压缩控件、图表控件、系统控件、时间控件、打印

24、控件、综合控件、其它类控件等。ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM)。在有目录和其它支持的网络中,COM变成了分布式COM(DCOM)。在创建包括ActiveX程序时,主要的工作就是组件,一个可以自足的在ActiveX网络(现在的网络主要包括Windows和Mac)中任意运行的程序。这个组件就是ActiveX近控件。ActiveX是Microsoft为抗衡Sun Microsystems的JAVA技术而提出的,此控件的功能和JAVA applet功能类似。 ActiveX组件包括如下几类: 1 自动化服务器:可以由

25、其他应用程序编程驱动的组件。自动化服务器至少包括一个或多个供其他应用程序生成和连接的基于IDispatch的接口。自动化服务器可以含有也可以没有用户界面(UI),这取决于服务器的特性和功能。 2 自动化控制器:那些使用和操纵自动化服务器的应用程序。 3 控件:ActiveX控件等价于以前的OLE控件或OCX。一个典型的控件包括设计时和运行时的用户界面,唯一的IDispatch接口定义控件的方法和属性,唯一的 IConnectionPoint接口用于控件可引发的事件。 4 文档:ActiveX文档,即以前所说的DocObect,表示一种不仅仅是简单控件或自动化服务器的对象。ActiveX文档在结

26、构上是对OLE链接和模型的扩展,并对其所在的 容器具有更多控制权。一个最显著的变化是菜单的显示方式。一个典型的OLE文档的 菜单会与容器菜单合并成一个新的集合,而ActiveX文档将替换整个菜单系统,只表 现出文档的特性而不是文档与容器共同的特性。 5 容器:ActiveX容器是一个可以作为自动化服务器、控件和文档宿主的应用程序。 例如,对于新建一个工程MFCWinSock,其操作过程如下,New-Projects-MFC ActiveX ControlWizard,然后输入MFCWinSock工程名。如下图2-5所示。 图2-5 新建工程示例按Next,直至Finsh出现,再按下OK,如下图

27、2-6:图2-6 工程信息在MFCWinSockCtl.cpp加入如下代码:#ifndef WM_MYWINSOCK #define WM_MYWINSOCK WM_USER+1888#endifView-ClassWizard-Automation-Add 我们为这个控件添加了一个Connect()的接口,出于通用性,安全性和扩展性的考虑,我们采用了VARIANT类型的参数:struct tagVARIANT union struct _tagVARIANT VARTYPE vt; WORD wReserved1; WORD wReserved2; WORD wReserved3; unio

28、n LONG lVal; BYTE bVal; SHORT iVal; FLOAT fltVal; DOUBLE dblVal; VARIANT_BOOL boolVal; _VARIANT_BOOL bool; SCODE scode; CY cyVal; DATE date; BSTR bstrVal; IUnknown _RPC_FAR *punkVal; IDispatch _RPC_FAR *pdispVal; SAFEARRAY _RPC_FAR *parray; BYTE _RPC_FAR *pbVal; SHORT _RPC_FAR *piVal; LONG _RPC_FAR

29、*plVal; FLOAT _RPC_FAR *pfltVal; DOUBLE _RPC_FAR *pdblVal; VARIANT_BOOL _RPC_FAR *pboolVal; _VARIANT_BOOL _RPC_FAR *pbool; SCODE _RPC_FAR *pscode; CY _RPC_FAR *pcyVal; DATE _RPC_FAR *pdate; BSTR _RPC_FAR *pbstrVal; IUnknown _RPC_FAR *_RPC_FAR *ppunkVal; IDispatch _RPC_FAR *_RPC_FAR *ppdispVal; SAFEA

30、RRAY _RPC_FAR *_RPC_FAR *pparray; VARIANT _RPC_FAR *pvarVal; PVOID byref; CHAR cVal; USHORT uiVal; ULONG ulVal; INT intVal; UINT uintVal; DECIMAL _RPC_FAR *pdecVal; CHAR _RPC_FAR *pcVal; USHORT _RPC_FAR *puiVal; ULONG _RPC_FAR *pulVal; INT _RPC_FAR *pintVal; UINT _RPC_FAR *puintVal; struct _tagBRECO

31、RD PVOID pvRecord; IRecordInfo _RPC_FAR *pRecInfo; _VARIANT_NAME_4; _VARIANT_NAME_3; _VARIANT_NAME_2; DECIMAL decVal; _VARIANT_NAME_1; ; 它先是一个结构体,里面有一个重要成员VARTYPE vt;vt即是指明当前的数据类型,比如整型或者字符型,当指明vt后,后面看到各种变量类型包括在一个联合体当中,也就是说指明vt后,你只能使用对应的其中之一变量类型。看着这众多的各种不同类型变量集中在一起,确实让人吓了一跳,但细细看来,大多数变量跟我们平时的用法相似。值得一提

32、的是SAFEARRAY _RPC_FAR *parray;也许有很多人还没有接触过SAFEARRAY类型的变量,SAFEARRAY实际上也是一个结构,大家可以参考MSDN,我也将在后面介绍它的具体使用方法。用同样的方法创建DisConnect()接口。创建两个事件,FireCloseWinsock()响应网络断开事件,FireRecvSockEvent()响应网络有数据到达的事件。创建方法如下图2-7图2-7 创建方法 重载控件消息处理函数WindowProc(),在View-ClassWizard中打开类向导,在消息映射中找到WindowProc,如下图2-8所示。图2-8 2.3.4元搜索

33、引擎 1. 网页特征分析:一是每个搜索结果项的起始标识,二是最后一个搜索结果项的终止标识。目前采用最多的是固定查找和智能判断相结合的策略,本软件采取的是特定区段固定查找的方式。一般为了结果的显示方便,这些结果都是放在Table里面显示的,比较利于查找。对同一搜索引擎返回的Web 页,不同的程序员可以有不同的网页特征分析结果,只要能正确、快速地析取Web 页中的搜索结果即可。开发中使用了正则表达式来获取特定的信息,模式匹配表达式的书写具有很强的灵活性,但是必须反复地测试才能确认其正确性。各个搜索引擎的异构性要求在开发过程中对结果进行融合。2. 结果的融合:属性的排列顺序不同,请参见上一节的图片或

34、相关网站。属性描述方式不同,有的描述用图片,有的用文字,文字还不一定相同(比如歌词)。有的URL是绝对的,有的是相对的,有的对某些属性有附加的效果。如字体,鼠标移动到其上会有特效,有的属性缺省。例如sogua的专辑没有超链,它的专辑URL就是来自tom,算是取长补短。httpcn的网页上没有专辑这一项,我得自己给它添,另外他的搜索的关键字没有用红色关键色突出,得人为对关键字进行处理,有的时候各个搜索引擎的结果中会有属性缺省,在程序中要自动跳过。这些都需要程序将不同转化为统一,提取出来的每一项将URL为key放如指定的Hash中,每一个在页面显示出多组结果。3. 结果优化:以上部分完成了信息的采

35、集,元搜索引擎需对检索结果集合重新组织与整理, 形成全局结果集, 所用结果集生成算法的好坏将直接影响该元搜索引擎的查询精度和响应速度。优化处理主要包括两个方面,一个是去重,另一个是排序,难点是排序。如何能够将获取的信息按照相关度进行排序是非常复杂的问题。因为不同搜索引擎在本身查询结果排序过程中采用的算法相差很大, 甚至有一些未知的算法, 而元搜索引擎必须结合这些使用不同排序算法产生的结果, 并以统一的结果形式返回给用户。这些都是在研究元搜索引擎中遇到的难点, 也是能否成功实现一个元搜索引擎的关键。人们提出了许多种合成方法.在文献中,J.P.Callan 等人针对不同的情况给出了4 种典型的合成

36、算法.如果只有文档的原始顺序是已知的,则可以采用间隔排列合成法:首先把每个查询结果中的第1 项交叉列出,然后再把各个查询结果中的第2 项交叉列出,依此类推.如果可以得到文档的原始相关性分值,那么当这些分值可以直接比较时,则可以采用原始分值合成法:直接依据每个文档的原始相关性分值决定其合成排列次序.如果文档的原始分值不能直接比较,则可以通过对idf(倒排文档频率)等进行标准化来得到规范的相关性分值,并以之为根据确定文档的合成排列次序(规范分值合成).加权分值法:首先计算出各个信息源相应于查询条件的重要性,再以此为权乘上文档的相关性分值作为决定其合成排列次序的根据.4. 调用的搜索引擎接口则以新闻

37、搜索为例,见表2-2表2-2搜索引擎接口BaiduYahoogoogle.hk/news/search?pz=1&cf=all&ned=cn&hl=zh-CN&q=keywordbing keyword&form=QBNBsososogo5. 代码示例void Search_Show() string s;s=Utility.GetParam(keyword);Search_keyword.Text = s;s=Utility.GetParam(Search_yahoo);if(s.Length=0) s= on;if(s!=) Search_yahoo.Checked = true;s=Ut

38、ility.GetParam(Search_abc);if(s.Length=0) s= on;if(s!=) Search_abc.Checked = true;2.4软件评估软件设计的质量在很大程度上受到系统封装关系的影响。模块间松耦合而模块内部又保持高度一致性是高质量设计软件的关键之一。所以,评定软件设计的水平的手段之一就是考察它的模块间的关系。对系统的可重用性和可维护性水平的客观评价是一个评价软件结构的重要组成部分。我在本文介绍的度量标准可以帮助你客观评定你的软件设计的质量。尽管度量标准可以对我们的软件设计质量起着指导和反馈的作用,但是你要牢记我在本文提出的度量标准并不是软件设计的唯一

39、依据。设计质量分数的高低未必一定对应于真实软件设计质量的高低,但是不太可能出现那种设计水平很高,但是在我们这种度量标准下,分数却很低的情况。我们提出软件设计质量度量标准的目的在于帮助设计者正确评估他们自己的设计,更重要的是帮助你检测设计的水平是否达到预期目标。1.测试稳定性稳定性指的是修改软件中某个模块而不影响其它模块的困难程度。让我们看看模块间的依赖关系是如何影响到稳定性的。一个模块在软件中重用的次数越多,那么就越依赖于它。模块的输入依赖性越强(较多的其它模块依赖本模块),则它的稳定性得分也就越高(即难以修改)。换句话来说,其它模块越依赖于本模块,那么修改本模块而不影响其它模块也就越困难。模

40、块的输入依赖性和输出依赖性是评测模块稳定性和不稳定性的重要方面。模块的输出依赖性强、输入依赖性弱,则稳定性低(即容易修改),这是因为对变化不会扩展到很多其它方面。另一方面,模块的输入量越多,它就越难以修改,则越稳定。稳定性可以通过计算输入量和输出量来计算。输入耦合度代表依赖本模块的其它模块数,输出耦合度代表本模块所依赖的其它模块数。不稳定度可以通过输出耦合度与总的耦合度的比例来得到。计算公式如下:I = Ce/(Ce + Ca)I 代表该模块的不稳定度 Ca代表该模块的输入耦合度,即输入依赖度 Ce代表本模块的输出耦合度,即输出依赖度 如果I的值接近于零,那么模块的输入依赖性就远远大于输出依赖

41、性,模块也就越稳定。模块越稳定也就越难以修改,因为某个变化会衍生出许多新的变化,波及到依赖它的其它模块上了。对I值接近于一的模块来说,它的输出依赖性远远大于输入依赖性,模块很不稳定。由于受本模块影响的模块不多,所以不稳定的模块容易修改。看到这些,你也许会感到很困惑,“到底我应该让模块的稳定性高一些好,还是低一些?”由于组成一个软件的一整套模块中,有些模块有输入依赖性(被其它模块引用),而有些模块有输出依赖性(引用其它模块)。我们在设计模块不应该追求完全的稳定性或者不稳定性,而是具体考虑某个模块需要的是稳定性还是不稳定性并尽可能实现。输入依赖度比较强的模块必须拥有较高的抗可变性,展现较高程度上的稳定性。在面向对象的开发方法中,抽象性通过分离功能和功能的实现方法来提高稳定性。对Java来说,抽象类和界面(interface)显然就是抽象性的表现形式。因此,越需要稳定的模块应该有越高的抽象层次。与此对应,越不稳定的模块也就越具体。2.测量抽象性你可以通过计算模块内抽象类(或者界面)的数目与所有类的数目的比例来测出该模块的抽象程度。抽象度可以用下面的公式计算:A=Na/NcA 代表模块的抽象程度 Na代表模块中抽象类或者界面的数目 Nc代表模块中具体类的数目 抽象度等于零表示该模块是

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号