如今,数据库技术可帮助人们处理各种各样的信息数据,数据库已经成为信息管理、办公自动化、计算机辅助设计等应用系统的基础和核心部件。我们把这些以数据库为基础的应用系统称为数据库应用系统。在进行数据库应用系统开发时,如何做到低成本、高效率?这个问题属于软件工程的范畴。因此,我们要设计与实现一个数据库应用系统,必须要了解和遵循软件工程的基本原则、步骤和方法。
本部分将首先简单介绍软件工程的概念,再结合数据库的特点,介绍数据库应用系统开发的基本步骤。
1.软件工程的概念
在电子计算机诞生之初,根本没有软件的概念,人们通过输入机器码指令驱动计算机硬件工作,就像现在我们用洗衣机等家用电器时要调节按钮一样。直到1947年,现代电子计算机之父——John von Neumann提出用流程图描述计算机的运行过程,人们才认识到程序设计是完全不同于硬件研制的另一项工作。从此以后,软件的开发和研究才开始独立进行。在这一时期,计算机硬件价格非常昂贵,计算机存储容量小,软件作为硬件的附属,往往是个人为了解决某个科学计算问题而定制的,软件规模较小。
到了20世纪60年代,计算机硬件得到了快速的发展,计算机的存储容量及计算速度得到了很大的提升,计算机不再局限于科学计算用途。随着计算机应用范围的迅速扩大,软件开发需求急剧增长。高级语言、操作系统的出现与发展,引起了计算机应用方式的变化;大量数据处理的需求推动了第一代数据库管理系统的诞生。由于软件的规模越来越大,复杂程度越来越高,个体已经不能独自胜任一个软件的开发,需要团队分工合作完成软件开发任务。
随着计算机硬件的不断发展,计算机应用领域的进一步扩大,软件的规模不断增加,软件复杂度不断提高,软件质量及可靠性问题越发突出。一方面,软件需求方希望软件开发的时间短、成本低,另一方面,计算机软件开发人员缺乏科学的指导和系统的训练,无法对软件开发进行良好的预估和规划,因此开发过程混乱,存在大量重复劳动,开发进度缓慢,浪费资源,且产出的软件质量低下,“软件危机”开始爆发。
1968年秋季,北大西洋公约组织的科技委员会召集了近50名专家,包括一流的编程人员、计算机科学家和工业界巨头在联邦德国召开国际会议,讨论和制订摆脱“软件危机”的对策,并正式提出了软件工程(Software Engineering)这个概念,这标志着一个新兴的工程学科的诞生。
软件工程是应用计算机科学、数学、工程学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的原则和方法,以提高质量、降低成本和改进算法。其中,计算机科学、数学用于构建模型与算法,工程科学用于制订规范、设计范型、评估成本及权衡,管理科学用于计划、资源、质量、成本等管理。如今,软件工程已成为一门研究用工程化方法构建和维护有效、实用和高质量软件的学科,是指导计算机软件开发和维护的工程学科。
软件工程采用“分而治之,逐个击破”的策略,根据开发软件的规模和复杂程度,从时间上分解软件开发的整个过程,形成几个相对独立的阶段,并对每个阶段的目标、任务、方法做出规定,然后按照规定顺序依次完成各阶段的任务,还要规定一套标准的文档作为各个阶段的开发成果,最后生产出高质量的软件。这就是软件的生存周期(也称生命周期),一般可包括项目规划、需求分析、概要设计、详细设计、编码、测试、运行与维护等阶段。
在软件的生存周期中,每一个阶段有相对独立的任务,便于不同人员分工协作,从而降低整个软件开发工程的难度。软件开发团队在每一个阶段都要撰写与该阶段任务相关的符合标准的文档,将文档作为该阶段任务完成交付的标志和展开下一阶段任务的工作基础。由于在软件生存周期的每一个阶段都采用科学的方法进行管理,而且对每个阶段的成果都进行严格的审查,只有验收合格才能展开下一阶段的工作,因此软件开发的全过程得以有条不紊地进行,它们既保证了软件的质量和可靠性,也提高了软件开发效率,降低了开发成本。
2.数据库应用系统开发的基本步骤
软件可以分为两大类:应用软件和系统软件。应用软件是为了满足特定应用领域各种应用需求的专用软件,如文档编辑器、音乐播放器、浏览器等。系统软件是用于控制和协调计算机以及外部设备,支持应用软件开发与运行的软件,如操作系统、编译器、数据库管理系统等。数据库应用系统是以数据库为核心和基础,在数据库管理系统支持下建立的计算机应用系统,如人事管理系统、财务管理系统、图书管理系统等,属于应用软件的范畴。
无论是系统软件还是应用软件,其开发过程都应该遵循软件工程学科定义的规范和标准。基于软件工程的基本思想,结合数据库的特点,数据库应用系统开发的基本步骤总结如下:
(1)项目规划
项目规划阶段的主要任务包括:对项目开展的必要性进行论证,确定值得投入财力、人力去解决的问题(即为什么做);对项目进行可行性分析(即是否可以做),如项目开展的必要性,以及在当前的法律(项目开发和开发成果投入使用是否合法)、技术(技术条件能否支持项目实现)、经济(经济条件能否支持项目实现)、使用(用户使用是否存在困难)等方面的可行性。完成上述任务后,就可以制订开发实施计划了。
项目规划阶段具体要完成的工作包括:
1)明确项目要解决的问题和项目目标,收集整理相关资料,明确数据库应用系统的系统定位、规模大小、用户范围等。
2)明确数据库应用系统的基本功能和数据来源,分析数据结构的特点,估算数据量的大小。
3)估计项目开发需要的计算机硬件资源、软件开发工具和应用软件包、开发人员数目及层次,并对项目开发、运行和维护等成本费用做出估算。
4)制订项目开发任务的实施计划,拟定各阶段要达成的目标及时间节点。
根据项目规划阶段要完成的任务,撰写项目规划文档,其内容应包括必要性和可行性分析、系统定位及功能、数据来源及系统的数据处理能力、项目所需资源、人力资源配置、开发成本估算、项目开发进度计划等。
项目规划文档经过专家评估审核并通过之后,就可以开展下一阶段的工作了。
(2)需求分析
需求分析阶段的主要任务是分析系统需要实现哪些功能。需求分析的目标是分析和整理用户对软件提出的要求或需求,确认后形成描述完整、清晰且规范的文档。需求分析的内容具体分为功能性需求、非功能性需求和设计约束三个方面。功能性需求即软件必须实现哪些功能,以及为了向用户提供有用的功能所需执行的动作。功能性需求是软件需求的主体。非功能性需求主要包括在软件使用时对性能方面的要求和对运行环境的要求,是功能性需求的补充。设计约束也称为设计限制条件,通常是对一些设计或实现方案的约束说明。
在需求分析阶段,系统分析员和用户密切配合,充分交流各自的看法和观点,充分理解用户的业务流程,完整并全面地收集、分析用户业务中的信息和处理过程,从中分析出用户要求的功能和性能,并以书面形式完整和准确地表达出来,最终形成软件需求说明书。
专家对软件需求说明书中系统功能的正确性、完整性、清晰性以及其他需求评审通过后,才可以进行下一阶段的工作,否则需要重新进行需求分析。
(3)概念模型设计
概念模型用于信息世界的建模,它与具体的计算机系统无关,纯粹反映信息需求的概念结构。概念模型设计就是把现实世界中的具体事物抽象为一种信息结构,既是现实世界到信息世界的第一层抽象,也是用户与数据库设计人员之间进行交流的语言。
在进行概念模型设计时,数据库设计人员应该站在用户的角度看待数据处理的需求,并使用具有较强语义表达能力的、简单且清晰的概念模型工具,通常是E-R图(实体-联系图)对用户所需处理的数据以及数据间的关联进行抽象描述,这种描述不涉及具体实现的技术细节,也不需要考虑计算机软硬件等因素。
概念模型设计阶段的成果是概念模型说明书。对于概念模型设计,一方面,可由用户评审,确认模型能否准确反映出用户的需求,能否准确表达现实世界中事物和事物之间的关联;另一方面,可由项目负责人、专家、开发人员等评审,从技术层面讨论并确认模型的完整性和结构的合理性。
(4)逻辑模型设计
逻辑模型是指数据的逻辑结构。逻辑模型设计的目标是把概念模型转换为具体某种数据库管理系统所支持的结构数据模型。逻辑模型是真正能在计算机中实现的模型,它是面向数据库管理系统开发的,主要用于数据库管理系统的实现。它包括三个部分:数据结构、数据操作和完整性约束。数据结构描述的是计算机数据组织方式和数据间联系的框架,是对系统的静态描述,解决数据和数据之间的联系如何表达和实现等问题。数据操作是指对数据库中各种对象的实例或取值所允许执行操作的集合,其中包括操作方法及有关规则,它是对数据库动态特性的描述,解决数据库检索和更新如何实现等问题。完整性约束描述数据和数据之间的联系应该具有的制约和依赖规则,从而保证数据库中的数据是与事实相符的。
在进行逻辑模型设计时,需要先选定一种逻辑模型类型。常见的逻辑模型有层次模型、网状模型和关系模型。它们的主要区别在于数据结构不同,即数据间联系的表达方式不同。目前,关系模型在数据库系统产品市场上占据主导地位。例如使用关系模型来描述数据库的逻辑结构,由数据库设计人员将概念模型中所描述的数据和数据之间的联系转化为关系模式,并采用关系规范化理论对这些关系模式进行优化,最终撰写出数据库逻辑结构说明书。在设计好概念模型后,还需要结合应用需求,规划应用程序的架构,制订每个应用程序的数据存取功能和逻辑接口;同时,整理物理模型设计阶段所需要的一些重要数据和文档,如数据库的数据容量、系统的相应速度、程序的访问路径建议等。
(5)物理模型设计
物理模型是面向计算机系统的,主要用于选择逻辑模型数据与联系在计算机内部的表示方式和存取方法,是计算机中数据存储和管理的基础。物理模型设计是为上一阶段得到的逻辑模型配置一个最适合应用环境的物理结构。
物理模型设计的步骤如下:
1)综合分析数据存储要求和应用需求,设计存储记录结构。
2)以提高系统性能为原则,分配存储空间。
3)根据应用需求,设计对存储结构的访问方法。
在物理模型设计的过程中,需要评价系统的时间、空间、效率、开销等性能,并反复修改和优化模型设计,直至得到较优的方案,保证数据库系统可以高效率地运行。物理模型设计阶段需要撰写数据库物理结构说明书,其内容包括数据库物理结构、存储记录格式、存储记录位置分配及访问方法等。逻辑模型转换为物理模型可由数据库管理系统完成。
(6)编码
编码就是把每个模块的控制结构转换成计算机可接受的程序代码,即写成以某特定程序设计语言表示的“源程序”。在完成数据库的逻辑模型设计之后,应用程序的编写可以和物理模型设计并行展开。在这一阶段,由程序设计人员根据逻辑模型设计的方案规划应用程序的架构和数据存取需求,并编写应用程序源代码。
在编码阶段,可以直接使用数据库管理系统提供的语言,实现对数据库中数据的定义、更新、检索和控制。为了便于不具备计算机专业知识的一般用户使用数据库应用系统,程序设计人员可使用高级程序语言如Python、C++等实现对数据库的链接与访问,并为用户构建友好的图形用户界面。
(7)测试
测试是保证软件质量的重要手段,其主要方式是在设计测试用例的基础上,检验软件的各个组成部分。测试分为模块测试、组装测试、确认测试。模块测试旨在查找各模块在功能和结构上存在的问题。组装测试是将各模块按一定顺序组装起来进行的测试,旨在查找各模块之间接口存在的问题。确认测试按说明书上的功能逐项进行,以发现不满足用户需求的问题,从而决定开发的软件是否合格、能否交付用户使用等。
为了进行程序代码的测试,需要先根据逻辑模型设计和物理模型设计的结果,建立数据库结构,并输入实验数据;设计测试用例,模拟系统实际运行时可能出现的各种情况,测试所有应用程序的功能,记录测试结果并作为程序优化的依据。
在数据库正式交付使用之前,需要制定故障恢复规范和系统安全规范,包括系统出现故障时应采取的恢复措施、为不同用户授予不同的权限和制定相应的约束规则。
(8)运行与维护
数据库正式投入运行后,就进入了维护阶段。软件维护是软件生存周期中持续时间最长的阶段。它可以持续几年甚至几十年。软件在运行过程中,可能由于各方面的原因而需要修改,如运行中发现了软件隐含的错误、为了适应发生变化的软件工程环境、由于用户业务发生变化而需要扩充和增强软件的功能等。在运行与维护阶段,需按照前一阶段制定的故障恢复规范来应对系统运行时出现的错误;根据系统安全规范和用户变化,调整用户权限,维护数据库的安全性和完整性。日常运行时,系统性能由数据库管理员监控,必要时还可扩充原有系统功能。
3.教务管理系统设计实例
本书将以一个简单的教务管理系统的设计与实现为例,令读者对数据库应用系统的设计与实现过程和步骤有一个整体的了解。实际上,一个完善的教务管理系统具有非常多的功能,为了让读者能在最短时间内熟悉并掌握开发技巧,此例紧紧围绕某几个功能的实现来介绍。读者在掌握了相关知识之后,可以举一反三,触类旁通,实现功能更强大的数据库应用系统的设计与开发。
(1)用户需求
为了方便学生选课和查看成绩,以及教师录入成绩和对成绩进行统计分析,拟开发一个教务管理系统。经过调研与分析可知,每位学生可以选择多门课程,每门课程可由多名学生选修;每位教师可以讲授多门课程,每门课程也可由多位教师讲授;此外,学生学习课程会产生成绩这一重要信息,教师授课的时间和地点也需要记录下来。因此,可以确定教务管理系统需要管理以下信息:
1)学生的基本信息,包括学号、身份证号、姓名、性别、班级、生日等。
2)教师的基本信息,包括工号、身份证号、姓名、性别、生日、学院等。
3)课程的基本信息,包括课程号、课程名、学时、学分等。
4)学生修课的成绩(百分制)。
5)教师授课的时间和地点。
教务管理系统的用户包括管理员(教务员)、教师和学生三种。用户对系统的功能需求描述如下:
1)管理员能增加、删除、修改教师信息、学生信息和课程信息,能录入学生选课信息与教师授课信息。
2)教师能增加、删除、修改和查询所教课程的学生成绩,并可以查看不及格学生及成绩、未考试学生信息,以及统计各分数段的学生成绩。
3)学生能查看自己所选课程的信息及成绩。
(2)系统的功能结构
为了满足上述用户需求,教务管理系统应该包含以下四个模块,如图1.14所示:
图1.14 教务管理系统的功能结构
1)用户登录模块。数据库应用系统是面向多用户的,为了保证系统数据的安全性,必须要设置一个用户登录模块,通过用户输入的账号和密码验证该用户是否具有合法的访问权限。此外,还需要区分合法用户的类型(管理员、教师和学生),针对不同类型的用户,展示出不同的交互信息,并开放不同的数据访问权限。
用户登录模块包含以下两个子模块:
①用户登录信息维护:用户能够修改自己登录系统的密码。
②用户权限验证:通过用户输入的用户名和密码确定用户的合法性以及操作权限。
2)教务基本信息管理模块。教务基本信息管理模块包括以下六个子模块:
①学生基本信息管理:实现对学生基本信息的增加、删除和修改操作。
②教师基本信息管理:实现对教师基本信息的增加、删除和修改操作。
③课程基本信息管理:实现对课程基本信息的增加、删除和修改操作。
④选课基本信息管理:实现学生选课信息(包括学号、课程号)的录入与更新操作。
⑤授课基本信息管理:实现教师授课信息(包括工号、课程号、时间、地点)的录入与更新操作。
⑥用户权限信息管理:实现用户登录系统的账号、密码及用户类型(访问权限)的录入与更新操作。
3)授课成绩管理模块。授课成绩管理模块包含以下两个子模块:
①授课成绩维护:实现对学生选课成绩的录入与修改。
②授课成绩查询与统计:查询所教课程的学生成绩;查看不及格学生及成绩;查询未考试学生信息;统计各分数段的学生成绩。
4)学生选课信息查询模块。学生选课信息查询模块包含以下两个子模块:
①选课成绩查询:学生实现对自己所选课程成绩的查询。
②选课信息查询:学生实现对自己所选课程基本信息、任课老师、上课时间与地点等的查询。
3~4位同学组成一个课程设计小组,并推举出一位同学担任组长。小组讨论并选定一个拟采用数据库技术解决的问题,拟定课程设计题目,并撰写数据库应用系统开发说明书。数据库应用系统开发说明书包括以下内容:课程设计的问题描述、项目规划、需求分析与系统的功能结构。