首页 百科知识 信息系统的实施

信息系统的实施

时间:2022-06-22 百科知识 版权反馈
【摘要】:第二节 信息系统的实施系统实施是将系统设计阶段的结果在计算机上实现的过程,就是将纸面上的、类似于设计图式的新系统方案转换成可执行的应用软件系统。所以数据库系统是整个系统数据传递和交换的枢纽,对信息系统而言是至关重要的基础。

第二节 信息系统的实施

系统实施是将系统设计阶段的结果在计算机上实现的过程,就是将纸面上的、类似于设计图式的新系统方案转换成可执行的应用软件系统。

因此,信息系统的实施主要任务是:

●按总体设计方案购置和安装计算机网络系统。

●建立数据库系统。

●编程与调试。

●整理基础数据,让新系统试运行。

在这些任务中,除了第一、第二项所耗费的人力、时间比较少以外,其余的工作都是比较大的任务。

一、程序设计

编程的目的是为了实现开发者在系统设计中所提出的管理方法和处理构想,编程不是系统开发的目的。在编程和实现中,建议尽量借用已有的程序和各种开发工具,尽快、尽好地实现系统,而不要在具体的编程和调试工具中花费过多的精力和时间。

1.程序设计方法

目前程序设计的方法大多是按照结构化方法、原型方法、面向对象的方法、利用现有软件工具的方法进行的。

(1)结构化程序设计方法。在有结构化程序设计的方法中,在其内部强调的是自顶向下地分析和设计,而在其外部则强调自底向上地实现整个系统。它是传统的程序设计的主流方法。

如果遇到某些开发过程不规范,模块划分不细,或是因特殊业务处理而需要模块程序设计工作量较大时,结构化程序设计方法仍是一种非常有效的方法。它主要强调3点:

●模块内部程序的各部分要自顶向下地结构化划分。

●各程序部分应按功能组合。

●各程序部分的联系尽量使用调子程序方式(CALL RETURN),不用或少用转向语句(GOTO)。

(2)速成原型式的程序开发方法。这种方法在程序设计阶段,就是将带有普遍性的功能模块集中,如菜单模块、报表模块、查询模块、图形模块等等,然后再去寻找有无相应、可用的软件工具。如果没有找到,则可考虑开发一个能够适合各子系统情况的通用模块。接着用这些工具生成这些程序模型的原型。对于一些特定的处理功能和模型,而且这些功能和模型又是现有工具不可能生成出来的,则再考虑编制一段程序加进去。利用现有的工具和原型方法可以很快地开发出所要的程序。

(3)面向对象程序设计方法。面向对象程序设计方法一般要与面向对象的分析OOA和面向对象的设计OOD过程相对应。这是一个简单、直接的映射过程,即将OOD中所定义的范式直接用面向对象程序OOP来取代就可以了。如用C++中的对象类型来取代OOD范式中的类对象,用C++中的函数和计算功能来取代OO式中的处理等。在系统实现阶段,OOP的优势是巨大的,是其他方法所无法比拟的。

(4)利用已有的工具或程序。利用现有的软件工具包括两个方面:

●尽量利用已有的软件工具,一是可以帮助尽快完成编程工作;二是减少了许多编程过程的麻烦;三是质量和功能都比自己编写的程序要好很多。

●充分利用本系统原有的程序或开发者能够借用的程序。例如,有好几个子系统都要用到某个功能类似的模块的情况时,尽量不要一个个去编写程序,最好的方法是去编一个较好的程序模块,拷贝几份后,改成本系统相应的特殊要求和调用子程序名即可。

2.常用的编程工具

目前在市场上可以供编程人员选择的编程工具相当多。在计算机的软件技术发展过程中,各种软件工具是发展最快的部分之一。在当今编程工具的发展趋势中,不仅在数量上突飞猛进,而且在功能上日新月异,可供程序设计人员的选择越来越多,同时各类编程工具的使用也越来越方便。所以,为了满足信息系统开发的要求,必须要了解各类编程工具的特点,选用适当的编程工具就成为系统开发的质量和效率的保证。

(1)常用的编程工具:在管理领域中比较常用的编程语言有:C,C++,COBOL,PL/1,PROLOG等等。由于这类编程语言提供的是程序设计全集的基本集合,因此没有很强的针对性,适用范围比较广,原则上任何功能模块都可以用这类编程语言来实现。正是由于它们适应范围广,因而也使程序设计人员在编程时的复杂程度增加,从而使程序设计的工作量变得较大。

此外,在一些综合性的系统开发工具中,如微机上运行的关系数据FoxPro的各种版本,就有以组合查询为基础的SQL(Structured Query Language);又如微软的Excel电子表格软件中有宏命令(Macro)程序语言等等。这类语言一般都是为了弥补具体工具的不足,模仿了程序语言的方式,在原系统的基础上提供一系列由用户自由处理特殊问题的命令集。

(2)数据库类:在信息系统中,各种数据信息就存放在数据库系统中。所以数据库系统是整个系统数据传递和交换的枢纽,对信息系统而言是至关重要的基础。目前数据库软件工具可以分成两大类,一类是在大型机上运行的数据库系统,另一类是在微机上运行的关系型数据库系统。

大型机上运行的是大型数据库系统,一般规模都比较大,功能也比较齐全,如Oracle,SYBASE,INGRES,INFORMAX等都是目前比较典型的系统。这类数据库比较适合大型综合类系统的开发。目前这类工具以方便用户开发和使用为其发展的主要趋势,具体表现主要为:一是在近期都推出了自己的微机版本;二是不少系统都在研究辅助的数据库操作和数据处理的工具,如SQL、SDK等;三是考虑到了与目前在微机上运行的关系型数据库如xBASE系统的接口问题。

目前在微机上运行的关系型数据库有Microsoft的ACCESS等。这种数据库系统以微机和关系数据库为基础,提供了一系列围绕数据库的各种操作、数据处理和程序设计的命令集。简单易学、方便实用是这类数据库的最大特点。

(3)程序生成工具类:程序生成工具也称为第四代程序生成语言4GL(4th Generation Language)。这是一种基于常用数据处理功能和程序之间对应关系的自动编程工具,如曾经较为流行的屏幕生成工具、报表生成工具、综合程序生成工具等等。目前这类工具的一个发展趋势就是以功能的大型综合化、生成程序模块语言的专一化为方向。

(4)系统开发工具类:系统开发工具是在程序生成工具的基础上进一步发展而来的,因此它不但具有4GL的功能和特点,同时更加综合化、图形化,给程序设计人员带来了更多的便利。目前这类工具主要有两类:专用开发工具类和综合开发工具类。

专用开发工具类,顾名思义,就是指对应用领域和待开发功能针对性都较强的一类系统开发工具,其显著的特点是针对性比较强,可以帮助用户开发出相对深入的信息处理模块。这一类工具主要有:专门用于开发查询模块用的SQL、专门用于开发数据处理模块用的SDK(Structured Development Kits)、专门用于人工智能和符号处理的Prolog、专门用于开发产生式规则知识处理系统的OPS(Operation Process System)等等。

综合开发工具类是针对开发一般应用系统和数据处理功能的一类工具,因此其特点就是可以最大限度地适用于一般应用系统的开发和生成。常见的有:FoxPro、VB(Visual BASIC)、Visual C++、CASE、Team Enterprise Developer等等。虽然这类开发工具不能帮助程序设计人员生成出一个完全可用的系统,但可在一定程度上帮助开发人员生成应用系统中的大部分常见处理功能。对于那些特殊的处理模块还是需要程序设计人员手工编制,才能最后实现整个系统。

(5)客户/服务器工具类:客户/服务器(Client/Server)工具类是迄今软件工具发展中出现的比较新的开发工具。实际上这一类工具的发展主要是继承了“专业化分工协作”的思想。

客户/服务器解决问题的基本思想就是在原有开发工具的基础上,将原有工具改变为一个个既可以被其他工具所调用,又可以调用其他工具的“公共模块”。在这一思想指导下,开发的工作过程可以不受一种语言,或是一类开发工具的限制,从而能够综合发挥各类工具的长处,尽快、更好地完成系统开发工作。另外在整个系统结构方面,客户/服务器类还继承了传统颁布式系统的思想,并产生了前台和后台的作业方式,特别是在网络上可以大大减轻网络传输的压力,提高系统的运行效率。相互之间调用的随意性是这类开发工具的最显著的特点。所以客户/服务器工具类被广泛地应用于开发工具、网络系统的开发等各个方面。

如今市场上常见的客户/服务器工具有:Windows环境中的FoxPro、VB、VC++、Excel、Word、Powerpoint;Borland International公司的Delphi Client/Server;Powersoft公司的Power Build Enterprise;Sysmantec公司的Team Enterprise Developer等等。

(6)面向对象编程工具类:面向对象OO(Object Oriented)类的编程工具主要是指与面向对象,包括面向对象分析OOA(Object Oriented Analysis)、面向对象设计OOD(Object Oriented Design)方法相对应的编程工具。这是一类针对性比较强,且很具有潜力的系统开发工具。其特点就是在运用这类工具时,必须要与整个面向对象的方法相结合,即用面向对象的方法开发,就要用面向对象的开发工具来实现。如果没有面向对象的方法,这类开发工具也将失去其应有的作用,反之,不用这类工具开发,则面向对象的方法也无法发挥其长处。这一类的开发工具主要有C++、Visual C++、Smalltalk等。

另外,随着网络技术的不断普及,越来越多的企业在其内联网(Intranet)中采用了Internet技术和相关的协议,HTML、JAVA和其他开发工具也将会得到广泛的应用。

二、系统调试

在完成了上述的任务以后,程序的设计工作就可以开始了。程序设计就是将处理逻辑转变为可被计算机执行的指令。如果程序设计人员已经具有详细的程序设计说明书,那么编程工作就变得比较简单,即只需将逻辑处理功能的说明转换成程序代码就完成了编程工作。然后进行程序模块的调试与测试,最后对整个系统进行调试与测试。

1.系统的编程

在编程时要注意:

(1)使用一致的、有一定意义的变量名。这些规则的思想是,变量的名字应该包括类型信息。这样做的目的是为了使程序模块更容易理解。例如变量名的前半部分描述变量的数据类型,后半部分描述变量的实际含义。

(2)加入尽可能多的注释。在程序的任何地方都可以根据需要加入注释。如在每个模块的开头提供以下信息:模块名、模块功能的描述、程序员名字、模块被编码的日期、模块被批准的日期和由谁批准、模块参数、变量名及其用途的列表;还应列出这个模块要访问的文件,列出这个模块要修改的文件、模块的输入/输出、错误处理的能力、包含测试数据的文件名等等。如果对模块进行过修改,则要有所做修改的列表、修改的日期以及谁批准修改、已知的错误。除了开头注释外,还应该向代码中插入一些内嵌的注释来帮助维护人员理解编码的含义。

(3)保留修改后的原错误代码。在对程序进行修改时,应该注意,修改某段有错误的代码时,不应该把那段代码删除,最好是把它们变成注释,再加上一点内嵌的注释。原因是可以留下日后审计的线索。事实证明,由于“人们会重犯同样的错误”,很多情况下修正后仍然出现了问题,而这个问题很可能在以前就曾经被修正过。

当然,还要多注意程序的结构,例如分支结构的嵌套不要太深、模块的语句不要太多、避免使用GOTO语句等。总之,最好在编程前制订出一套统一标准,以保证一个系统内的编程风格是一致的。

2.程序的调试

程序编制完成以后,就要对程序进行调试,排除其中的各种错误,如语法错误、逻辑错误等。一般情况下,语法错误比较容易发现,而要查找出逻辑错误并加以改正就不那么容易,而且逻辑错误一般都需要通过程序的测试才能发现。所以程序的调试与测试往往是密不可分的。

(1)程序的调试过程。程序的调试过程一是对错误定位,二是改正所发现的错误。具体的执行步骤是:

●从错误的表现形式入手,分析判断,以确定程序中出错的位置。

●研究分析相关部分的程序,找出错误的内在原因。

●修改代码,以排除这个错误。

●重复对修改之处进行测试,以确认修改的结果。

很显然,这是一个循环过程,如图9 8所示。

图9 8 程序的调试过程

img57

程序调试一般都比较困难,主要是由主观原因和客观原因所引起的。由于人的心理因素以及技术水平导致了主观原因。从人的心理活动来说,程序设计人员都不太愿意别人对自己所编写的程序评头论足、说三道四,或者是指手画脚,实际上这就增加了程序调试的难度。从个人的能力角度上来看,对软件的调试能力因人而异,有的人比较善于调试程序的错误,而有些人则工作效率比较低下。调试能力的高低不仅和调试人员所受的教育背景有很大的关系,而且与个人所积累的经验也密切相关。

从客观原因上分析,程序调试都有一定的技术难度,主要表现于:

●产生错误现象与引起错误,两者的位置可能会相距甚远。这种情况在调试耦合的程序模块时会更加明显。

●当纠正一个错误时,可能会使错误所表现出来的现象暂时消失,但错误并未真正排除,即错误可能会更加隐蔽。

●一些产生的错误可能并不是程序本身的错误,如计算或舍入的精度不够等。

●错误的现象可能是由一些人为的错误所引起的,而这些错误又不太容易被发现。

●错误是由于时序问题所引起的,与处理过程并无关系。

●错误现象可能是周期性地出现。这在软、硬件结合的嵌入式系统中比较常见。

程序调试是系统开发的实施过程中最艰巨的脑力劳动,因为调试人员必须通过现象去寻找原因。如何在浩如烟海的程序元素中找出有错误的那个元素,这对程序设计人员的耐心、毅力、技术水平都是一次考验。

(2)程序调试的策略。有如下几种策略。

●试探法排除错误。根据错误的现象及征兆,对错误发生的大致位置进行猜测,继而对程序中有怀疑的地方及其附近的区域进行试探。

●回溯法排除错误。一旦发现错误,先对错误进行分析,确定其位置,然后人工沿着程序的控制流程,追踪源程序的代码,直到找出错误的根源或是确定产生错误的范围为止。

●归纳法排除错误。这种排除错误的思想就是:从一些线索——错误的征兆着手,通过分析它们之间的关系来找出错误。其执行步骤大致为:

第一步:收集运行的有关数据;

第二步:组织、分析数据;

第三步:提出错误的假设;

第四步:证明所提出的假设。

这些步骤如果用流程图来表示,如图9 9所示。

●演绎法排除错误。该方法的实施过程是首先根据已有的测试用例,设想及列举出所有可能出错的原因作为假设,然后利用原始测试数据或新的测试数据,从中一个一个地排除已经列举出的不可能正确的假设,最后证明剩下的原因确实就是错误的根源。此法执行的步骤大致为:

图9 9 归纳法排除错误的处理流程

第一步:设想所有可能的原因;

第二步:利用数据排除不正确的假设;

第三步:推断余下的假设;

第四步:证明余下的假设。

图9 10是演绎法进行排错的处理流程。

图9 10 演绎法排除错误的处理流程

3.系统测试

系统测试不论采用什么方法,首先需要进行测试用例的设计,即对要测试的对象设计各种数据,然后再实施测试的过程。

(1)程序测试的方法。程序测试的方法主要有以下几种:

●黑箱测试。此法不论程序内部是如何编制的,只是从外部根据输入—处理—输出IPO的要求进行测试。

●数据测试。即用大量实际的数据进行测试。测试时数据的类型要齐备,各种“边界”、“端点”都应测试到。

●穷举测试。这也叫完全测试,即程序运行的各个分支都必须测试到。

●模型测试。这是对所有程序运行的结果都进行核算。

img58

img59

(2)系统的测试。在完成了对程序测试以后,需要对整个系统进行测试。当然,系统测试过程可能仍然需要对所编制的程序进行调试。

单元测试。单元测试也叫模块测试。测试的内容主要是对模块的几个方面测试:接口、局部数据结构边界条件、出错处理、控制逻辑等。

程序模块的接口测试,主要是检查程序模块之间的数据流和控制流。如调用变量的属性与模块的参数属性的匹配问题、传送的变量与模块中的参数次序问题等等,都是测试的重点内容。

模块中的局部数据结构应该从多个角度进行测试,因为这往往是错误的来源。这项测试主要是针对模块中使用变量的初始化问题、数据类型的相容问题、全程数据变量对模块的影响程度问题等等。

边界条件的测试是比较重要的测试内容,因为软件的失效常常就发生在它的边界上,因此需要用大量的数据来测试。

●系统测试。在完成单元测试以后,还需要将各个单元连接起来进行测试。这个过程不断地重复进行,最后可以组成一个完整的系统,然后对整个系统进行测试。

因此系统的测试首先要经历单元的连接测试,最后要进行系统测试。如果采用客户/服务器的体系结构,则在测试过程中,还要进行一些相关的体系结构测试,如事务处理相关性能的测试、不同硬件平台兼容性测试、网络通信的测试等等。

首先要进行连接测试。将两个或两个以上相互关联的程序模块连接起来进行测试就成为连接测试(link testing),也叫系列测试(series testing)或集成测试(integration testing)。

由于单元测试并不能保证测试完成的单元与其他单元之间能够完整准确地进行数据信息传递,如,在一个事务主文件更新程序的系统中,需要有一个验证处理过程,而它的输出必须以适当的形式成为更新程序的输入,因此就需要将这两个程序处理模块进行连接测试,以确保程序在一起运行时数据能正确传输。

同单元测试一样,连接测试的数据既要考虑正常数据,也要考虑异常数据。因为连接测试的重点是测试连接的接口,重点不在程序内部。因此,所采用的测试数据不仅要能模拟真实的环境,也应该考虑到相关的接口处数据传递的特点。例如,在连接测试时,测试的数据可包含在两个程序间传送一个有12条记录的文件,然后再传送一个0条记录的文件来模拟异常情况。

其次进行系统测试。在系统测试时包括所有典型的处理情形。

当各个处理程序或模块没有拼装成系统时,无法来模拟实际的情况,如查询、打印报表等处理过程。在进行系统测试过程中,通过输入数据(包括真实的数据)、执行各种查询、打印报表等来模拟真实的情况。所有的处理和输出结果都要经过仔细、严格的认证和核实,以保证系统运行正常、功能完善。

系统测试的主要目标是:对所有程序执行最终测试;确定系统各个部分能够正确地集成;确保能正确应付各种实际的处理情形;证明用户可以成功地与系统进行交流;等等。一句话,所开发的信息系统能够符合用户的需求,运行时效率高、功能强。

所以系统测试的完成与否最终要以获得用户方,如操作人员、各级管理人员等的认可为界限,而用户方要等到系统安装、试运行后,接手操作与运行系统时才会最终认可。

再者进行体系结构测试。如果在系统的实施过程中采用了客户/服务器的结构,那么就有必要进行体系结构的测试。当然这项测试对软件测试人员确实提出了一定的要求。

在体系结构测试过程中,需要对客户/服务器的分布式特性、事务处理相关的性能、不同硬件平台存在的可能性、网络通信的复杂性、集中式或分布式数据库的协调性等各种情况进行测试。所以不仅要求比较高,而且也会增加测试的时间和成本。

测试可以考虑如下的一些问题:

客户端GUI的考虑,例如各种控件布局是否合理。

目标环境及平台多样性的考虑。

分布数据库的考虑,例如数据的复制。

分布处理的考虑,例如并行算法的选择。

非线性的性能关系,例如会不会出现服务事务的爆发、不均匀分布。

由于客户/服务器体系结构的特殊性,因此测试时需要一些比较独特的策略和战术。根据以往的经验,下述5种测试方法在对客户/服务器结构测试中可以提供参考。

应用功能测试:原则上,客户端应用应该独立地测试,以发现运行中的错误。

服务器测试:测试服务器的协调和数据管理功能,也考虑服务器性能(整体反应时间和数据吞吐量),有时要考虑各种突发的数据吞吐量以及相应的反应时间。

数据库测试:测试服务器存储的数据的精确性和完整性,检查客户端应用提交的事务,以保证数据的存储、更新和检索。

事务测试:创建一系列的测试以保证每类事务按照需求处理。测试着重于处理的正确性,也关注性能问题,如事务处理的时间和数量、事务失败率等。

网络通信测试:这些测试验证网络节点的通信是否正确地进行,并且消息传递、事务和相关的网络交通有无错误发生。网络安全性测试也是测试的一个重要组成部分。

●基于非执行的测试。实际上,测试的工作不应是一个独立的过程。从完成

高质量信息系统的观点看,在整个生命周期中都要进行测试。在需求分析阶段必须要做需求测试,以便验证需求的完备性、合理性、正确性,对于描述需求的文档本身也要做检查,以保证它表达的含义准确、清晰,不被人误解。在系统设计阶段也要不断地检查、测试,以保证设计方案的合理性、正确性。

应用实施阶段的测试如上所述。在进入安装、运行、维护后,也要不断地测试,不断地检查更新过的软件版本。

所以,仅仅在实施时才安排一个测试阶段,或者在某个阶段结束时才对该阶段做测试是不够的。例如,如果在需求分析阶段对需求的说明文档没有仔细检测,随着开发工作的深入,才逐渐发现先前的说明过程有错误,那么所带来的影响和损失就可能会比较大。

在测试时往往注重基于执行的测试,如比较关注软件是否符合需求、可靠性如何、性能如何等等。其实这种测试只能保证软件在正常环境、正常操作步骤时不出问题,但不能保证软件在特定环境或是非正常操作时也能正常运行,例如,黑客攻击、意外断电、开发人员留后门或设置逻辑炸弹之类的问题等,可能在一般的测试中就不一定能够发现。如果某个设计描述被误解或被忽略;程序的流程和分支判断太多,发现不了某个分支的错误;数据类型不合理;取值范围太小导致变量越界或溢出,等等,所有这些问题只有在基于非执行的测试时才有可能被检测出来。

基于非执行的测试必须由不同的人员进行,他们各有不同的技能,他们必须对各种文档、图表、程序代码进行仔细阅读、静态测试。他们的经验应该非常丰富,每个人能从不同的角度去测试。对于非执行的测试有两种方式:走查和审查。两者的区别是走查的步骤比审查要少,而且没有审查那样正规。

走查的思想是先对错误进行仔细分析,只有当它们真正是问题时才做修正。所以它所要做的工作就是花少量的时间寻找重大的错误,给错误做上标记,而不是修正错误。

审查的范围比走查要广泛。它有5个步骤:

第一步:由负责制订文档的一个成员给出该文档的综述。

第二步:参与人员尽可能详细地理解文档。最好列出最近审查中所发生的错误类型,并按发生的频率对错误类型分级。

第三步:参与开发人员与审查组一起走查整个文档,确保每个条目、每段分支都能考虑到。在此基础上,开始寻找错误。和走查一样,这一步骤的目的是查出文档中的错误,但并不急于修正它们。

第四步:负责制作文档的人解决第三步所发现的所有错误及问题。

第五步:审查组要确保所提出的每一个问题都得到圆满的解决。对所有的修正都必须再做检查,保证没有引入新的错误。

复习思考题

1.信息系统的设计以什么为蓝图?为什么要有这个蓝图?

2.信息系统的设计主要完成哪些工作?这些工作的重点是什么?它们之间的联系是什么?

3.为什么要开发高效的数据输入程序?如何做到这一点?

4.如何进行系统调试?调试时用户是否要参与?为什么?

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈