第八章管理信息系统的系统实施•系统实施是新系统付诸实现的实践阶段,也是取得用户对系统信任的关键阶段。因此,必须根据新系统设计报告的要求,进行组织工作,主要内容包括:物理系统的实施、程序设计与调试、项目管理、人员培训、数据准备与录入、系统转换和评价等。系统实施阶段所要进行的工作内容和流程:依据系统物理配置方案第一节物理系统的实施一、计算机系统的实施(1)计算机品牌选择:•国外品牌目前有:IBM、HP、Compaq、DEC、DELL等。•国内品牌品牌目前有:联想、神舟、方正等。(2)计算机购置的基本原则:•能够满足MIS的设计要求。(依据物理配置方案)(3)计算机购置应考虑的问题:•计算机系统是否具有合理的性能价格比;•系统是否具有良好的可扩充性;•能否得到来自供货商的售后服务和技术支持等。(4)计算机的环境要求:•机房要安装双层玻璃门窗,并且要求无尘;•硬件通过电缆连接至电源,电缆走线要安放在防止静电感应的耐压的活动地板下面;•为了防止由于突然停电造成的事故发生,应安装备用电源设备,如功率足够的不间断电源;•配备必要的防雷设施。(5)计算机设备到货,按合同开箱验收•安装与调试任务主要应由供货方负责完成。•系统运行用的常规诊断校验系统也应由供货方提供,并负责操作人员的培训。二、网络系统的实施(1)流行的网络产品•Cisco:Cisco公司是世界上最大的计算机网络产品供应商,选择Cisco产品质量上有保障,但投资较高。•3Com:3Com公司在中国有广泛的市场份额和多个成功案例,产品性能稳定可靠,售后服务好,投资也较少。(2)网络产品选型•路由器设备可选用Cisco公司的产品。•交换机设备可选用3Com公司的产品。(3)MIS网络类型•局域网(LAN)通常指一定范围内的网络,可以实现楼宇内部和临近的几座大楼之间的内部联系。•广域网(WAN)设备之间的通信,通常利用公共电信网络,如中国公用数字数据网CHINADDN、中国公用分组交换网CHINAPAC、公用交换电话网PSTN等实现远程设备之间的通信。(4)常用的通信线路•双绞线:双绞线是综合布线工程中最常用的一种传输介质。与其他传输介质相比,双绞线在传输距离、信道宽度和数据传输速度等方面均受到一定限制,但价格较为低廉。•同轴电缆:同轴电缆以硬铜线为芯,外包一层绝缘材料。同轴电缆的这种结构,使它具有高带宽和极好的噪声抑制特性。目前,同轴电缆大量被光纤取代,但仍广泛应用于有线电视和某些局域网。•光纤电缆:光纤和同轴电缆相似,只是没有网状屏蔽层,中心是光传播的玻璃芯。光纤通信系统的主要优点有:(1)传输频带宽,通信容量大。(2)线路损耗低,传输距离远。(3)抗干扰能力强,应用范围广。•微波和卫星通信:无线通信方式,抗干扰的能力较弱。第二节程序设计•一、程序设计的目标•对于什么是“好程序”,20世纪50年代与70年代末的观点有很大的不同。50年代的计算机内存小、速度慢,人们往往把程序的长度和执行速度放在很重要的位置,费尽心机缩短程序长度,减少存储量,提高速度。现在,对于大型程序而言,人们则倾向于首先强调程序的可维护性、可靠性和可理解性,然后才是效率。1、可维护性•可维护性是指软件能够被校正、被修改或被完善的难易程度。MIS寿命一般是3年至10年时间,因此程序的维护工作量相当大。一个不易维护的程序,用不了多久就会因为不能满足应用需要而被淘汰,因此,可维护性是对程序设计的一项重要要求。2、可靠性•可靠性是指系统在规定的外部条件下,按照规定的功能,能够运行指定的一段时间的概率。•衡量程序可靠程度的另一个指标是:程序的容错能力,程序应具有较好的容错能力,这就要求程序不仅在正常情况下能正确工作,而且在意外情况下应便于处理,不至产生意外的操作,从而造成严重损失。3、可理解性•可理解性是指理解和使用该系统的容易程度。程序员在写程序时应该记住:“程序不仅是给计算机执行的,也是供人阅读的。”程序维护人员经常要维护他人编写的程序,一个不易理解的程序将会给程序维护工作带来困难。•因此,我们要主张程序应使人们易于阅读,编程的目标是编出逻辑上正确而又易于阅读的程序。程序可理解性好,自然易于理解、易于维护,并将大大降低隐含错误的可能性,从而提高程序的可靠性。4、效率•程序的效率是指程序能否有效地利用计算机资源。如今,人员对于程序的效率更多的是,关心程序设计人员的工作效率。提高程序设计人员的工作效率,不仅能降低软件的开发成本,而且可明显降低程序的出错率,进而减轻维护人员的工作负担。此外,程序效率与可维护性、可理解性通常是矛盾的,在实际编程过程中,人们往往宁可牺牲一定的时间和空间,也要尽量提高系统的可理解性和可维护性。5、可移植性•程序的可移植性指的是把程序从一种硬件配置和软件环境转换到另一种配置和环境时,需要的工作量的多少。可移植性好的程序对于企业环境变化较快的企业,尤为重要。6、可重用性•可重用性指的是该系统或系统的一部分在开发其他应用系统时可以被重复使用的程度。对于使用单位而言,系统的可重用性越高,则企业日后的维护工作量越少。7、互运行性(互操作性)•互运行性指的是将该系统和另一个系统结合起来需要的工作量的多少。二、模块化程序设计中应注意的问题①模块的独立性。在系统中模块之间应尽可能地相互独立,减少模块间的耦合,以便于将模块作为一个独立子系统开发。②模块大小划分要适当。模块中包含的子模块数要合适,既便于模块的单独开发,又便于系统重构。③模块功能要简单。底层模块一般应完成一项独立的处理任务。④共享的功能模块应集中。对于可供各模块共享的处理功能,应集中在一个上层模块中,供各模块引用。如报表输入、输出模块、读数据模块。第四节程序和系统的调试(测试+修改)•程序和系统调试的目的是发现程序和系统中可能存在的错误并及时予以纠正。•一、程序调试•在一个软件系统开发过程中和完成之后,发现和纠正错误就是一项必须进行的工作,而且是一项投入巨大的工作。从投入的资金和人力物力来看,测试和修改所需的开销占到开发成本的80%。以微软公司开发WIN95为例,代码为11236344行的WIN95,花费了2333345小时用于测试,平均每行代码测试时间为12.5分钟。•程序的调试对于系统开发和维护具有重要的承启作用,调试完成可以说是系统开发成功的一个阶段性标志,同时也对往后的维护工作的展开奠定一个良好的基础。鉴于程序调试的重要性和复杂性,进行调试工作前,要制定一个规范化的系统调试方案,通常包括以下基本内容:•1、拟定调试计划•测试计划可以有效地克服测试的盲目性,缩短测试周期,提高测试效率。•2、编制调试大纲•软件调试大纲是软件调试的依据。它明确详尽地规定了在调试中针对系统的每一项功能或特性所必须完成的基本测试项目和测试完成的标准。•3、设计和生成测试用例•测试用例是指为实施一次调试而向被调试系统提供的输入数据、操作或各种环境设置。合理有效的测试用例对于提高软件调试的质量和效率具有重要的作用。•4、实施调试•对程序实施调试,也即是对程序的正确性进行验证并对错误做出修改。目前有两种验证方法:理论法和实验法。理论法是利用数学方法证明程序的正确性。理论法还处于研究阶段,目前常用的是实验法。•5、生成调试分析报告•将调试的成果用调试分析报告来体现。二、程序调试的原则•程序调试阶段应注意以下一些基本原则:•1、测试用例应包括输入数据和预期的输出结果。•2、不仅要选用合理的输入数据作为测试用例,而且应选用不合理的输入数据作为测试用例。•3、既要检查程序是否完成了它应做的工作,又要检查它是否还做了它不应做的事情。•4、测试用例应长期保留,直到这个程序被废弃。三、代码测试•常用的测试数据有以下几种:•1、用正常的数据调试。检测是否能得到预期结果。•2、用异常的数据调试。例如用空数据文件参加测试,检查程序能否正常运行。•3、用错误数据调试。试验程序对错误的处理能力,包括显示出错信息以及容许修改错误的可能性。具体检查内容有:•①输入键号错误时(包括错的键号和不应有的键号)能否及时检出和发出出错信息,并允许修改;•②输入数据错误时(包括错误数据、不合理数据和负数)能否及时查出或发出出错信息,并容许修改;•③操作错误时(包括键盘错误、操作步骤或方法错误)能否及时检出并发出警告信息,并允许改正。四、测试用例设计•刚刚我们说到了,对于程序调试目前使用的是实验法,实验法就是通过设计出来的数据来检测出程序的错误。因为测试工作不可能采用穷举测试方法,所以测试用例的选择就是测试的关键问题。好的测试用例应以尽量少的测试数据发现尽可能多的错误。以下是几种测试用例的设计技术:•1、语句覆盖法•2、判断覆盖•3、条件覆盖•4、条件组合覆盖•5、路径覆盖1、语句覆盖法•一般来讲,程序的某次运行并不一定执行其中的所有语句。因此,如果某个含有错误的语句在测试中并没有执行,这个错误便不可能发现。为了提高发现错误的可能性,应在测试中执行程序中的每一个语句。语句覆盖法就是要选择这样的测试用例,使得程序中的每个语句至少能执行一次。•以下是一个被测试的程序,其原程序是:•PROCEDUREM(VARA,B,X:REAL);•BEGIN•IF(A1)AND(B=0)•THENX:=X/A;•IF(A=2)OR(X1)•THENX:=X+1•END;被测试程序的流程图若选择测试用例为A=2,B=0,X=3,则程序通过路径ace,程序中的每个语句都执行了一次,达到了语句覆盖的要求。2、判断覆盖•判断覆盖是指设计测试用例使程序中的每个判断的取“真”值和取“假”值的每一个分支至少通过一次。•在上面例子中,若取测试用例为A=3,B=0,X=1和A=2,B=1,X=3,则可以分别执行路径acd和abe,使得两个判断语句的四个分支都得到覆盖。既然每个分支都执行了,当然程序中的每个语句也就被执行了。可见判断覆盖比语句覆盖更严格一些。3、条件覆盖•条件覆盖是指执行足够的测试用例,使得判断中的每个条件获得各种可能的结果。•上例程序中有四个条件:A1,B=0,A=2,X1。可以设计以下2个测试用例满足要求:•①A=2,B=0,X=4•②A=1,B=1,X=1•一般来说,条件覆盖比判断要求严格,因为判断覆盖的对象是每个判断结果,而条件覆盖考虑每个判断中的每个条件。4、条件组合覆盖•设计测试用例时,要使得判断中每个条件的所有可能取值至少出现一次,并且每个判断本身的条件组合也至少出现一次。上述例子中,两个判断分别包含两个条件,可以形成八种组合:•①A1,B=0②A1,B≠0•③A≤1,B=0④A≤1,B≠0•⑤A=2,X1⑥A=2,X≤1•⑦A≠2,X1⑧A≠2,X≤1•下面的四个测试用例可以满足条件组合覆盖的要求:•(a)A=2,B=0,X=4,使①、⑤两种情况出现。•(b)A=2,B=1,X=1,使②、⑥两种情况出现。•(c)A=1,B=0,X=2,使③、⑦两种情况出现。•(d)A=1,B=1,X=1,使④、⑧两种情况出现。•条件组合覆盖综合了判断覆盖、条件覆盖的要求,因此,比单纯的判断覆盖或条件覆盖都要强。5、路径覆盖•设计测试用例,使它覆盖程序中所有可能的路径。在我们的例子中,有四条可能的路径:abd,ace,abe,acd。下面的测试用例可以满足路径覆盖的要求:•(1)A=2,B=0,X=3(沿路径ace)•(2)A=1,B=0,X=1(沿路径abd)•(3)A=2,B=1,X=1(沿路径abe)•(4)A=3,B=0,X=1(沿路径acd)•路径覆盖的测试功能很强。但对于实际问题,其路径数可能相当庞大而且有不可能完全覆盖。五、程序功能测试•经代码测试正确的程序只是基本上验证了程序逻辑上的正确性,并不能验证程序是否满足程序说明中定义的功能,也不能验证测试数据本身是否完备。程序功能测试则面向程序应用环境,由使用单位提供企业实际数据来做测试,通常以一个完整的业务来做测试内容。六、分调(功能调试)•系统的应用软件通常由多个功能模块组成,每个模块由一个或几个程序构成。在单个程序调试完成以后,尚需进行分调,即