,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,北华航天工业学院计算机系 制作,单击此处编辑母版标题样式,单击此处编辑母版标题样式,VC+,程序设计项目实践,贾振华,VC+程序设计项目实践贾振华,1,第,1,章 软件开发过程与方法,学习目标:,了解软件的开发过程,了解软件的开发方法,理解编码实现的规则,熟悉测试方法,第1章 软件开发过程与方法学习目标:,2,1.1,软件开发过程,软件开发过程是按照软件工业化的标准定义的在软件开发中必须具有的一系列过程规范。,软件开发过程是定义软件中的软件需求、软件设计,软件编码、软件测试、软件部署的实现目标和规范化的管理方法论。,软件开发过程是保证软件高质量完成的一系列任务的框架,它规定了完成各项任务的工作步骤。,1.1软件开发过程软件开发过程是按照软件工业化的标准定义的在,3,1.1,软件开发过程,1.1.1,需求分析,需求分析阶段研究的对象是软件项目的用户要求。,一方面,必须全面理解用户的各项要求,但又不能全盘接受所有的要求,因为并非所有的用户要求都是合理的,对其中模糊的要求还需要澄清,然后才能决定是否可以采纳。对于那些无法实现的要求,应向用户做充分的解释,以求得谅解。,另一方面,要准确地表达已经接受的用户要求。只有经过确切描述的软件需求才能成为软件设计的基础。,1.1软件开发过程1.1.1需求分析需求分析阶段研究的对象,4,1.1,软件开发过程,1.1.1,需求分析,软件需求分析的目标是准确理解用户的要求,进行细致的调查分析,将用户的非形式的要求转化为完整的需求定义,再将需求定义转换为相应的形式的规格说明。,1.1软件开发过程1.1.1需求分析软件需求分析的目标是准,5,1.1,软件开发过程,1.1.1,需求分析,制定软件的需求规格说明不仅仅是软件开发人员的事,用户也起着至关重要的作用。用户必须对软件功能和性能提出初步要求,并澄清一些模糊概念。而软件分析人员则要认真了解用户的要求,细致地进行调查分析,把用户“做什么”的要求最终转换成一个完全的、精细的软件逻辑模型并写出软件的需求规格说明,准确地表达用户的要求。包括的内容有:,1.1软件开发过程1.1.1需求分析制定软件的需求规格说明,6,1.1,软件开发过程,1.1.1,需求分析,1,)功能需求,2,)性能需求,3,)可靠性和可用性需求,4,)出错性处理需求,5,)接口需求,6,)界面需求,7,)其他需求,1.1软件开发过程1.1.1需求分析1)功能需求,7,1.1,软件开发过程,1.1.2,系统分析与设计,系统分析与设计可以分为总体设计和详细设计。,总体设计的基本目的是:从整体角度上来说,系统该如何实现;总体设计称为概要设计或初步设计。这个阶段工作将划分出系统的组成:程序、文件、数据库、人工过程和文档等,另外就是设计软件的结构,即确定系统由哪些功能模块组成,以及相互之间的关系。,详细设计的根本目标是确定怎样具体实现所要求的系统,即能够对系统进行精确描述,为编码打下基础。详细设计还没有编写具体代码,只是设计出“程序蓝图”,程序员根据这个蓝图编写出实际的程序代码。详细设计的结果决定了程序代码的质量。,1.1软件开发过程1.1.2系统分析与设计系统分析与设计可,8,1.1,软件开发过程,1.1.3,编码实现,编码实现是把系统分析与设计结果转换成某种程序设计语言代码的过程。程序的质量主要取决于软件的设计质量。但是,所选用的程序设计语言的特点及编程风格也对程序的可靠性、可读性、可测试性和可维护性产生深远的影响。,在编写代码过程中,注意编码风格,要求源代码的逻辑简明清晰、易读易懂,为达到这个目的,应该遵循下述规则:,1.1软件开发过程1.1.3编码实现编码实现是把系统分析与,9,1.1,软件开发过程,1.1.3,编码实现,1,)程序内部文档,程序内部文档包括恰当的标识符、适当的注释和程序的组织风格等。,选取含义鲜明的标识符,能够正确提示程序对象所代表的实体,有助于对程序的理解。如果使用缩写,缩写规则应该一致,并给每个标志符加上注释。,1.1软件开发过程1.1.3编码实现1)程序内部文档,10,1.1,软件开发过程,1.1.3,编码实现,1,)程序内部文档(续),注释是阅读和理解程序的重要手段,通常在每个模块的开始有一段序言性注释,简要说明模块的功能、主要算法、接口情况、重要数据说明以及开发人员、时间、版本等内容。注释的内容一定要正确,错误的注释不仅不对理解程序起帮助,反而错误的引导对程序的理解。,程序源代码的组织对于程序的可读性影响很大,利用适当的空白改善程序的视觉反应,使程序的层次结构清晰明显。,1.1软件开发过程1.1.3编码实现1)程序内部文档(续),11,1.1,软件开发过程,1.1.3,编码实现,2,)数据说明,数据说明的次序标准化,可按照数据结构或数据类型确定的次序。当多个变量名在一个说明语句中,应按照字母顺序排列这些变量。在说明一个复杂的数据结构时,应加注释说明方法和特点。不同数据类型应按存储空间的大小顺序说明。,1.1软件开发过程1.1.3编码实现2)数据说明,12,1.1,软件开发过程,1.1.3,编码实现,3,)语句构造,在构造语句时,应遵循的原则是简单而直接,不能为了提高效率而使程序变得过分复杂。具体规则如下:,在一行内只写一条语句,并采取适当的缩进格式,使程序的逻辑和功能变得更加明确;,1.1软件开发过程1.1.3编码实现3)语句构造,13,1.1,软件开发过程,1.1.3,编码实现,3,)语句构造(续),尽量避免复杂的条件;,尽量减少非操作的条件语句;,避免大量使用循环嵌套或条件嵌套;,使用括号来表达逻辑表达式或算术表达式的运算顺序。,1.1软件开发过程1.1.3编码实现3)语句构造(续),14,1.1,软件开发过程,1.1.3,编码实现,4,)输入输出,在设计和编写程序时应考虑如下规则:,对所有输入的数据都进行验证,从而识别错误的输入,以保证每个数据的有效性;,对所有输入数据进行输入提示,详细说明可用的选择或边界值;,1.1软件开发过程1.1.3编码实现4)输入输出,15,1.1,软件开发过程,1.1.3,编码实现,4,)输入输出(续),检查输入项重要组合的合法性,必要时报告输入状态信息;,使得输入的步骤和操作尽可能简单,并保持简单的输入格式;,输入一批数据时,最好使用数据结束标志,而不要由用户指定输入数据数目;,输入数据时,应允许使用自由格式输入,应允许有缺省值;,1.1软件开发过程1.1.3编码实现4)输入输出(续),16,1.1,软件开发过程,1.1.3,编码实现,4,)输入输出(续),在以交互式输入,/,输出方式进行输入时,要在屏幕上使用提示符明确提示交互输入的请求,指明可使用选择项的种类和取值范围。同时,在数据输入的过程中和输入结束时,也要在屏幕上给出状态信息;,当程序语言对输入格式有严格要求时,应保持输入格式与输入语句要求的一致性;,给所有的输出加注解,并设计输出报表格式。,1.1软件开发过程1.1.3编码实现4)输入输出(续),17,1.1,软件开发过程,1.1.3,编码实现,5,)效率,(,1,)有关程序效率的几条准则,效率是一个性能要求,目标值应当在需求分析阶段给出。软件效率以需求为准,不应以人力所及为准。,好的设计可以提高效率。,程序的效率与程序的简单性相关,不要牺牲程序的清晰性和可读性来不必要地提高效率。,1.1软件开发过程1.1.3编码实现5)效率,18,1.1,软件开发过程,1.1.3,编码实现,5,)效率(续),(,2,)算法对效率的影响,在编程序前,尽可能化简有关的算术表达式和逻辑表达式;,仔细检查算法中的嵌套的循环,尽可能将某些语句或表达式移到循环外面;,尽量避免使用多维数组;,尽量避免使用指针和复杂的表达式;,采用快速的算术运算;,不要混淆数据类型,避免在表达式中出现类型混杂;,尽量采用整数算术表达式和布尔表达式;,选用等效的高效率算法。,1.1软件开发过程1.1.3编码实现5)效率(续),19,1.1,软件开发过程,1.1.3,编码实现,5,)效率(续),(,3,)影响存储器效率的因素,在大型计算机中必须考虑操作系统页式调度的特点,一般来说,使用能保持功能的结构化控制结构,是提高效率的有效方法。,在微处理器中如果要求使用最少的存储单元,则应选用紧缩存储器特性的编译程序,在非常必要时可以使用汇编语言。,提高执行效率的技术通常也能提高存储器效率。提高存储器的关键是简单。,1.1软件开发过程1.1.3编码实现5)效率(续),20,1.1,软件开发过程,1.1.3,编码实现,5,)效率(续),(,4,)影响输入,/,输出的因素,对所有的输入,/,输出操作,安排适当的缓冲区,以减少频繁的信息交换。,对辅助存储(例如磁盘),选择尽可能简单的,可接受的存取方法;,对辅助存储的输入,/,输出,应当成块传送;,对终端或打印机的输入,/,输出,应考虑设备特性,改善输入,/,输出的质量和速度;,任何不易理解的,对改善输入,/,输出效果关系不大的措施都是不可取的;,不应该为追求所谓超高效的输入,/,输出,进而损害程序的可理解性;,良好的输入,/,输出程序设计风格对提高输入,/,输出效率会有明显的效果。,1.1软件开发过程1.1.3编码实现5)效率(续),21,1.1,软件开发过程,1.1.4,测试,软件测试按阶段划分为两种,一种是在编写出每个模块之后就进行的测试,称为单元测试。一种是编码阶段结束后的系统测试。,1,)首先了解软件测试的目的,,G.J.MYERS,对软件测试的目的提出的观点:,软件测试是为了发现错误而执行程序的过程。,一个好的测试用例能够发现至今尚未发现的错误。,一个成功的测试是发现了至今尚未发现的错误的测试。,1.1软件开发过程1.1.4测试软件测试按阶段划分为两种,,22,1.1,软件开发过程,1.1.4,测试,2,)软件测试的一些指导原则:,测试用例应由输入数据和预期的输出数据两部分组成。,测试用例不仅选用合理的输入数据,还要选择不合理的输入数据。,除了检查程序是否做了它应该做的事,还应该检查程序是否做了它不应该做的事。,应制定测试计划并严格执行,排除随意性。,长期保留测试用例。,对发现错误较多的程序段,应进行更深入的测试。,程序员避免测试自己的程序。,1.1软件开发过程1.1.4测试2)软件测试的一些指导原则,23,1.1,软件开发过程,1.1.4,测试,3,)测试方法一般分为两大类:动态测试方法和静态测试方法,而动态测试方法又分为,:,黑盒测试,白盒测试,1.1软件开发过程1.1.4测试3)测试方法一般分为两大类,24,1.1,软件开发过程,1.1.4,测试,(,1,)黑盒测试,黑盒测试又称为功能测试或数据驱动测试。该方法把被测试对象看成一个黑盒子,测试人员完全不考虑程序的内部结构和处理过程,只在软件的接口处进行测试,检查程序是否满足功能要求。,黑盒测试主要发现以下错误:,是否有不正确或遗漏了的功能。,在接口上,能否正确地接受输入数据,能否产生正确的输出信息。,访问外部信息是否有错。,性能上是否满足要求等。,注意:穷举地输入测试数据进行黑盒测试是不可能的。,1.1软件开发过程1.1.4测试(1)黑盒测试,25,1.1,软件开发过程,1.1.4,测试,(,2,)白盒测试,此方法把测试对象看作一个打开的盒子,测试人员须了解程序的内部结构和处理过程,以检查处理过程的细节为基础,对程序中尽可能多的逻辑路径进行测试,检验内部控制结构和数据结构是否有错,实际的运行状态与预期的状态是否一致。,一般情况下,系统测试应测试以下几个部分:,系统是否实现了需求分析阶段要求实现的所有功能;,在正常条件下,系统运行是否正常;,在非正常条件下,系统运行是否正常;,1.1软件开发过程1.1.4测试(2)白盒测试,26,1.1,软件开发过程,1.1.5,部署,简单地讲,部署就是安装,就是把软件放置到相应的地方,并且进行相应的配置(一般称作部署描述),让软件能够正常运行起来。,部署阶段