软件工程
软件是指令的序列,该指令序列由一种或多种程序语言编写,它能使计算机应用于某些事物的运用自动化。工程是在问题求解中工具和技术的使用。将这两个词合并起来,软件工程是把工具和技术系统地用于计算机应用的开发。
软件工程过程描述了开发系统所需要的步骤。当我们着手开发一个项目时需有这样的概念:有一个要通过自动化解决的问题。过程是如何从识别问题到解决问题。一个质量过程是值得想望的,因为它有可能产生出高质量的产品。在一个应用开发的生命周期中,后面跟有项目组的过程 是有序的、面向目标的、友好的,并且具有学习经验的。
其中,最为重要的是面向对象方法学,它是指系统生命周期开发的一种方法,它包括自顶向下数据对象的观点,允许动作和基本通信需求,以此可定义一个系统的体系结构。将数据及动作部分封装在一起,也就是将它们组合在一起形成抽象数据类型。封装的意思是,如果我们知道需要什么数据,我就会知道对应于这些数据的相应过程。数据被设计成满足格的层次关系,以确保自顶向下,层次、非层次、横向关系等均可适应。对象封装仅受到与消息有关的通信限制。在最小消息中标记着接受者和动作需求。消息也可以更加复杂一些,包括发送者及被处理的数据。
我们试图把工程学科应用于软件开发上去并不意味着我们能够回答如何去建立应用。相反我们仍在建立没有用处和根本不用的系统。在应用开发中继续存在问题的部分原因是我们经常试图瞄准一个正在移动着的目标。技术和事物需要的应用类型在不断地改变而且愈来愈复杂。我们开发和传播知识,如何去成功地为新技术和新应用类型建立系统的能力,还远远落后于技术和事物的变化。
在应用开发中继续出现问题的另一个原因是,我们并不总被允许可以任意行事,不用老的方法做这些事情,改变习惯和文化是很难的,同样要保证用户很快接受新的事件的顺序或不熟悉的文件格式也很不容易。
你或许会问若很多组织机构都没有使用软件工程的良好习惯,那么为什么我们还要去学习它呢?对这个问题有两条的答案:第一,如果你永远不知道怎样做才算正确,你就不会有机会去使用它。第二,组织机构经常接受小步骤改变的进展,而不是变革性的重大改变。你可以学习能够应用单项技术,而无需局限于某种系统开发的方法。这样,软件工程师们就可以通过展示工具和技术如何提高产品质量和系统的过程来加速机构的变化。
数据库系统
1、介绍
在20世纪70年代后期综合数据库的发展是最重要的数据处理活动之一。数据越来越被视为一种重要的综合资源,它必须被组织以扩大他们的价值。另外,在组织内的数据库,对数据库服务将有大量的新要求,就是收集、组织和出售数据。
计算机使用数据文件正以令人难以置信的速度增长。计算机存贮量大小的增长速度比爆炸式的数据处理工业中的任何其它元件在规模或能量上的增长速度大得多。计算机存取的数据越多,它们的潜能就越大,在所有社会生活及工业范围中,数据库将改变人们可能做到的领域,在本世纪末,历史学家回过来将把计算机数据库和其有关的设备的出现,作为改变社会发展的自然规律的步骤,或许比起印刷业的发明来,会对人类环境产生更大的影响。
某些使人印象深刻的成长历程很大程度上归因于所需信息的爆长。
这些信息的绝大多灵数尚未计算机化,然而,储存数据的硬件的花费比数据处理的其它花费更迅速地下降。而且数据储存在计算机文件上比储存在纸上更便宜,储存不仅仅是打印信息。计算机工业正在改进储存绘图、传真表格中的数据、照片、人类语言等等的能力。事实上,除了人类之间私下交流的信息以外,任何信息形式均可以数字化地传输和储存。
在不久的将来,两种主要的技术有希望变得实用,首先,有一种电磁设备将比磁盘存贮更多的数据,但存取时间长;第二,有一种固态技术将给出微秒级存取时间,但容量比磁盘小。磁盘本身在某些能力上可能提高,在未来的一段长时期内,将有大量的目前还在研究室中服务的新技术代替磁盘,并可能提供更快的微秒级存取时间的设备,新储存设备的发展趋势稳定,因此很有希望在下一个五年中上市,并迅速地降低储存数据的成本。
若给出可用的技术,将很有希望在联机数据库使用两级或三级储存,一种是微秒级存取时间的固态技术,一种存取时间为几分之一秒的电磁机,一种是机电式,存时间是在几秒钟内,如果,两或三、四种层次的储存被使用,物理储存结构将变得更复杂,或许在层次之间用呼叫联络设备移动数据,固态储存提供并行查询操作和相联存储器的可能性。
数据储存的数量和它们结构的复杂性很迅速地增长,首次具有百万兆的联机储存正在使用。近几年内,这种规模的存贮将变得很普通。
在数据库设计中尤其要着重考虑的是储存数据,以便它们可以应用在很广泛的应用领域,而且在使用上可以很快的且容易地修改,在先于数据库时代的计算机站时期,改变数据的使用方法是非常困难的。
不同的程序设计者按不同方法看等数据,当需要变动时就想修改数据,同时也对现存程序进行一系列的改动,因此完成一次变动的代价是非常昂贵的。结果,数据处理越来越被冻结在原来的数据结构上。
为了完成数据使用的灵活性,这种灵活性在大多数商业领域中是必要的。数据库设计的两个方面是重要的。首先,不必用常规语言新闻与冗长的程序就可以查询数据库。其次,数据应独立于使用它们的程序,以便可以不用改变程序就增加数据或重新组织数据。
设计数据库的工作正变得日益困难,如果想用最理想的方式执行则更困难。数据在组织上有许多不同的方法,许多不同类型的数据必须按不同方法组织,不同的数据有不同的特性,它们应该影响数据组织,不同的用户有基本不同的需要,所以需要一种数据库管理系统来管理数据。
使用实体——关系模型所设计的数据库,其开始于所包含的实体类型和它们之间的关系的一张表,假定设计者一开始就懂得实体类型的原理是基于常规途径的方法的原理明显不同的。
实体——关系(E—R)方法使用实体——关系图。E—R方法生成一个结构需要几步,这种结构是能够被特别的数据库管理系统所接受的。这些步骤是:
(1)数据分析;
(2)生成和优化实体模型;
(3)逻辑模式的设计;
(4)物理数据库设计过程。
以用户的需要来设计数据库结构叫做数据库的设计,大多数实践者同意在数据库设计过程中有两个独立的阶段。逻辑的数据库结构的设计是由数据库管理系统处理的。它描述了用户的数据观点,和一个物理结构的选择,诸如顺序索引,或直接存取等数据库管理系统的方法。
现在的数据库设计技术受到单记录文件设计方法的影响,文件设计是最初的独立应用程序,因为数据在个人应用它们的阶段已经被定义和组织。数据库管理系统的出现改变了数据和程序设计方法上的重点。
在数据库系统的设计中有许多连锁问题,许多类技术可以被用在回答这些问题上。事实上,经常可以看到有价值的方法在设计中没被重视,而主要的问题没有被询问。
不久将有新的储存设备,新的软件技术,新类型的数据库,细节可能发生改变,但大多数原理将保留,所以读者应当注意原理。
2、数据库系统
用于描述文件和数据库的概念在相同结构中有各种各样的实质的区别。
一个数据库可以被定义成一个相互联系数据储存的集合,这个集合有很小的冗余,尽可能地为一个或多个应用程序在最理想的方式下服务。储存数据的目的是使它们与用数据的程序独立,一种相同的控制方法用在数据库内增加新数据、修改和恢复已存在的数据。如果一个系统在结构上完全分离,则它们被称为包含一个数据库集合。
一个数据库可以设计为批处理、实时处理或联机数据处理,一个数据库系统包括应用程序,数据库管理系统和数据库。
大多数数据库的最主要的特点之一是它们需要不断地更新和增加。当新数据类型和应用被增加时,数据库的简单重构必须是可能的,重组织应当不用重新写应用程序,总体上应该尽可能是小的变化,这种不费力的改变数据库将在数据处理的速度上产生很大的影响。
数据独立这个术语经常提出作为一个数据库主要属性之一,它是指数据和使用数据的应用程序互相独立,目的是改变一项时不用改变另一项。当一个单一的数据项集合服务于不同的应用时,不同的应用程序感知数据项之间不同的关系。对于一个大的范围,数据库组织与数据项与记录之间的关系说明有联系,也和数据是怎样存贮的和存在哪里有关,被用于许多应用中的数据库在数据之间有多种内在联系。们所存信息的项是一个实体,一个实体可以是一个实在的物理或抽象的事物。它有我们希望记录的种性质,它能描述一个真实世界。数据项代表一个属性,该属性与有关的实体联合。我们将属性设计成值,一个属性有一种特殊意义,据此而定义一个实体。
计算机所用的识别一个记录或一个元组的一个属性或一组属性,叫做关键字。主关键字被定义为能唯一地确定一个记录或一个元组的关键字,一个实体识别符包括一个或多个属性。主关键字是很重要的,因为它被用在计算机中通过一个索引和寻址算法来找出一个记录或一个元组。
如果数据库的作用仅仅是储存数据,那它的结构将是简单的,大多数复杂性起因于数据库必须表现所储存的各种各样数据项之间的关系。在逻辑上或物理上描述数据是不同的。
逻辑数据库的描述叫做一个模式。
一个模式是一个所用数据类型的图表,它给出实体的名称、属性和它们之间的特殊关系,它是一个合适的保存数据项值的框架。
我们必须区别一个记录类型和一个记录的事例,当我们谈论到全体人员的记录时,这是一个真正的记录类型,而不是与它相结合的数值。
一个模型用于描述数据库中的所有储存在数据库中的数据项类型和记录类型的总体图表,子模式项指的是一个应用程序员观点下的数据,许多不同的模式可以从一个模式中得到。
模式和子模式是由数据库管理系统使用的,数据库管理系统的主要作用是由执行数据操作时服务于应用程序。
一个数据库管理系统通常是用于同时处理多个数据调用,它必须组织系统缓冲使不同的数据操作能够一起处理,它提供一种数据定义语言以指定概念模式,很可能还包括用物理模式实现概念模式的一些细节,数据定义语言是一种高级语言,能够让你描述概念模型,术语为数据模型。
数据模型的选择是很困难的,因为它必须有丰富的足够结构以描述真实世界的有意义的各个方面,并且必须通过物理模式有能力去自动决定概念模式的实现,必须强调,当一个数据库管理系统用于建立一个小数据库时,大多灵敏数据库将包含了上万字节,所以无效的执行可能是灾难性的。
下面我们将讨论数据模型。
3三种数据模型
逻辑模式被定义为数据模式,带有附加在其上的特别的数据库管理系统的基本结构,目前,数据库管理系统有三种主要的基本结构,它们是:
关系结构
层次结构
网络结构
层次型和网络型结构从20世纪60年代起已经应用于DBMS中,关系模型在20世纪70年代早期开始有所介绍。
在关系模型中,实体和它们的关系用二维表格表示,每一个表格代表一个实体,其由行和列组成,实体之间的关系由通过具有相同值的公共列建立起来,取值是有一定范围的。
最终用户被提供一个简单数据模型,他或她的需求由信息内容的描述而明确地表达,不用表示面向系统的各方面复杂的情况,关系数据模型是用户所看到的,但不必知道物理上的实现。
关系数据模型在用户界面上排除了存贮结构和存取策略的细节,模型提供了一种高层次的数据关系,然而为了正确地使用关系数据模型,关系的设计必须是完备的和正确的。
尽管一些基于关系数据模型的数据库管理系统今天已商业化地应用,但它很难在大规模范围内按需求的目标提供一套完整的操作能力,今天在提供快速且更稳定的硬件方面的技术改进已有可能真正回答这个问题。
层次型数据模型是基于树型结构的,由结点和树枝组成,一个结点是描述此点上实体属性的数据集合。
层次树结构的最顶层结点叫根结点,下层的各个结点叫子结点。
层次型数据结构模型总是从根结点开始,每个结点包括描述此结点的一个或多个属性,相关结点可以在下一层上。上层的结点变成新的相关结点的父结点,一个父结点可有一个相关子结点或多个子结点,层次数据模型的主要优点是用层次数据模型作为基本结构检查数据库管理系统的存在,数据依赖减少了,但任何子结点仅仅通过父结点才能存取,许多许多的关系只能用笨拙的方法实现,这常常引起存贮数据的冗余。
网状数据模型将企业的实体连结到网络中。在网状数据模型中,一个数据库包括大量区域,一个区域包括一些记录,而一个记录可以包含字段,一个集合是一个记录群,可以在一个区域中,或跨跃一些区域,一个集合类型基于所有者的记录类型和成员记录类型,许多许多在真实生活中发生得很频繁的关系,可以很容易地实现,网状数据模型是很复杂的,应用程序员必须很熟悉数据库的逻辑结构。
4逻辑设计和物理设计
数据库的逻辑设计主要是与附加在逻辑数据模型上的数据库管理系统的建立相联系的,有三种主要的模型:层次型、关系型、网络型,我们在上面已经提到。
物理模型是储存在物理设备上的数据库的框架,该模型的建立必须考虑到实际数据库运行时的每种情况,我们应该用数据元素聚群出现的平均频率,用所希望的为恢复和保存数据的估计空间和时间来完成对物理模型的分析。
数据库设计者将发现,一个数据库具有多重输入点,或用不止一个关键字存取一个特殊段类型是必须的。为了提供存取的这种类型,必须在关键字上转换这些段,物理设计者必须有数据库管理系统功能的专业知识,懂得直接存取设备的特性以及应用的知识。
许多数据库在一个记录和另一个记录之间有联系,称为指针,指针是在一记录上的一个域,其指向定位在存贮设备上的第二个记录。
存在存储设备上的记录是给定的一个物理序列,该序列可以实现某些目的。最常用的目的是某种数据处理操作在给定的序列中需要一些记录,同样按那种顺序存贮。不同的应用程序需要不同顺序的记录。
记录排序最通用的方法是通过一个关键字使它们有序,该关键字常用来查询它们,一个索引可以使你不用对文件进行冗长的搜索即可找到某记录。
如果数据记录通过关键字按某顺序排列,那个关键字的索引将比它们没排序要小的多。
在20世纪50年代中期,杂凑法一产生就用于寻找随意存取的存贮内容,但直到1968年,才有人卤莽地使用“杂凑”这个词。
许多系统的分析已经避免使用杂凑法,怀疑它是复杂的。事实上,它用起来很简单,比索引有两个重要的优点,首先,它用一个查询可以找到多个记录,第二,不用增加复杂性可以处理插入和删除。然而,索引是通过一个主关键字用在顺序文件中,对于批处理应用中这是一个基本的优点。
许多数据库系统也使用链去连接记录,一个链指的是在一个文件内分散的一组记录,通过指针顺序联系起来,用来恢复链上的记录的软件将作为一个邻接的逻辑文件使得它们呈现于应用程序员面前。
链记录的主要缺点是需要许多读操作以便跟踪冗长的链。有时没关系,因为无论如何记录必须被读取,然而在大多数查询操作中,用于跟踪链的记录本不必读取,在某些文件组织上,链可以包括块物理记录,使得过多的读操作不再发生。
环也在许多文件组织上应用,它们被用于消除冗余,当一个环或链进入到距其头有一定距离的某点上时,快速地获得链头信息,而不用一步步通过所有的中间点,那将是很诱人的。
5数据描述语言
对于程序员和数据管理员来说,能够准确地描述数据是必要的,他们通过数据描述语言来做这些。数据描述语言是使用数据结构的数据库管理系统的说明手段。
给出逻辑数据描述的数据描述语言将具有下述功能:
它应当给每个数据项类型、文件类型、数据库和其它的数据子项以唯一的名子。
它应当确定出如数据项、段、记录和数据库文件等数据子项的类型。
它可以定义出程序在数据项中使用的编码类型(二进制、字符、位串等)
它可以定义数据项的长度和数据项假定值的范围。
它可以规定一个文件中记录的顺序或一个数据库中记录组的顺序
它可以规定数据中检查错误的手段。
它可以规定保密锁以防止权限外的读或修改数据的操作。这些可以在数据项、段 、记录、文件或数据库一级上操作,且如果必要的话,可延伸到个别的数据值。另一方面,权限可以分开定义,权限的修改比数据结构的修改更受限制。在权限上的改变不要影响应用程序。
一个逻辑数据描述不应确定寻址、索引或查询技术,或规定数据的数据存贮单元的位置,因为这些内容是物理范畴而不是逻辑组织。它可以给出数据怎样使用的或查询需要的描述,这样物理技术可以很理想地选择,但这样的描述不应是逻辑受限的。
大多数DBMS有自己的语言一描述使用的模式。大多数情况下,这样数据描述语言与其它程序员语言有所不同,因为其它程序员语言没有能力定义存在于模式中的各种各样的关系。