B2B电子商务搜索平台Part-1需求分析Part-2系统开发Part-3系统测试Part-1需求分析搜索引擎的基本组成目标垂直搜索作为针对某一个行业的专业搜索引擎,是搜索引擎的细分和延伸,而它本身所具有的“专”、“精”、“深”,且具有行业色彩等特点。相比较综合搜索引擎的海量信息无序化,则显得更加专注、具体和深入。行业网站可借力向用户提供综合B2B搜索服务,不仅能完善网站自身平台功能,而且可以借此凝聚用户、拓展新市场。用户特点使用本系统的用户,大多是普通买家或者卖家,他们的教育以及技术水平各有差异。同时,一般情况下,在使用之前他们对自己所需要的商品以及卖家已经有了大致的期望。而由于搜索引擎界面本身的简洁性,他们仅仅需要针对自己所期望的查询结果提供一些简单的查询条件就可以了。这也正是开发搜索引擎的目的之一。在实际中,本系统一般都是作为电子商务网站的主要入口,使用频率非常之高。输入有限的查询条件中,并期望获得简洁有效的信息。这也是我们用户所需求的重点。假定和约束序号1假设开发团队对于B2B电子商务网站架构了解现实团队成员并不熟悉架构假设2开发团队对于垂直搜索概念有一定的理解,并做过相关的实践开发团队仅大致了解垂直搜索3开发团队对于搜索过程中分词技术了解开发团队对此技术并不了解4用户搜索关键字包含信息比较明确由于用户自己的表达以及中文分词等原因,对于关键字划分不够精确5序号1内容当根据关键字搜索存在许多的匹配时,如果将全部的结果返回,则会比较耗费内存,需要在这方面做出优化约束2对于搜索结果的排序原则,采用匹配度高的排在前面,因此匹配算法要比较好3对于中文搜索的时候,如果中文分词模块不能够很好的工作,那么中文搜索的返回结果将不是用户期待的。4系统环境-软件环境名称版本语种操作系统WindowsXPProfessionalSP2及以上中文,英文浏览器Firefox3.0及以上中文,英文InternetExplorer6.0及以上中文,英文数据库平台MySQL5.1英文开发工具Eclipse8.0英文服务器软件Tomcat6.0英文版本控制TortoiseSVN1.6英文测试工具TestDirector8.0英文系统环境-硬件环境硬件最低配置:服务器端:CPU:Pentium43.0G内存:2G硬盘:可用空间10G客户端:CPU:Pentium42.0G内存:512M能够接入互联网,有浏览器能够浏览普通网页其他输入输出设备:键盘、鼠标、显示器(分辨率以1280*1024为佳)需求规定:系统流程需求规定:系统功能层次系统用例图:对性能的规定:时间特性要求a)响应时间:在正常带宽下,返回搜索结果的时间从用户按下搜索起不超过1秒b)更新处理时间:系统能够定时的检查是否有新数据进入系统,并对这些数据做处理。而且更新主要是针对数据库的,大多数是在凌晨,所以对用户的访问影响很小,且lucene建立索引的时间不是很长,所以更新比较容易。c)数据的转换和传送时间;数据的传送时间由数据量和带宽决定,数据转化和传送时间不会超过5秒,能在较快时间内响应用户的操作。对性能的规定:灵活性a)操作方式上的变化;通过浏览器返回用户的查询结果,用户对浏览器的操作基本熟悉,所以对本系统的操作不需要学习更多的东西,就算要变化也只是用户对浏览器操作的变化。b)运行环境的变化;由于是BS架构,返回给用户的输出显示在浏览器端,可能有些浏览器版本过低,不支持JavaScript等等,或者由于各种浏览器之间的区别,导致部分效果不能显示,但是总体这些语言在几款流行的浏览器上都可以执行,用户无需安装其他软件。c)同其他软件的接口的变化;d)精度和有效时限的变化;对于搜索的精度,由于采用数据库和lucene的结合,对精度有很好的控制,即使用户输入了部分词语,也能搜索到相关信息,搜索的速度也会很快。e)计划的变化或改进。运行环境的变化:当系统更换平台的时候,只需要平台相关部分的模块做出改动,而不是整个系统重构同其他软件接口的变化:系统对外的接口部分应该抽象出来,不影响到内部的结构。对于为了提供这些灵活性而进行的专门设计的部分应该加以标明。对性能的规定:输人输出要求解释各输入输出数据类型,并逐项说明其媒体、格式、数值范围、精度等。对软件的数据输出及必须标明的控制输出量进行解释并举例,包括对硬拷贝报告(正常结果输出、状态输出及异常输出)以及图形或显示报告的描述。对性能的规定:数据管理能力要求数据的增长在软件开发完成后的一段时间内可能不会很大,但是他的增长会随着用户访问量的增大而急速增长。对性能的规定:故障处理要求可能由于数据过多或者访问量过大导致服务器死机或者性能明显下降,这会导致用户查询不到所需数据或者体验下降,处理这个故障时,要注意保持数据库的完整性,不能丢失数据,再次原则上重启系统。软件故障有如下分类:web服务器出现异常。由于搜索的过程中匹配的结果是保存在服务器的内存中的,所以对内存的容量和读取速度要求比较高,因此如果出现内存容量不够,那么服务器将无法正常使用。此时应该检查是否有异常进程大量使用内存,并终止该进程。虽然大容量的内存可以在一定程度上减少硬盘I/O的操作次数,但是每天频繁的访问依然会导致大量的硬盘I/O操作,因此硬盘的质量是整个服务器稳定的关键,所以应该将硬盘上的数据做备份,当硬盘损坏的时候,数据依然可以恢复。服务器可能会存在轻微内存泄漏,当运行时间过长,内存将耗尽,因此也会导致服务器无法正常访问。此时应该有开发人员检查自己的模块中对内存申请的部分,消除内存泄漏。对性能的规定:其他专门要求如用户单位对安全保密的要求,对使用方便的要求,对可维护性、可补充性、易读性、可靠性、运行环境可转换性的特殊要求等。可维护性要求:服务器提供完整的设计文档,以及各个模块的详细设计文档,代码要求有一定的注释。模块之间的功能明确,接口定义清晰,模块之间保证松耦合。可扩充性要求:系统设计过程中,采用面向对象技术,接口类或抽象类定义明确。可靠性要求:系统设计过程中采用异常处理机制,保证当系统内部发生一个错误的时候,系统能够抛出异常,而不是Crash掉。系统具备日志功能,包括错误日志和系统运行状态的日志,可以让维护人员根据日志更好的对系统维护。运行环境可转换性要求:系统采用Java语言开发,在最大的程度上实现可移植。Part-2系统开发系统整体架构B2B电子商务垂直搜索系统主要针对各类用户提供一个产品发布、查询和搜索的平台,用户不仅可以对已经存在数据库的产品进行搜索,还可以对网络爬虫抓取的页面进行内容搜索,从而提供更加全面的产品和商家信息,更好的进行电子商务交易。系统整体架构:硬件架构系统整体架构:软件架构模块分析:Web服务器模块(1/6)服务器采用Tomcat6.0。页面的显示主要是由JSP编写,它封装产生动态网页的处理逻辑。同时加入JavaScript来对一些用户操作实现相应,CSS用来控制页面的样式和布局。Servlet担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层,将用户操作的相应分发给相应的处理程序。它的工作过程如下:客户端发送请求至服务器;服务器启动并调用Servlet,Servlet根据客户端请求生成响应内容并将其传给服务器;服务器将响应返回客户端。模块分析:网络爬虫模块(2/6)网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。整个Crawl采用的是是单线程非阻塞策略。在一个线程内打开多个非阻塞的连接,通过poll对连接状态进行判断,在第一时间响应请求,不但充分利用了网络资源,同时也将本机CPU资源的消耗降至最低。这种方法需要对dns请求,连接,读写操作都采用异步非阻塞操作,其中采用开源的GNU项目adns作为解决方案,后面三个操作相对简单可以直接在程序内实现。模块分析:索引建立模块(3/6)网络爬虫模块爬取网页上的数据,对数据库完成更新(添加,删除,更改)操作之后,会向索引建立模块发送一个消息,而索引建立模块会定时检查是否有数据库更新消息,并且在需要更新索引的时候自动选择负载较低的时间段对索引进行更新,或者选择进行增量的索引(Append),可以对于大量数据进行批量索引,并且接口设计用于优化批量索引和小批量的增量索引。模块分析:搜索模块(4/6)org.apache.lucene.index搜索入口。在整个检索过程中,语言分析器,查询分析器,甚至搜索器(Searcher)都是提供了抽象的接口,可以根据需要进行定制。Search(搜索)模块也是用户和Lucene交互的一个窗口。用户输入的内容都通过该模块进入到Lucene的内部,然后通过Search模块,最后返回给用户相关信息,完成查询工作。这个包提供了一些类来协助创建索引以及对创建好的索引进行更新。这里面有两个基础的类:IndexWriter和IndexReader,其中IndexWriter是用来创建索引并添加文档到索引中的,IndexReader是用来删除索引中的文档的。搜索模块先对搜索条件进行分析,通过QueryParser来构造一个Query类型的对象,并根据这个对象进行搜索。模块分析:系统配置管理模块(5/6)这个模块主要包括三个主要功能:1.系统统的配置信息,如爬虫模块的规则,索引文件的路径等2.日常日志3.对系统热门关键字数据库进行存取模块分析:Web数据库(6/6)数据库主要利用JDBC连接。连接数据库的过程主要如下:(1)首先要在应用程序中加载JDBC驱动程序。通常使用Class.forName()方法加载。(2)成功加载JDBC驱动程序后,负责管理JDBC驱动程序的类DriverManage会识别加载的驱动程序,于是DriverManage就调用方法getConnection()来连接数据库。(3)获取Connection对象以后,可以用Connection对象的方法来创建一个Statement对象的实例,来对数据库进行操作。用户交互过程用户首先打开搜索主界面(默认是简单搜索),按照自身需求,在输入框中填写关键字,并选择搜索类型(搜索商品或者搜索商家),再点击搜索按钮进行搜索。然后,系统返回与用户输入关键字匹配的信息。比如用户选择搜索商品,并在输入框中填写“诺基亚”,系统将返回给用户所有关于诺基亚的商品信息,包括商品的图片、产地、价格、供货数量、商品的相关信息描述(商品的具体参数细节)。如果用户对系统返回的结果觉得太多、不够精确,则可以选择高级搜索,输入更多的删选条件来查找需要的信息。首先,点击高级搜索按钮,打开高级搜索界面,输入关键字,并可以根据界面提示填写产地,商品类别,厂家等信息来限定搜索范围。用户交互过程:简单搜索时序用户交互过程:高级搜索时序类设计整个系统分为三大模块:1.索引创建模块2.搜索模块3.爬虫模块。类设计:索引创建模块(1/3)类设计:搜索模块(2/3)类设计:网络爬虫模块解决方案(3/3)Part-3系统测试测试方法和测试原则1.测试方法测试过程按4个步骤进行,即单元测试、集成测试、系统测试和验收测试。2.测试原则①应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。②程序员应避免检查自己的程序。③pareto原则:测试发现的错误中80%很可能起源于20%的模块中。应孤立这些疑点模块重点测试。④测试用例应由输入数据和预期的输出结果两部分组成。⑤程序修改后要回归测试。⑥在设计测试用例时,应包括合理的输入条件和不合理的输入条件。充分注意测试中的群集现象。经验表明,测试后程序中残存的错误数目与该程序中已发现的错误数目成正比。所有的测试都应追溯到用户需求⑦最严重的错误(从用户角度)是那些导致软件无法满足需求的错误。程序中的问题根源可能在