第六章系统实施本章要点系统实施的任务、特点结构化程序设计方法、面向对象程序设计方法系统的白盒测试、黑盒测试、灰盒测试系统切换的主要方法6.1系统实施阶段的任务6.1.1实施阶段的主要活动系统实施是开发信息系统的最后一个阶段。这个阶段的任务,是实现系统设计阶段提出的物理模型,按实施方案完成一个可以实际运行的信息系统,交付用户使用。系统设计说明书详细规定了系统的结构,规定了各个模块的功能、输入和输出,规定了数据库的物理结构。这是系统实施的出发点。具体讲,这一阶段的任务包括以下几个方面:1、硬件准备2、软件准备3、人员培训4、数据准备6.1系统实施阶段的任务程序编制设备购置人员培训数据准备程序编制提供调试设备培训有关人员试用软件提供试验数据调试程序设备购置提供对设备的要求培训有关人员接收设备提供存储量和内存要求人员培训提供程序以培训人员提供培训设备提供培训的实验数据数据准备规定数据准备的内容、格式提供录入设备提供录入人员表8-1系统实施阶段的主要活动及相直关系6.1系统实施阶段的任务6.1.2系统实施阶段的特点与系统分析、系统设计阶段相比,系统实施阶段的特点是工作量大,投入的人力、物力多。因此,这一阶段的组织管理工作也很繁重。对于这样一个多工种、多任务的综合项目,合理的调度安排就十分重要。在我国的信息系统建设中,项目负责人往往一身兼任多种角色。在系统分析阶段,他是系统分析员;在设计阶段,他又是主要设计师;在实施阶段,他又是组织者。在系统分析阶段,系统分析员的主要任务是调查研究,分析问题,与用户一起充分理解用户要求。在系统设计阶段,系统设计人员的任务是精心设计,提出合理方案。在实施阶段,他们的任务是组织协调,督促检查。他们要制定逐步实现物理模型的具体计划,协调各方面的任务,检查工作进度和质量,组织全系统的调试,完成旧系统向新系统的转换。在实际工作中,系统分析员往往是这几个阶段的组织者。作为合格的系统分析员,不仅要有坚实的计算机科学知识,丰富的管理知识和经验,还要有较强的组织能力。6.2系统实施的方法6.2.1自顶向下的实现方法结构化方法主张自顶向下实现,尽量先实现上层模块,逐步向下,最后实现下层最基本的模块。即首先调试整个系统的结构及各模块间的接口,确保系统结构和各模块接口的正确性。当然,所谓先实现上层模块也不是一刀切,即先实现某个层次的所有模块,而是把整个实施方案分成若干个版本,首先实现系统的轮廓或框架,在此基础上不断添加新的功能,逐步完善,最后达到物理模型所要求的全部功能。6.3程序设计63.1编程的标准一般认为好程序应具备下列素质:(1)能够工作;(2)调试代价低;(3)易于维护;(4)易于修改;(5)设计不复杂;(6)效率高;6.3程序设计要使程序可读性好,总的要求是使程序简单、清晰。70年代以来,人们总结了使程序简单、清晰的种种技巧和方法,包括:(1)用结构化方法进行详细设计;(2)程序中包含说明性材料;(3)良好的程序书写格式;(4)良好的编程风格。6.3程序设计6.3.2结构化程序设计通常认为结构化程序设计包括以下四方面的内容:(1)限制使用GOTO语句。(2)逐步求精的设计方法。在一个程序模块内,先从该模块功能描述出发,一层层地逐步细化,直到最后分解、细化成语句为止。(3)自顶向下的设计、编码和调试。这是把逐步求精的方法由程序模块内的设计推广到一个系统的设计与实现。这正是本书介绍的结构化方法的来源。(4)主程序员制的组织形式。6.3程序设计6.3.3面向对象的程序设计面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体现。(1)对象。(2)类。(3)封装。(4)继承。(5)多态。(6)动态绑定(7)消息传递。6.3程序设计面向对象程序设计的其他优点:(1)数据抽象的概念可以在保持外部接口不变的情况下改变内部实现,从而减少甚至避免对外界的干扰;(2)通过继承大幅减少冗余的代码,并可以方便地扩展现有代码,提高编码效率,也减低了出错概率,降低软件维护的难度;(3)结合面向对象分析、面向对象设计,允许将问题域中的对象直接映射到程序中,减少软件开发过程中中间环节的转换过程;(4)通过对对象的辨别、划分可以将软件系统分割为若干相对为独立的部分,在一定程度上更便于控制软件复杂度;(5)以对象为中心的设计可以帮助开发人员从静态(属性)和动态(方法)两个方面把握问题,从而更好地实现系统;(6)通过对象的聚合、联合可以在保证封装与抽象的原则下实现对象在内在结构以及外在功能上的扩充,从而实现对象由低到高的升级。6.3程序设计6.3.4可视化编程技术可视化编程技术的主要思想是用图形工具和可重用部件来交互地编制程序。它把现有的或新建的模块代码封装于标准接口封包中,作为可视化编程编辑工具中的一个对象,用图符来表示和控制。可视化编程技术中的封包可能由某种语言的一个语句、功能模块或数据库程序组成,由此获得的是高度的平台独立性和可移植性。在可视化编程环境中,用户还可以自己构造可视控制部件,或引用其他环境构造的符合封包接口规范的可视控制部件,增加了编程的效率和灵活性。6.3程序设计6.3.5编程风格编程风格在很大程度上影响着程序设计的可读性、可测试性和可维护性。鉴于软件开发的绝大部分成本小号在测试和维护阶段,努力追求可测试性和可维护性极其重要。编程风格是在不影响性能的前提下,有效地编排和组织程序,以提高可读性和可维护性。6.3程序设计(1)节俭化(economy).提供尽可能简洁的代码,具体措施包括:避免程序中不必要的动作和变量;避免变量名重载;较少程序的体积;减少程序的执行时间(提高速度),例如,使用执行时间短的算术运算;避免不同类型的对象混合操作;尽量使用整型运算和布尔表达式;避免模块冗余和重复;检查全局变量的副作用。6.3程序设计(2)模块化(modularity)。把代码划为内聚度高、富有意义的功能块。通常是把长且复杂的程序段或子程序分解为小且定义良好的程序段,具体措施包括:确保物理和逻辑功能密切相关;限定一个模块完成一个独立的功能;检查代码的重复率。6.3程序设计(3)简单化(simplicity)。去掉过分复杂和不必要的矫揉造作。具体措施如包括:采用简单和直截了当的算法;使用简单的数据结构,避免使用多维数组、指针和复杂的表;注意对象命名的一致性;以手工方式简化算术和逻辑表达式。6.3程序设计(4)结构化(structure)。把程序的各个构建组织成一个有效系统。具体措施包括:按照标准化的次序说明数据;使用读者明了的结构化部件;采用直截了当的算法;根据应用背景排列程序各部分;不随意为效率而牺牲程序的清晰度和可读性;让机器多做琐碎、繁琐的工作;用公共函数调用代替重复出现的表达式;检查参数传递的情况,保证有效性;检查多层嵌套结构,确认是否存在某些语句可从内从循环中提出,避免大量使用嵌套循环结构和嵌套分支结构;坚持使用统一缩进规则;只编制单入口单出口的代码。6.3程序设计(5)文档化(documentation)。程序能自说明。具体措施包括:有效适当的使用注释,保证注释有意义,说明性强;使用含义鲜明的变量名;协调使用程序块注释和程序行注释;始终坚持编制文档。(6)格式化(layout)。尽量使用程序布局合理、清晰、明了。具体措施包括:有效使用编程空间(水平和垂直两个方向),以助读者理解;适当的插入括号,使表达式的运算次序清晰直观,排除二义性;有效使用空格符,以区别程序的不同意群,提高程序的可读性;6.4系统测试系统测试就是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。6.4系统测试6.4.1系统测试内容软件测试主要工作内容是验证(verification)和确认(validation),下面分别给出其概念:验证(verification)是保证软件正确地实现了一些特定功能的一系列活动,即保证软件做了你所期望的事情。(Dotherightthing)主要包括:确定软件生存周期中的一个给定阶段的产品是否达到前阶段确立的需求的过程;程序正确性的形式证明,即采用形式理论证明程序符合设计规约规定的过程;评审、审查、测试、检查、审计等各类活动,或对某些项处理、服务或文件等是否和规定的需求相一致进行判断和提出报告。确认(validation)是一系列的活动和过程,目的是想证实在一个给定的外部环境中软件的逻辑正确性。6.4系统测试6.4.2系统测试的分类系统测试的方法从不同的角度分为不同的类型,下面分别从从是否关心软件内部结构和具体实现的角度、是否执行程序的角度和从软件开发的过程分别介绍软件测试的方法。6.4系统测试1.从是否关心软件内部结构和具体实现的角度划分按照从是否关心软件内部结构和具体实现的角度划分可以分为白盒测试、黑盒测试和灰盒测试。(1)白盒测试。也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。(2)黑盒测试。黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。6.4系统测试3.灰盒测试。灰盒测试,确实是介于白盒测试与黑盒测试之间的,可以这样理解,灰盒测试关注输出对于输入的正确性,同时也关注内部表现,但这种关注不象白盒那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态,有时候输出是正确的,但内部其实已经错误了,这种情况非常多,如果每次都通过白盒测试来操作,效率会很低,因此需要采取这样的一种灰盒的方法。6.4系统测试2.从是否执行程序的角度按照从是否执行程序的角度系统测试可以分静态测试和动态测试。(1)静态测试。静态方法是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错。静态方法通过程序静态特性的分析,找出欠缺和可疑之处.(2)动态测试。动态方法是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能,这种方法由三部分组成:构造测试实例、执行程序、分析程序的输出结果。6.5系统的交付使用系统的交付使用即系统的转换,包括把旧系统的文件转换成新系统的文件,数据的整理和录入,也包括人员、设备、组织机构的改造和调整,有关资料档案的建立和移交。系统转换的最后形式是将全部控制权移交给用户单位。6.5系统的交付使用系统的交付使用即系统的转换,包括把旧系统的文件转换成新系统的文件,数据的整理和录入,也包括人员、设备、组织机构的改造和调整,有关资料档案的建立和移交。系统转换的最后形式是将全部控制权移交给用户单位。1、直接转换方式2、平行运行方式3、试运行方式4.逐步转换方式谢谢观赏!Thanks!