第3章 数据库开发过程
本章概要 本章介绍数据库开发过程.通过本章学习,初步掌握开发一个数据库应用系统的基本过程.
开发一个数据库应用,通常需要经过如下的阶段:第一阶段:调查与分析.获得软件的需求信息和基本的功能定义,形成基本的软件功能描述.第二阶段:数据建模.根据应用调查分析得到的信息,建立应用中涉及的数据以及操作数据的方法,流程,形成数据的流动图表.第三阶段:功能设计.针对应用调查与分析结果和数据建模,进行应用的详细功能设计,形成应用的软件设计文档.第四阶段:选择数据库系统.选择适合应用的数据库系统.第五阶段:选择数据库访问技术.选择适合应用的数据库访问技术.第六阶段:代码设计.设计应用的软件代码.第七阶段:测试与调试.发现设计中的问题并及时更改,直到能稳定地运行.第八阶段:发行应用软件.
3.1 调查与分析
对软件需求的深入理解是软件开发工作至关重要的一个步骤,不论我们设计的如何好,代码编写的如何高效,没有很好的需求分析,这个软件工程只能给用户带来失望,给开发者造成很大的麻烦.
需求分析(Requirement Analysis)是调查用户对新开发的信息系统的需要和要求,结合组织的目标,现状,实力和技术等因素,通过深入细致的分析,确定出合理可行的信息系统需求,并通过规范的形式描述需求的过程.
需求分析的任务,在于完全弄清用户对软件系统的确切要求,用需求规格说明书表达出来.
在需求分析过程中,软件人员和客户都扮演了积极的角色,客户必须尽力将有些模糊的软件功能和性能概念具体详细地描述出来,而开发者则是软件功能的询问者,咨询顾问和问题解决者.这个任务看起来简单,实际上不是这样,客户和开发者之间的通信量很大,通信的内容很繁杂,其中存在误解或者误传的可能性,或者说含糊性,软件工程师面临进退两难的局面,只有通过重复客户的陈述才可能得到完整的理解.
需求分析是软件工程活动,它在系统级别的软件分配和软件设计间起到了桥梁的作用.需求分析能够使软件工程师刻画出软件的功能和性能,指明软件和其他系统元素的接口,并建立软件必须满足的约束条件.
在软件分析过程中,分析人员的主要焦点是发现"问题是什么(What is it )",而不是发现"怎么做(What to do )","系统会产生和使用那些数据 系统必须要完成的功能有哪些 系统的用户界面应该是怎样的 "等等.通过对当前问题和希望的信息(输入和输出)进行的评估,分析员综合一个或者多个解决方案,选择一个最优方案,开始应用的数据建模.
数据库应用是一种尤其强调应用的软件工程,在需求分析阶段,客户的积极参与,以及软件工程人员的积极配合,是数据库应用开发成功的关键.
需求分析阶段的工作,可以分成以下四个方面:(1)问题识别;(2)分析与综合;(3)编制需求分析的文档;(4)需求分析评审.
需求分析阶段的研究对象是软件产品的用户需求.这些需求最终要在所开发的软件产品上体现出来,或得到一定程度的满足.
需求通常包括:功能需求;性能需求;环境需求;可靠性需求;安全性需求;用户界面需求;成本消耗需求;开发进度需求;资源使用需求;用户接口需求.
3.2 数据建模
在技术层次上,软件工程师是从数据建模开始的,这是对被建立软件的完整的需求表示.模型,是软件的第一个技术表示,人们提出了许多种建模的方法,包括结构化分析方法和面向对象分析方法.
结构化分析方法侧重于对功能的分析,创建描述信息内容和信息流的模型,依据功能和行为对系统进行划分,并描述必须要建立的元素.通过建模必须做到:(1)描述客户的需求;(2)建立创建软件设计的基础;(3)定义在软件完成后可以被确认的一组需求.模型的核心是"数据字典",这个字典包括了软件使用或者生产的所有数据对象的描述;模型通过实体-关系图描述数据对象之间的关系,通过数据流图指明数据在系统中移动时变换的过程和对数据流进行变换的功能和子功能,通过状态-变迁图指明作为外部实现的结果以及系统进行的动作.
面向对象分析法采用面向对象的分析方法,侧重于对软件实体的描述,对软件涉及的功能实体进行分类并封装.面向对象分析法将实体的数据定义为实体属性,将对实体的操作定义为实体的方法,它代表了实体的一个行为.实体之间通过消息进行交互,通过消息来激发其它实体的功能.通过面向对象建模,软件应用中使用的所有实体被封装到不同的类里,同类的属性和方法体现实体的数据和行为.面向对象分析方法同结构化分析方法的区别在于,面向对象分析方法努力寻找需求定义中涉及的名词,而结构化分析方法则力图寻找需求定义中涉及的动词.
数据库应用中传统的建模方法是结构化分析方法,在数据库应用中,数据在软件中往往扮演十分重要的角色,因此数据库应用的建模势必影响到软件完成后的运行效率,需要十分重视.
3.3 功能设计
这里的功能设计是指详细的功能设计,在需求分析完成后,我们已经有了一个概要的功能描述,但是并不是软件开发中可以使用的功能设计文档,还需要对软件的功能进行更加详细的定义.
通过功能设计应得到如下成果:(1)每个软件功能的详细功能细分与描述;(2)模块的简要工作流程图;(3)详细的功能设计文档.
功能设计是由软件开发人员根据需求分析和建模结论进行的,在数据库应用里,功能设计尽可能详尽,而且有必要将软件的详细功能描述提交系统分析员或者客户确认,不允许有任何的功能误解.
3.4 选择数据库系统
数据库系统选择是狭义软件开发的第一步,选择数据库应用中存放数据的数据库系统.此时需要考虑以下因素:
应用的并发处理要求.应用是否存在多用或同时操作的可能 如果需要并发处理能力,我们往往需要选择大型的数据库服务器作为数据存放的仓库.在一般的桌面应用中,使用单用户的数据库系统就足够了.
应用的事务处理量.应该考虑每天,每小时,甚至每分钟的事务处理数量,在业务量大的情况下,应该选择稳定性比较强的数据库系统作为数据存放仓库.
应用的数据安全性.数据是否需要高度的安全保证,数据是否涉及商业的经济命脉 一般只有大型的数据库服务器才具有数据安全保证,比如在银行的数据库应用中,安全性是最重要的因素.
除此之外,数据库选择还要考虑开发的方便性,是否便于数据的访问,是否具有丰富的编程接口.
常见数据库管理系统:Access,FoxPro,SQL Server,Informix,Oracale,SYBASE,DB2等.
常见的程序开发工具环境有:Visual C++, Visual J++, Visual Foxpro, Visual Basic等(Visual Studio套件),JBuilder,Delphi,C++ Builder(Borland公司),.NET等
3.5 选择数据库访问技术
数据库访问技术是软件开发过程中经常用到的技术.开发数据库应用时,恰当选择访问数据库的技术是很必要的.数据库访问技术的确定与应用的规模,操作的层次,数据的分布能力以及选择的数据库系统等因素有关.
应用的规模可以分成桌面应用,办公室自动化应用,企业级应用和全球互联网应用四种.桌面应用是最简单,最初级的应用,通常利用Windows系统的Microsoft Access数据库就足够了,Microsoft Access数据库的最快捷方法是使用DAO.办公室自动化应用是一种基于小型局域网的数据库应用,这种应用往往是比较简单的客户/服务器模式,这时,ODBC是一个比较好的选择.企业级应用是一种基于客户/服务器模式的大规模的数据库应用,应用的事务处理量比较大,事务处理能力要求比较高,应该使用OLE DB进行这种开发.ADO是一种适用于互联网应用的数据库访问技术,它往往作为控件在VBScript语句或者ASP语句里使用.
操作的层次是指数据库应用是否涉及到了底层的接口,涉及到了多少.比如应用中需要用到数据库系统里的各种数据库对象的有关信息,需要用户进行一些数据库管理和权限管理,这时,ODBC和OLE DB能够提供这种接口.而MFC 的ODBC类,对底层的数据库操作是不能实现的.
数据的分布能力是指应用是否有数据分布处理的要求,大型的应用往往将数据分布到不同的数据库服务器上,为了实现数据的透明访问,ADO和OLE DB是值得采用的技术.
通常选择了数据库,就将数据库访问技术限制到一个小的选择范围.例如我们选择使用微软的SQL Server 2000数据库系统,这时我们只能通过ODBC或者通过DAO,OLE DB,ADO访问数据库,而不能采用DAO,DAO虽然也可以通过ODBC访问SQL Server,但是效率非常低下,通常很少会用到它.
但是问题并不是绝对的,本书介绍的任何一种数据库访问技术基本上都可以作为候选的数据库访问技术,选用数据库时,应该根据实际需要确定.
3.6代码设计
编码阶段的主要任务,是将软件详细设计产生的每个模块的模块说明书,翻译成某种程序设计语言编写的源程序程序.
为了提高系统的可维护性,除要求得到的源程序语法正确外,还要求有较好的可读性,可靠性和可测试性.同时,编程语言的特性以及编写程序的风格也将深刻地影响到软件的质量及可维护性.
这个阶段是实际的代码编写阶段,根据功能的详细设计文档,将所有各模块付诸实施.我们往往把界面设计也作为代码设计的一个内容,因为只不过是目前许多可视化开发工具(如:VC++,VF,VB等)提供了可视化的编程环境,实际上也是由可视化开发工具代替我们编写界面代码.但是更多的功能代码是需要我们自行设计的.
代码设计可以分成自顶向下和自底向上两种方法,前者比较容易把握软件的框架结构,而后者则有利于代码的重用,各有利弊,实际开发时需要结合二者优势,在不同情况下采取不同的策略.
自顶向下,逐步求精方法的优点:(1)自顶向下,逐步求精方法符合人们解决复杂问题的普遍规律.可提高软件开发的成功率和生产率;(2)用先全局后局部,先整体后细节,先抽象后具体的逐步求精的过程开发出来的程序具有清晰的层次结构,因此程序容易阅读和理解;(3)程序自顶向下,逐步细化,分解成一个树形结构.(4)程序清晰和模块化,使得在修改和重新设计一个软件时,可复用的代码量最大.
目前编程的概念已发生了很大的变化.面向服务的架构(SOA)已经成为软件企业追捧的新技术,它从架构上解决了应用系统的可扩展性,使得IT企业开发出的软件产品可以适应客户不断变化的商业需求.从面向对象编程,到组件化编程,再发展到SOA,可以看到现在的软件开发不同于10年前,不再是精通一门编程语言就可以应对的,而需要综合应用各种知识,如组件化开发,分布式开发,网络编程,多线程编程,数据库访问等.
组件化开发(或者称为基于组件的开发)是目前应用软件开发中常用的开发方法.组件化开发借助于现代软件技术中的组件技术,利用了组件本身就是软件开发,部署,重用的基本模块这一特点,使开发过程更加高效经济,部署方式多样灵活,程序维护比以往更简单.
3.7 测试与调试
代码完成后,初始系统就基本构建起来了,但是距离发行还有很远的距离,为了保证软件的健壮性,稳定性,界面友好性,需要对软件进行测试.测试的结果往往批量提交给开发人员,由开发人员对软件进行调试和修正,以解决存在的问题.
软件测试是一个艰难的历程,也是保证软件质量的最后关卡,没有经过充分测试的软件是不能发行的.测试一般需要花费与开发相同甚至更长的时间,需要开发人员和测试人员配合进行.
为了发现程序中的错误而执行程序的过程称为测试.
一组用于测试的数据称为测试用例(Test Case).
测试技术从原理上可分:黑箱技术(黑盒测试)和白箱技术(白盒测试).
黑箱技术(黑盒测试):把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程.黑盒测试是在程序接口进行的测试,他只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当的接收输入数据产生正确的输出信息,并且保持外部信息(数据库或文件)的完整性.所以又称功能测试.
白箱技术(白盒测试):以把程序看成装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程.这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作.所以又称为结构测试.
从处理上来划分,测试分为自动测试和手动测试;从测试的内容上分,测试分功能测试,稳定性测试,界面友好性测试.有些软件开发公司开发了计算机辅助测试软件,更加完整地控制测试的全面性和质量.
要求达到的测试目的:没有语法错误;运行应当有结果;典型用例结果正确;典型有效数据结果正确,无效数据有预防措施;对一切可能想得到的数据不出错.
排错(Debugging)调试,是消除程序中缺陷(Bug)的过程.步骤如下:
通过测试发现程序有错;找出出错的位置;分析出错原因并改正之;再测试消除找出的缺陷.
某些应用性强的软件行业在测试的时候将客户邀请到公司,对开发完成的产品进行用户验收,这也是一种测试手段,进一步保证了产品的质量.
3.8 发行产品
经过测试后的数据库应用就可以发行了,发行数据库应用同发行其它应用基本相同,需要打包处理,刻盘,生产,最后投放市场并提供给用户使用.
上述数据库应用开发中的各个阶段是不可缺少的,也是不可超越的,其中任何一步被忽视,都将导致不同程度的不良后果,建议读者在进行数据库开发时,一方面严格按照上述步骤进行,另一方面对各个步骤的具体内容进行灵活处理,力求高质量地完成各个步骤的任务,开发出高质量的数据库应用.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23251512/viewspace-628790/
,如需转载,请注明出处,否则将追究法律责任。