软件开发流程实训教程第6章.ppt
- 文档编号:17535254
- 上传时间:2023-07-26
- 格式:PPT
- 页数:30
- 大小:83.50KB
软件开发流程实训教程第6章.ppt
《软件开发流程实训教程第6章.ppt》由会员分享,可在线阅读,更多相关《软件开发流程实训教程第6章.ppt(30页珍藏版)》请在冰点文库上搜索。
第6章编码,【本章引言】作为软件开发过程的一个阶段,编码是软件设计的继续。
编码有很多实现语言、工具可供选择,一般来说,在设计中可直接或间接地确定实现语言,本书主要采用VB.net来进行编码。
编码过程的一个主要标准是编程与设计的对应性和统一性。
【教学目标】了解如何建立软件开发过程中编码风格;掌握传统结构化编码方法和面向对象程序设计方法;学会编码调试过程和方法。
第六章编码,6.1建立编码风格6.2编码方法,6.1建立编码风格,编码风格是指在不影响程序正确性和效率的前提下,有效编排和合理组织程序的基本原则。
源程序的风格统一标志着可维护性、可读性、易测试性,是软件项目的一个重要组成部分。
通过建立代码编写规范,形成开发小组的编码约定,可以提高程序的可靠性、可读性、可修改性、可维护性、可继承性和一致性,可以保证程序代码的质量,继承软件开发成果,充分利用资源,使开发人员之间的工作成果可以共享。
为了编写出可读性好、易测试、易维护且可靠性高的程序,软件开发人员必须重视编码的风格。
编码风格主要体现在以下4个方面:
源程序文档化,数据说明的方法,表达式和语句结构、输入/输出方法。
力图从编码原则的角度提高程序的可读性,改善程序质量。
6.1建立编码风格,1.源程序文档化
(1)标识符的命名应反映它所代表的实际东西,应有一定实际意义。
如:
平均值用Average表示,和用Sum表示,总量用Total表示。
名字不是越长越好,过长的名字会使程序的逻辑流程变得模糊,给修改带来困难。
所以应当选择精炼的意义明确的名字,改善对程序功能的理解,必要时可使用缩写名字,但缩写规则要一致,并且要给每一个名字加注释。
在一个程序中,一个变量只应用于一种用途,也就是说,在同一个程序中一个变量不能身兼几种工作。
(2)程序中的注释是程序员与日后的程序读者之间通信的重要手段。
正确的注释能够帮助读者理解程序,可为后续阶段进行测试和维护提供明确的指导。
因此,注释决不是可有可无的,大多数程序设计语言允许使用自然语言来写注释,这就给阅读程序带来很大的方便。
注释主要有两种:
序言性注释和功能性注释。
6.1建立编码风格,序言性注释通常置于每个程序模块的开头部分,它应当给出程序的整体说明,对于理解程序本身具有引导作用。
有些软件开发部门对序言性注释作了明确而严格的规定,要求程序编制者逐项列出。
有关项目包括:
程序标题;有关本模块功能和目的的说明;主要算法;接口说明:
包括调用形式,参数描述,子程序清单;有关数据描述:
重要的变量及其用途,约束或限制条件,以及其它有关信息;模块位置:
在哪一个源文件中,或隶属于哪一个软件包。
下面是一个程序的序言性注释的实例(参见源程序FrmLend.vb)。
6.1建立编码风格,文件名:
FrmLend.vbCopyright2009沈阳师范大学图书馆创建人:
胡万德日期:
2009年1月15日描述:
借阅图书模块功能性注释嵌在源程序体中,用以描述其后的语句或程序段是在做什么工作。
书写功能性注释要注意以下几点:
用于描述一段程序,而不是每一个语句;用缩进和空行,使程序与注释容易区别;注释要正确。
有合适的,有助于记忆的标识符和恰当的注释,就能得到比较好的源程序内部的文档。
有关设计的说明,也可作为注释,嵌入源程序体内。
下面是一个程序的功能性注释的实例(参见源程序FrmLend.vb)。
6.1建立编码风格,(3)程序的视觉组织。
利用空格、空行和移行,提高程序的可视化程度。
恰当地利用空格,可以突出运算的优先性,避免发生运算的错误。
自然的程序段之间可用空行隔开,对于选择语句和循环语句,把其中的程序段语句向右做阶梯式移行,这样可使程序的逻辑结构更加清晰,层次更加分明。
其中缩排是一种最常用、最有效的技术,用以通过版式展现程序的逻辑。
正如下面实例所证明的,缩排的程序要比未缩排的程序更易于阅读,尽管过度缩排可能会不及未缩排的程序易读性好。
下面是一个未缩排的IF语句实例(参见源文件ClsOperate.vb):
6.1建立编码风格,2.数据说明在详细设计阶段就已经确定了系统所涉及的数据结构的组织和复杂程度,但对数据进行说明却是在编码时进行的。
为了使数据说明便于理解和维护,必须注意下述几点:
(1)数据说明的次序应规范。
为方便阅读、理解和维护,数据说明的次序应规范化,使说明的先后次序固定,使数据属性容易查找。
例如,按常量说明、简单变量类型说明、数组说明、公用数据块说明、所有的文件说明的顺序说明。
在类型说明中还可进一步要求,例如可按整型量说明、实型量说明、字符量说明、逻辑量说明顺序排列。
(2)当用一个语句说明多个变量名时,应当对这些变量按字母的顺序排列。
在下面的实例中我们定义了A1、A2、A3等8个变量(参见源文件FrmRet.vb)。
(3)如果设计了一个复杂的数据结构,应当使用注释来说明在程序实现时这个数据结构的特点。
6.1建立编码风格,3.达式和语句结构在设计阶段确定了软件的逻辑结构,但构造单个语句则是编码阶段的任务。
构造语句时应该遵循简单而直接的原则,不能为了提高效率而使表达式或语句变得过分复杂。
下述规则有助于使语句简单明了。
6.1建立编码风格,4输入和输出(I/O)输入和输出信息是与用户的使用直接相关的,输入和输出的方式和格式应当尽可能方便用户的使用。
因此,在软件需求分析阶段和设计阶段,就应基本确定输入和输出的风格。
系统能否被用户接受,有时就取决于输入和输出的风格。
在设计和程序编码时都应考虑下列原则:
(1)对所有的输入数据都进行检验,从而识别错误的输入,以保证每个数据的有效性;
(2)检查输入项的各种重要组合的合理性,必要时报告输入状态信息;(3)使得输入的步骤和操作尽可能简单,并保持简单的输入格式;(4)输入一批数据时,最好使用输入结束标志,而不要由用户指定输入数据数目;(5)当程序设计语言对输入输出格式有严格要求时,应保持输入格式与输入语句的要求的一致性;,6.1建立编码风格,(6)给所有的输出加注解,并设计输出报表格式;(7)有完备的输入出错检查和出错恢复措施,在程序执行过程中尽量排除由于用户的原因而造成程序出错的可能性;(8)如果用户的请求有了结果,应随时通知用户;(9)充分利用联机帮助手段,对于不熟练的用户,提供对话式服务,对于熟练的用户,提供较高级的系统服务,改善输入输出的能力;(10)使输入格式和操作要求与用户的技术水平相适应。
对于不熟练的用户,充分利用菜单系统逐步引导用户操作;对于熟练的用户,允许绕过菜单,直接使用命令方式进行操作。
6.2编码方法,6.2.1传统(结构化)编程方法6.2.2面向对象的程序设计方法,6.2.1传统(结构化)编程方法,模块化设计,自顶向下和自底向上设计,结构化程序设计以及数据流和数据结构设计等方法均属于传统的面向过程/数据的设计方法。
6.2.1传统(结构化)编程方法,1.基本思想在现实世界中存在着许多问题,这些问题是由一些原始的事物组成的,而且各事物之间存在着一定的联系。
面向对象的设计方法的基本思想是用“对象”来描述事物。
而用“消息”来描述事物之间的联系,再用“类”和“继承”来描述对象,即按通常的思维方式,建立微观和宏观的问题域模型,尽可能直接自然地表达问题求解的过程。
因此,面向对象的设计方法是用程序设计语言对问题的求解进行描述,而软件的实质是问题求解的一种表达形式。
2.基本概念
(1)对象(Object)对象是对事物的抽象,它用数据描述自己的状态,同时规定了对数据的操作。
对象实现了数据与操作的结合,使数据和操作封装于对象的统一体中。
对象内的数据具有自己的操作,从而可灵活地专门描述对象的独特行为,具有较强的独立性和自治性,其内部状态较少受到外界的影响,具有很好的模块化特点。
6.2.1传统(结构化)编程方法,可以通过消息传递来使用对象的处理能力,了解或改变其内部状态。
对象可以传递消息给其他对象,也可以从其他对象接受消息,通过消息传递来实现对象之间的联系。
因此,选择对象是面向对象程序设计关键的一步。
(2)消息(Message)消息是用来实现对象之间进行处理及相互之间的联系的。
送出消息的对象叫发送者,消息中只包含发送者的要求,它通知接受者要进行的处理,发送者对消息不起控制作用。
接受消息的对象叫接受者,接受者可以向发送者返回信息,也可以不返回。
一个对象可以接受各种形式、不同内容的多个消息,一条消息可以传递给多个不同对象,不同对象对同一消息可以做出不同的解释,并进行不同的处理。
对象之间传递消息一般由三部分组成,即接受对象名、调用操作名和调用必要的参数。
对象的外部特性是通过消息模式的描述来定义的,一个对象所能够接受的消息及其所带的参数共同构成了该对象的外部接口。
消息模式不仅定义了对象可以接受的消息,也定义了对象固有的处理能力。
6.2.1传统(结构化)编程方法,(3)类(Class)具有相同或相似性质的对象的抽象就是类.包括外部特性和内部实现两个方面。
通过消息模式及相应的处理能力的描述定义对象的外部特性,通过内部状态的表现形式和固有处理能力的实现描述定义对象的内部实现。
对于具有相同数据结构和相同操作的一组对象可以定义为同一类,而每个对象都是某个类的一个实例。
(4)继承(Inheritance)类可以组成一个层次结构,这种层次结构的一个重要特性就是继承.一个类的上层可以有父类(或称超类),下层可以有子类,子类可以直接继承其父类的全部描述,这种继承称之为传递性继承;如果一个类只允许有一个父类时,这时的继承叫做简单继承,这时类的层次结构为树结构;类可以有多个子类和多个父类,它们之间的继承叫做多重继承,这时类的层次结构由树形扩变为类格(ClassicLattice);如果类C继承类B,而类B又继承类A,则类C也继承类A,这种继承叫间接继承。
6.2.1传统(结构化)编程方法,(5)方法(Methods)方法表示对象所能执行的操作。
也就是说,方法驻留在对象中并确定当对象接受消息时应如何工作。
(6)实例(Instance)实例也称实例变量,它保存由某个特定类所描述的一个对象的信息或数据,实例或实例变量的值由方法根据消息而执行并进行处理。
3.语言特点面向对象程序设计方法吸取了现有程序语言与技术的优点并加以发展。
其主要特点是:
(1)模块化、数据抽象和信息隐藏对象把数据和过程紧密结合起来构成一个整体,这个整体具有很强的独立性和封闭性,可以实现模块化管理。
前面已经介绍对象的内部状态和处理能力的实现对外是不可见的,只能通过消息传递来进行,这种特性体现了信息隐蔽的思想,减少了程序之间的相互依赖,大大降低了程序的复杂性,提高了可靠性和可修改性。
6.2.1传统(结构化)编程方法,
(2).继承性在面向对象的设计方法中,上层的父类描述了层次结构中所有下层子类的公共性质。
继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。
也就是说把具有公共性质的类放在结构的下层,通过类和类的继承,使多个对象共享一个描述,它符合人们的思维习惯,也完全符合自顶向下和自底向上这两种设计思想,具有自然性。
在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
继承性是面向对象程序设计语言不同于其他语言的最主要的特点,是其他语言所没有的。
这种共享模式不仅减少冗余性,而且提高了可理解性和可维护性。
(3)并发性由于对象的执行过程是由消息启动的,当同时传递多个消息时,就能同时启动多个对象并行执行,称之为并发性。
6.2.1传统(结构化)编程方法,(4)软件部件化与重用性在面向对象的设计方法中,类的概念解决了软件的部件化问题,用类实现的软件部件的独立性越高,就可以为软件的重用提供基础和保证,因此改进软件的部件化和重用性是当前软件设计中要解决的问题之一。
4.设计步骤面向对象的设计方法一般适用于软件设计和实现阶段。
在分析、定义清楚了所要解决的问题之后,就可以采用面向对象的程序设汁方法,其基本步骤是:
(1)建立软件系统的动态模型先根据问题域和具体要求确定组成软件系统的对象及该对象所应具备的固有处理能力,再分析各对象之间都有哪些联系,并确定它们相互间的消息传递方式。
在上述两步的基础上,设计对象的消息模式,由消息模式和对象的处理能力共同构成对象的外部特性。
6.2.1传统(结构化)编程方法,
(2)建立软件系统的静态模型分析各对象的外部特性,将具有相同外部特性的对象归为一类,进而确定不同的类。
确定类间的继承关系,将具有公共性质的对象放在较上层的类中描述,并通过继承来共享公共性质。
根据以上两点设计各对象的外部特性和层次结构。
(3)实现为每个对象设计其内部实现,包括内部状态的表现形式和处理能力的实现。
为每个类设计其内部实现,包括数据结构和成员函数。
创建所需要的对象(即类的实例),以实现这些对象之间的联系。
总之,面向对象程序设计是一种新方法,它具有许多优点,又有许多问题需要解决。
相信这种程序设计方法会像传统的程序设计方法一样为广大读者所接受和掌握。
6.3调试过程和方法,调试的过程分为两个步骤:
首先定位错误出现的准确位置并确定错误的性质,然后对错误进行纠正。
其中第一个步骤确定错误的位置所需的工作量大约占据整个调试工作量的95%。
因此,在这里重点介绍进行错误定位的技术。
调试技术常用的调试技术有“穷举法”、“归纳法”、“演绎法”、“回溯法”以及“测试用例法”。
1.穷举法(BruteForce)穷举法是最普通的调试方法。
它是所有方法中最不需要动脑筋的方法。
穷举法可以通过以下几个途径实现:
(1)输出存储器的内容这种方法是将所有存储器的内容以十六进制或八进制的形式显示出来,是一种效率极其低下的方法。
这种方法的不足在于:
很难将内存单元与存储变量对应起来;数据之间缺少联系;存储器的内容只是内存的某个时刻的映象,不能反映出动态的变化,因而没法得到找出程序中的错误所需要的动态信息。
另外,所输出的存储器的内容常常不是程序出错的那一刻的状态。
6.3调试过程和方法,
(2)在程序中插入打印语句这种方法是把程序语言提供的标准输出语句插入到源程序的各个部分,以便输出关键变量的值。
它可以显示程序的动态行为,而且给出的信息容易和源程序对应起来。
在下面的程序中,我们就用到了这种方法(参见源程序FrmBookAdd.vb)。
(3)使用自动调试工具使用自动调试工具的方法与在程序中插入打印语句类似,但不同的是它是使用程序设计语言提供的自动调试工具或专门的交互式的调试工具来辅助你实现动态调试,而不需要对源程序进行任何改动。
调试工具通常都可以通过设置断点的方式进行调试。
不管采用哪一种途径,“穷举法”的一个通病就是忽视了“思考”的过程。
鉴于这个原因,建议将其作为下述调试方法的补充手段,或者在其他的调试方法都失败的情况下才采用。
2.归纳法(Induction)归纳法是从一个或多个错误的征兆出发,通过分析这些线索之间的关系找出错误的所在。
用归纳法调试的主要步骤如下。
(1)收集相关的数据。
列出你所知道的能够让你相信程序中存在错误的所有的征兆,包括程序正确运行的数据和不正确运行的数据。
(2)对数据进行整理。
对相关数据进行整理,列出对错误征兆出现的时机、位置和范围,以及不出现错误迹象的时机、位置、范围的详细列表。
(3)根据详细列表中情况的分析,提出关于错误的假设。
(4)证明假设的合理性。
用假设解释所有的原始测试数据,如果能够解释一切有关现象,则假设得到证实,否则假设不成立,或者是有多个错误同时存在。
6.3调试过程和方法,3.演绎法(Deduction)
(1)列出所有可能引起错误的原因和假设。
这些可以引起该错误的原因并不一定有很完整的解释,它们仅仅用来帮助你整理和分析可利用的测试数据而已。
(2)用已有的数据排除所有不可能的假设。
仔细检查所有的数据,尤其是存在矛盾的数据,然后排除不可能的引起错误的假设。
如果所有的假设都被排除了,那么就需要通过额外的测试用例来提供更多的数据,进行新的假设。
如果有多个可能的假设被保留下来,就选择一个最有可能的假设。
(3)精化剩下的假设,使之更具体化,以便精确地定位错误。
(4)证明剩下的假设,这一步十分重要,假设解释所有的原始测试数据,如果能够解释一切有关现象,则假设得到证实,否则假设不成立,或者是有多个错误同时存在。
6.3调试过程和方法,4.回溯法(Backtrack)对于规模较小的程序,回溯法是一个非常好的调试方法。
使用回溯法,测试人员从发现错误征兆的地方开始,沿程序的逻辑控制往回追踪程序代码,直到找出错误的根源或确定错误的范围为止。
但是,随着程序规模的扩大,回溯的路径越来越多,彻底的回溯几乎是不可能的。
5.测试用例法(Testing)还有一个调试方法是使用测试用例法。
请注意,这里所谈到的测试用例与前面章节中谈到的测试用例是不同的。
在测试环节所谈到的用于测试的用例,其测试用例设计的目的是为了发现以前没有发现的错误。
而在调试过程中所使用的测试用例,其用例设计的目的是为错误定位提供有用的信息。
也就是说,在发现了一个可疑的错误后,可以通过写各种测试用例来试图指出错误出现的精确位置。
测试用例法不是一种完全独立的方法,它通常和归纳法或演绎法联合起来使用。
6.3调试过程和方法,【实训项目】实训6-1关于系统安全的代码编写实训目标:
针对一段关于系统安全的代码编写。
实训要求:
如系统在15分钟内无数据操作,系统自动锁定,并给出系统提示。
背景知识:
为了加强图书馆书目查询管理系统的安全性,在管理员离开一段时间后,系统自动锁定,非管理员不能对系统进行操作:
要求在有数据操作时,记时停止;锁定后,提示重新登录系统。
实训内容:
在图书馆书目查询管理系统程序的基础上,编写一段关于系统安全的程序,要求系统在15分钟内无数据操作,系统将自动锁定。
实训,小结,编码风格:
是指在不影响程序正确性和效率的前提下,有效编排和合理组织程序的基本原则。
编码风格主要体现在以下4个方面:
源程序文档化,数据说明的方法,表达式和语句结构、输入/输出方法。
传统(结构化)编程方法:
每个模块至少要包括三个方面内容:
控制结构、算法和数据结构。
结构化程序设计的原则:
模块化;自顶向下、逐步细化的设计方法。
面向对象的程序设计方法的基本概念:
对象(Object)消息(Message)类(Class)继承(Inheritance)方法(Methods)实例(Instance),语言特点:
模块化、数据抽象和信息隐藏继承性并发性软件部件化与重用性调试过程和方法穷举法归纳法演绎法回溯法测试用例法,小结,1.编码风格主要体现在哪些方面。
2.结构化程序设计的原则。
3.面向对象的程序设计方法的语言特点。
4.编码调试的方法有哪些。
习题,针对学生所在学校实际情况,自行设计一个关于校园学籍管理的系统模型,在第四章和第五章课后实训题的基础上进行代码编写。
课后实训题,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 开发 流程 教程