8.1项目背景介绍
可复用的软件开发之路将是软件行业发展的主流。所谓软件复用(或软件重用)是指充分利用过去软件开发中积累的成果、知识和经验,去开发新的软件系统,使人们在新系统的开发中着重于解决当前出现的新问题,满足新的需求,从而避免或减少软件开发中的重复劳动。而软件复用的基础就是构件。所谓软件构件(也称软件组件)是软件系统内可标识的、符合某种标准要求的构成成分,类似于传统工业中的零部件。广义上讲,构件可以是需求分析、设计、代码、测试用例、文档或软件开发过程中的其他产品;狭义来说,一般指对外提供一组规约化接口的、符合一定标准的、可替换的软件系统的程序模块。通常情况下是指后者。
常见的构件接口标准包括:微软提出的COM/COM+、SUN公司提出的JavaBean/EJB、OMG提出的Corba、Borland公司提出的VCL、微软与IBM提出的WebService等。
具体的构件可能是一个界面控件,如常见的TextBox控件;也可能是个动态链接库(dll),如常见的用以实现数据库访问,执行命令的ADO组件;当然也可以是一个可执行程序,比如计算器中的小程序;当然还有可能是以WebServeice形式存在的Web服务。随着实验室项目经验不断积累,业已实现各种形式的大量构件,实验室的软件开发也渐渐走上了可复用的软件开发之路。为了有效提高软件的开发速度,迫切需要对已有的构件实行有效的管理,以方便开发新项目时能够做到快速地查找所需的构件,并能方便使用。
后面的内容来自于上海理工大学计算机学院中爱班软件综合课程设计的构件库管理系统小组报告。参加这次课程设计的同学基本上都是第一次分析、设计、编写综合软件,第一次接触.NET平台,第一次综合使用SQL Server、VisualStudio.NET、IS、DreamverWeaver等各类工具,但是在适当的管理和引导之下,同学们在短短两个月左右时间内做出了优秀的作品。在这次课程设计辅导中,强调软件团队开发过程中管理方面的内容,强调分析和设计的过程,并综合应用包括极限编程中的很多有益的思想。对于整个软件开发过程,并不强调文档自身的规范化,也并不重视各种分析、设计、表述的标准化,因为文档本质上只是形式,目的在于促进高效的开发,所以更关心学生总体软件过程的把握,团队协作精神的培养,以及实际解决问题能力的培养。
当然,对于只是大学三年级的同学来说,这样一个综合软件开发任务毕竟是全新的、具有挑战性的任务,要想尽善尽美是不可能的,疏漏之处难免会出现。在后面的文档中,或多或少会有诸多不成熟不完善之处。但它毕竟是一个实际的软件过程。为了让读者认识一个实际的软件过程原貌,完全保留了原有的报告,以供读者品评。
8.2项目规划
8.2.1项目简介
软件复用使人们在软件开发中不必“一切从零开始”,提高了软件生产率和质量,缩短了开发周期,降低了开发成本。软件重用中没有材料的消耗,而且软件通过多次重用后,其质量和可靠性会越来越高。
构件(component)是可复用的软件组成成分,可被用来构造其他软件。软件构件可以是被封装的对象类、类树、一些功能模块、软件框架(framework)、软件构架(或体系结构Architectural)、文档、分析件、设计模式(DesignPattern)等。构件分为构件类和构件实例,通过给出构件类的参数,生成实例,通过实例的组装和控制来构造相应的应用软件。
这不仅大大提高了软件开发者的开发效率,也大大提高了软件的质量。
1.项目的主要技术与平台
ASP.NET
VB.NET
MSSQL Server2000
2.项目实现功能
以WebService形式存在的构件管理系统网站,普通用户可以对构件进行查询,包括对关键字的查询,还可以浏览有关构件的技术文章;管理员可以对构件进行添加和更新,以及对所有类的查询、添加和修改。
3.项目基础的需求
具体功能实现如下。
1)基本信息管理
可以添加构件功能,构件类别,产品类型,操作系统,构件作者,相关项目,开发工具。对其描述和介绍进行修改。
2)构件基本信息管理
添加一个构件,包括构件名称,构件类别,开发工具,产品类型,功能类型,构件简介和功能介绍。并可以对确定版本的构件信息进行修改。
3)构件版本信息管理
添加一个已存在构件的新版本信息,包括构件版本号、构件作者、操作系统、主要技术、先决条件和更新内容,并可以对其信息修改。
4)构件使用信息管理
添加一个构件的使用信息,包括构件的使用方法、使用实例、构件路径和源代码路径。
并可以对已存在的信息进行修改。
5)构件结构信息管理
注册一个构件所含有的类信息。同时在确定的类中添加、修改和删除属性、方法(删除方法时同时删除所有相关参数)、事件、父类和基类,在确定的方法中添加、修改、删除参数信息。
6)构件检索浏览
可以按构件名称、构件项目、构件类别、构件功能、构件作者进行关键字查询。可以按构件功能、构件名称、构件版本的顺序做树形的构件信息浏览检索。
7)类信息的检索浏览
可以查询类的属性、事件、基类、父类、方法及参数。并可以浏览相关的使用说明和实例。
8)用户信息管理
注册管理员信息。
9)相关文章管理和浏览
管理员可以添加和删除构件相关文章,用户可以浏览构件的技术文章。
4.技术难点分析
难点1:注册
数据库中表单之间的关系比较复杂,在构件注册时,所涉及的表单很多,所以需要反复对数据库进行读写操作。与构件直接相关的有基本信息表、版本信息表和用法表三张表,在注册一个新构件时需要依次对三张表插入新记录,而由于基本信息表和版本信息表中均有外键指向与之相关的基本信息表,所以在Page_Load()事件时需要动态绑定数据库中的字段,并写入DropDownList中,来限制用户选择。而在注册构件时,又需将用户所选的选项名与其在数据库中对应的编号写入构件表中。构件的信息量较大,在网页上所用的控件分为TextBox,Label,FileFieldBox(上传)、DropDownList,所以,在写Insert语句时所对应的变量会比较复杂。此外,由于构件编号时需要自动生成,在用户打开注册网页时得到一个新的构件编号。对于用户输入的检查也是注册时的一个难点。
难点2:更新
构件更新是对已存在的构件增加新的版本。用户在打开此网页时需要看到构件基本信息表中对应的构件记录,所以需要在Page_Load()时读出数据库中指定记录相应的字段值。
与注册相同,需要用到多个控件来承载数据,所以编码的难度会增加。
难点3:修改
网页显示的是用户选定的构件记录,所以在加载网页时需要读出三张表单中关于构件的信息,dropdownlist控件既要实现数据库中基本信息动态的绑定,又要在第一条记录中显示指定记录里的值。
难点4:参数互传
在构建TreeView时,会有各节点间的参数互传,而各节点的信息存在于不同的表单中。例如,第一层的“功能”循环,要从tb_Component Function中选出Component Funtion Name字段内容传到第二层的“构件”循环,然后在第二层循环中,要从多张表中才能确定同一功能的构件,并把Component Name字段内容传到第三层的“版本”循环,在第三层中同样要在多张表中寻找关系,确定同一构件名同一版本号的类,把Version ID字段内容传到第四层的“类”循环。如此连接各表单的SELECT语句会比较烦琐,关系也不容易确定,因此需要在多张表单选取所需字段,建立视图。
难点5:计算
建立四层的Tree View需要有四层的FOR循环语句,它的跳出条件应是视图中的记录数,因此要计算功能、构件、版本及类的记录数。
难点6:添加
对TreeView中功能、构件、版本及其叶子节点的添加。
难点7:显示信息内容
在“类信息添加”,“类信息修改”功能的实现上,单击“功能”名、“构件”名、“版本”号时,也要能显示相应的信息内容。
难点8:查询功能的实现
查询功能的实现需要涉及调用数据库表单,由于在一个页面中的数据绑定将涉及许多数据库表单,所以在编码时,SELECT语句将比较烦琐,例如:在构件功能查询时,首先出现的一个列出所有构件功能的列表,此页面将涉及TB_COMPONENTFUNCTION表中的Function Name字段及Function Deion字段,然后键入构件、功能时,将出现一张关于此构件功能的所有构件的网页,它涉及TB_component Basic Infor mation中的Component Name字段及Component Instruction字段。若键入详细信息,将涉及TB_component Basic Information中的字段。对于整个查询功能的编码来说,在调用表单方面将会变得非常复杂和烦琐。
难点9:VB编码的形成
在实现查询数据的显示时运用了DATALIST这个控件,其中涉及了Hyper Link控件数据绑定问题,由于在DATALIST中添加的声明都在HTML语言中,所以对VB编码有一定的困难,无法在VB编码中写HyperLink.NavigateUrl指向哪个网页,并且也无法传参数。
难点10:设置
由于要运用FRAMESET,所以查询部分主要分为上下两个FRAME,本应写在上方FRAME中的关键字查询的搜索按钮选用HYPERLINK,但是HYPERLINK控件没有ON_CLICK()事件,所以要完成该功能需要用TEXTBOX和DROPDOWNLIST两个控件的触发事件来共同完成。然而,若TEXTBOX的触发事件(textbox_TextChanged)要人为完成的话,需要将其AUTOPOSTBACK属性设置为TRUE。但是一旦将AUTOPOSTBACK设置为TRUE时,在运行填写完关键字后就需要先让TEXTBOX失去它的焦点来判断是否输入完毕,要判断是否失去焦点,就要在除TEXTBOX的其他区域上单击一次,然后再按下搜索键。这样的话,在运行时就变成了要按两下搜索键才能完成功能(注:第一次是使TEXTBOX失去焦点,第二次则是正式的运用功能)。
8.2.2项目管理
1.角色分工
2.时间规划
8.3项目分析设计
8.3.1数据库设计
1.ER图
2.表单关系图
3.详细表单定义
1)构件基本信息表——tb_ComponentBasicInformation
2)构件版本信息表——tb_ComponentVersionInformation
3)构件使用信息表——tb_ComponentUsageInformation
4)构件类别表——tb_ComponentCategory
5)开发工具表——tb_Tool
6)产品类型表——tb_ProductType
7)构件功能表——tb_ComponentFunction
8)操作系统表——tb_OperationSystem
9)项目信息表——tb_ProjectInformation
10)构件—项目表——tb_ComponentProject
11)作者表——tb_Author
12)类信息表——tb_ClassInformation
13)类—基类表——tb_ClassBase
14)类—属性表——tb_ClassAttribute
15)类—方法表——tb_ClassMethod
16)类—事件表——tb_ClassEvent
17)参数表——tb_Reference
18)用户表——tb_UserInformation
19)关于构件表——tb_ComponentIntroduction
4.视图定义
1)构件—功能表——view_Function
2)构件—版本表——view_Version
3)构件—项目表——view_Project
4)构件—作者表——view_Creator
5)构件—类别表——view_Category
6)构件—类表——View_Class
7)类—父类表——View_SuperClass
8)类—基类表——View_BaseClass
9)构件下载表——View_Download
8.3.2UML设计
1.USECASEDIAGRAM
用例(USECASENAME):添加结构信息
角色(ACTOR):管理员
描述(DEION):本个案描述管理员添加构件结构信息