1、第三篇 面向过程的软件工程,3.软件需求分析,1.软件危机、软件工程,2.可行性研究,4.软件总体设计,5.软件详细设计,6.软件编码,7.软件测试,8.软件维护,1.软件危机、软件工程,1.1软件工程的发展史,“软件工程”由北大西洋公约组织(North Atlantic Treaty Organization, NATO)的计算机科学家1968年在联邦德国召开的国际会议上首次提出来的。软件工程学科产生的时代背景是“软件危机”。软件工程的发展和应用缓和软件危机,同时促使一门新兴的工程学科诞生。,程序设计时代:1946年1956年,硬件价格昂贵、运行速度低、内存容量小,程序员强调“程序设计技巧”
2、,设计的程序难读、难懂、难修改。,1.软件危机、软件工程,1.1软件工程的发展史,程序系统时代:1956年1968年,“程序+说明”时代;CPU速度、内存容量有很提高;计算机应用普及,软件需求量急增;“软件作坊”产生,软件质量得不到保证,产生 “软件危机”。,软件工程时代:1968年至今,“程序+文档”时代;超大规模集成电路提高了硬件性能;如果没有驾驭和开发大型软件的能力,就不能有效地使用计算机;软件价格、维护费用不断上升。这个时代,依然没有完全摆脱软件危机。,1.软件危机、软件工程,1.2软件危机及其表现形式,1、不能准确估计软件开发的成本与进度。,2、用户对“已完成的”软件系统经常不满意。
3、,3、软件产品质量往往靠不住。,5、软件成本在计算机系统总成本中所占的比例逐年上升。,6、软件生产效率低,供不应求。,除此之外,与软件开发和维护有关的问题还有很多。,4、软件难以维护。,软件危机:在计算机软件的开发和维护过程中所遇到的一系列严重问题。包括:如何开发软件以满足对软件日益增长的需求;如何维护数量不断增长的软件。,使用时暴露很多问题,1.软件危机、软件工程,1.3软件危机的原因,1、软件产品规模庞大,结构复杂,给开发和维护带来客观困难。,2、软件开发的管理困难。包括:进度控制困难、质量控制困难、可靠性无法保证。,3、软件开发维护费用急剧上升,威胁计算机应用的扩大。,5、生产方式落后。
4、,6、开发工具原始落后,生产效率提高缓慢。,4、软件开发技术落后。,只注重编译原理、操作系统原理、数据库原理的研究,不注重开发技术的研究,软件规模与复杂性增长了几个数量级,但生产方式仍然采用个体手工开发。,7、开发人员忽视需求分析的重要性,轻视软件维护。,1.软件危机、软件工程,1.4软件危机的解决途径,在目前的计算机硬件条件下,须解决以下问题:,1、应该对计算机软件有一个正确的认识,彻底清除“软件就是程序”的错误观念。,2、使用好的开发技术和方法,并且不断研究探索更好、更 有效的技术和方法。消除在计算机系统早期发展阶段形成 的一些错误观念和做法。,4、应该开发和使用好的软件工具,正如机械工具
5、可以“放大”人类的体力一样,软件工具也可以“放大”人类的智力,从而有效提高软件生产率。,3、要有良好的组织、严密的管理,各类人员要相互配合,共同完成任务。,1.软件危机、软件工程,1.5 基本概念:软件、软件工程及软件质量,软件:计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必需的数据。,软件工程是指导计算机软件开发和维护的一门工程学科。 采用工程的概念、原理、技术和方法来开发和维护软件。,1968年,第一届NATO会议提出,软件工程是为了经济地获得可靠的且能在实际机器上有效运行的软件,而建立和使用的完善的工程原理。,1993年,IEEE进一步给出软件工程是:把系统的、规范的
6、、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;研究中提到的途径。,定义有多种,但中心思想是把软件当作一种工业产品,要求“采用工程化的原理和方法对软件进行计划、开发和维护。”,软件工程是一门交叉学科,涉及到计算机科学、管理科学、工程学和数学,着重于具体软件系统的研制和建立。,特点:,1、用管理学的原理、方法来进行软件生产管理。,2、用工程学的观点来进行费用估算,制定进度和方案。,3、用数学的方法来建立软件可靠性模型以及分析各种算法和性质。,1.软件危机、软件工程,1.5 基本概念:软件、软件工程及软件质量,软件工程包括三个要素:,方法:即完成软件工程项目的技术手段。,工具
7、:支持软件的开发、管理、文档的生成。,过程:支持软件开发的各个环节的控制、管理。,1.软件危机、软件工程,什么是软件工程过程?,1.5 基本概念:软件、软件工程及软件质量,ISO 9000定义:软件工程过程(Software Engineering Process)是将输入转化为输出的一组彼此相关的资源和活动。,四种基本活动:,P (Plan)软件规格说明。规定软件功能及运行限制,D (Do) 软件开发。产生满足规格说明的软件,C (Check)软件确认。确认软件满足客户要求,A (Action)软件演进。满足客户的变更要求,1.软件危机、软件工程,1.5 基本概念:软件、软件工程及软件质量,
8、1.软件危机、软件工程,软件质量:是软件产品满足规定的和隐含的有关特征和特征的全体,或者说所有描述计算机软件优秀程度的特性的组合。,如何保证开发软件的质量,即软件质量保证(Software Quality Assurance,SQA)是软件工程学的一项重要内容。,软件质量可由以下6个特性来度量:功能性,可靠性,易用性,效率,可维护性,可移植性。,SQA要求:1)采用技术手段保证软件质量。2)组织技术评审。3)加强软件测试。4)推行软件工程标准。5)对软件质量进行度量。,1.5 基本概念:软件、软件工程及软件质量,软件生存周期,产品生存周期:一种产品从定货开始, 经过设计、制造、调试、使用维护,
9、直到该产品淘汰为止。,软件生存周期是从用户提出开发要求开始,直到该软件报废为止的这段时间,可分为3个时期:计划期、开发期和运行期。,1.软件危机、软件工程,1.6软件的生存周期及开发模型,问题定义,项目说明,可行性研究,可行性分析报告,需求分析,规范说明、初步用户手册,设计,体系结构设计、子规范说明,编码,各模块代码和单元测试,测试,系统测试、测试报告,维护,计划期,开发期,运行期,培训、反馈、维护报告,(瀑布模型),1.软件危机、软件工程,1.6软件的生存周期及开发模型,(其它模型),快速原型法模型-从用户需求出发,快速建立一个原型,使用户通过在文计算机上试用这个原型,初步表达出自己的要求,
10、并通过反复修改、完善,逐步靠近用户的全部需求,最终形成一个完全满足用户要求的新体系。,增量模型 螺旋模型 智能生存周期模型 面向对象生存周期模型,1.软件危机、软件工程,1.6软件的生存周期及开发模型,第三篇 面向过程的软件工程,3.软件需求分析,1.软件危机、软件工程,2.可行性研究,4.软件总体设计,5.软件详细设计,6.软件编码,7.软件测试,8.软件维护,问题定义阶段:,确定软件系统所要解决的任务,分析人员在与用户和部门负责人交流之后,应提出关于问题性质、工程目标和规模的书面报告,即软件系统目标与范围的说明。,确定开发软件的总体目标, 确定开发软件的适用范围, 确定软件与外界之间的接口
11、关系, 确定软件的开发进度、成本和风险的草案, 确定所开发软件与原有系统的兼容程度, 分析系统的可行性, 确定软/硬件的支撑环境,2.可行性研究,即进行可行性研究,可行性研究:,目的在于用最小的代价确定在问题定义阶段确定的系统目标和规模是否现实,所确定的问题是否可以解决,系统方案在经济上、技术上、操作上和法律上是否可以接受。,形成推荐方案,经济:成本-效益论证,技术:是否先进、是否达到目标、技术人员是否具备相应水平,操作:系统的操作方式是否行得通,法律:侵权、违法;合同责任,专利权,版权,背景情况:包括国内外技术水平、历史、现状、市场需求等。 系统描述:包括总体方案、课题分解、关键技术、阶段目
12、标和总体目标、计划、进度等 。 效益分析:包括经费概算、预期经济效益和社会效益等。 技术评估:包括人员配备、设备条件、已有的工作基础等。 管理概要:包括重要的研究成果、说明、建议和影响。 其它相关事项:包括版权、责任以及未来可能发生的变化等。,2.可行性研究,第三篇 面向过程的软件工程,3.软件需求分析,1.软件危机、软件工程,2.可行性研究,4.软件总体设计,5.软件详细设计,6.软件编码,7.软件测试,8.软件维护,需求分析阶段:,将用户的需要(need)转变为对软件的需求(requirement),用户和分析人员双方共同来理解系统的需求,并将共同理解形成一份文件,即软件需求说明书。该阶段
13、主要是对用户的业务活动进行分析,明确在用户的业务环境中软件系统应该“做什么”。,特点:,1、用户与开发人员无共同语言,很难进行交流,2、用户很难精确完整地提出它的功能要求,3、需求分析出现错误,将导致整个软件开发的失败,3.软件需求分析,强调“需”,强调“需”,同时追求满足,“需”的实现,需求定义不清楚是整个软件开发失败的重要原因。1994年美国软件专家Grady统计了4个大型计算机系统的软件缺陷分布:,业界有40-20-40规律的说法:需求分析、设计工作量约40%,软件编程只占20%,而测试维护又占40%。,3.软件需求分析,需求分析的主要任务,确定系统的综合要求,范围要求-确定软件的规模及
14、处理的对象和性质。, 功能要求-系统必须完成的数据要求和处理要求,这是最主要的功能要求。包括:数据录入、查询、统计分析、打印报表等主要操作。, 性能要求-一般包括:系统所需的存储空间、系统响应时间、查询速度、数据的精度、系统的可靠性程度等。, 限制和约束要求-说明开发成本、开发周期和可使用的资源等条件对软件开发系统的限制与制约。, 运行要求-系统运行的环境。包括:支持系统运行的操作系统、数据库管理系统、数据通信接口等。,3.软件需求分析,需求分析的主要任务,分析系统的数据需求并建立逻辑模型,需求分析评审-目的是发现需求的错误和缺陷,并修正。因此,评审是进行全面仔细检查,以确认“软件需求规格说明
15、书”。,编写文档资料-经过需求分析,确定了系统必须具有的功能和性能,定义了系统中的数据和数据处理的主要算法。最后将这些分析的结果形成软件需求规格说明书,作为这一阶段的成果以文档的形式记录下来。,因为软件系统本质是信息处理系统,系统处理和产生的信息对软件设计有很大影响。分析系统的数据需求通常用建立数据模型的方法,如E-R图。对上述两项需求结果进行分析,确定系统构成,用图文形式,建立新系统的逻辑模型。通常采用数据流图、数据字典等来描述。,3.软件需求分析,软件需求规格说明书,软件需求规格说明书(SRS,Software Requirement Specification)是需求分析阶段的最后成果,
16、是软件开发的重要文档之一。,作用:,1、便于用户与开发人员进行理解和交流,2、作为开发人员进行设计和编程的根据,3、作为软件开发完成后验收的依据,3.软件需求分析,需求说明书包括的内容和书写参考格式如下:,一、概述 二、数据描述 数据流图 数据字典 系统接口说明 内部接口 三、功能描述 功能 处理说明 设计的限制 四、性能描述 性能参数 测试种类 预期的软件响应 应考虑的特殊问题 五、参考文献目录 六、附录,3.软件需求分析,需求分析的主要工具,在系统需求分析过程中为了准确描述需求,采用的是结构化的分析描述工具。主要有数据流程图(DFD:Data Flow Diagram)、数据字典(DD)、
17、结构化语言、判定表和判定树。,数据流程图是描述数据处理过程的最有力的工具。以图形的方式描述数据处理系统内部数据的工作情况,是结构化分析方法的最主要部分。,数据字典是对DFD中出现的所有数据元素(即系统中的所有数据)进行定义,使DFD中的数据流名字、加工名字和文件名字具有确切的解释。,3.软件需求分析,数据流程图(data flow diagram,简称DFD),用图形的方法来表达数据处理的过程。,主要图形元素,数据流,由一组固定成分的数据组成,是沿箭头方向传送数据的通道。每个数据流都必须有一个名称。该名称写在数据流的箭头旁边。数据流反映了系统中流动的数据,表现的是动态数据的特征。同一个数据流程
18、图中不能有两个数据流名字相同。,3.软件需求分析,主要图形元素,数据存储,数据文件,数据库,数据文件在数据流图中起着暂时保存数据的作用,所以也被称为数据存储。数据文件读文件时数据流的方向由文件指向加工;写文件时数据流的方向由加工指向文件。数据文件反映了系统中静止的数据,表现的是静态数据的特征。,3.软件需求分析,主要图形元素,加工,对数据进行的处理和操作。每个加工也有一个命名,名字应能反映该加工完成的功能。对加工还需要编号,以便查出加工所在位置。,数据源点或终点,表示数据流程图中素出现的数据始发点或终止点。是对数据流程图的外围环境的注释说明。,3.软件需求分析,例:图书馆借书/还书活动的数据流
19、程图,3.软件需求分析,例:学生档案管理系统数据流图,3.软件需求分析,数据流图画法,1.找出系统数据源点和终点:外部实体。,2.找出外部实体的输入与输出数据流。,3.在图的边上画出系统外部实体。,4.从外部实体的输出数据流出发,按照系统逻辑需要,逐步画出一系列逻辑加工,直到找到外部实体所需的输入数据流,形成数据流的封闭。,5.按照上述步骤,再从各加工出发,画出所需子图。,3.软件需求分析,数据流图示例,用户,操作信息,用户,操作结果,用户,借阅信息,用户,操作信息,书籍信息,查询信息,查询结果,借阅结果,书籍结果,查询信息,查询结果,用户,书库,3.软件需求分析,例:某学院招生考试处理系统,
20、该系统有如下功能:,(1)对考生报送的报名表进行检查; (2)对合格的报名表编写准考证号码,并将准考证返回考生,而后将准许考试的考生名单送往试卷处理中心; (3)对试卷处理中心送来的成绩进行检查,并根据考试管理小组指定的合格标准审定考试合格人员名单; (4)填写考生录取通知单发送考生,对没有通过考试的考生发放考试成绩单。,3.软件需求分析,请同学们自己练习!,3.软件需求分析,3.软件需求分析,3.软件需求分析,3.软件需求分析,数据字典(data dictionary,简称DD),描述数据流程图中全部数据流和文件的详细情况,主要条目,数据流条目:对数据流程图中全部数据流的命名以及定义数据流的
21、含义和内容。,描述一个数据流采用如下几种符号。,3.软件需求分析,例:银行取款业务的数据流图中,存储文件“存折”的DD定义如下:,3.软件需求分析,主要条目,文件条目:对数据流程图中全部文件和记录的定义,内容包括文件名、对文件的说明摘要、数据的组成、数量及存取方式等。,例如:文件名:学生成绩内容摘要:某学院学生考试成绩组成:学院+专业+学号+姓名+课程号(课程名)+考试成绩,3.软件需求分析,主要条目,数据项条目:对每个数据项的定义,包括数据项名称、类型、字长、取值范围及简单描述,类型主要有六种,即字符型(C)、整型(I)、双精度整型(DI)、实型(R)、双精度实型(DR)、逻辑型(L)。简单
22、描述主要说明该项数据的来源和作用。数据项条目也用表的形式表示。,基本加工条目:对基本加工进行的精确描述,例如:登录IF 号码有效 THENIF 密码正确 THEN登录正确ELSE 提示密码错误ELSE 身份无效,3.软件需求分析,(a) 数据流条目,(b) 数据存储条目,(c) 数据项条目,(d) 基本加工条目,3.软件需求分析,判定表与判定树,在描述加工逻辑时,如果有一系列逻辑判断,用结构化语言描述就不直观,也不简捷,这时可用判定表或判定树来描述。,判定表是用表格的形式列出在什么条件下作什么处理,一目了然。判定树是以一棵从左向右生长的树型表示来描述在各种条件下要作的事情,树的各个分支表示某种
23、条件,分支的端点表示该分支对应的条件下要作的处理。,3.软件需求分析,例:“检查订货单”的加工逻辑是如果金额超过500元,又未过期,则发出批准单和提货单;如果金额超过500元,但过期了,则不发批准单;如果金额低于500元,则不论是否过期都发出批准单和提货单,在未过期情况下不需发出通知单。,3.软件需求分析,判 定 表,3.软件需求分析,判 定 树,3.软件需求分析,第三篇 面向过程的软件工程,3.软件需求分析,1.软件危机、软件工程,2.可行性研究,4.软件总体设计,5.软件详细设计,6.软件编码,7.软件测试,8.软件维护,软件设计阶段:,将软件需求转换为软件表示。,设计阶段是解决软件系统“
24、如何做?”的问题,也就是软件系统的功能、性能如何实现,最后得到软件设计说明书。设计质量的好坏直接影响到软件系统的可靠性。,目标:,1、提高可维护性。即可读性、可扩充性和可修改性,2、提高可理解性。即结构清晰,层次分明,结构程度高,文档规范化、标准化,3、提高可靠性。包括正确性和健壮性两个方面,4.软件总体设计,软件设计流程图,总体设计,复审,修改,可接受,详细设计,复审,修改,总体设计是为软件系统定义一个逻辑上一致的结构:进行模块划分,建立模块层次结构及模块间的调用关系,设计全局数据结构及数据库,设计系统接口及人机界面等。,详细设计是根据每个模块的功能描述,设计出每个模块的实现算法,以及这些算
25、法的逻辑控制流程,并设计出这些模块所需的局部数据结构。,4.软件总体设计,设计说明书包括的内容和书写参考格式如下:,概述-描述设计工作总的范围,包括系统目标、功能、接口等。,系统结构-用软件结构图说明本系统的模块划分,扼要说明每个模块的功能,分层次地给出各模块之间的控制关系。,数据结构及数据库设计-对整个系统使用的数据结构及数据库进行设计,包括概念结构设计、逻辑结构设计、物理设计。,模块设计-根据模块的功能,用详细设计表示工具描述每个模块的流程,描述每个模块用到的数据结构。,接口设计-包括人机界面设计、外部接口设计等。,4.软件总体设计,软件设计概念和原理,抽象化,对软件系统进行模块设计时,可
26、以有不同层次的抽象。在抽象的最高层,可以使用问题所在环境的语言,以概括的方式描述问题的解法。在抽象的较低层,则采用过程化的方法,使用面向问题和面向实现的术语描述问题的解法。,数据抽象:一个命名的说明数据对象的数据集合,过程抽象:一个命名的指令序列,控制抽象:隐含了程序控制机制,不必说明内部细节,4.软件总体设计,软件设计概念和原理,逐步细化,将软件的体系结构按照自顶向下的原则,对各个层次的过程细节和数据细节逐层细化,直到能够用某种程序设计语言的语句实现为止,从而最后确定整个体系结构。,模块化,模块化就是将程序划分为若干个模块,每个模块完成一个特定的子功能的过程。这些具有子功能的模块可以被集中起
27、来组成一个整体以满足整个问题的需要,从而完成指定的功能。模块化是开发复杂的大型软件系统所必须采用的方法。,4.软件总体设计,模块划分与软件成本关系,4.软件总体设计,软件设计概念和原理,模块的独立性及其度量,模块的独立性是指:软件系统中的每个模块能够完成一个功能专一、相对独立的特定子功能,而与软件系统中的其它模块之间的接口尽量简单化。独立性好的模块具有易于开发、易于组合、易于修改以及易于测试的特点。,内聚性,耦合性,对模块内部各种数据以及各种处理之间彼此结合的紧密程度的度量。,不同模块之间互相连接的紧密程度的度量,设计软件结构时要充分考虑模块的独立性原则,应力求高内聚性、低耦合性。,4.软件总
28、体设计,软件设计概念和原理,信息隐蔽与局部化,信息隐蔽,局部化,指每个模块的实现过程对其它模块而言是隐蔽的,即一个模块中包含的数据和过程不允许其它不需要这些信息的模块访问。,将一些关系密切的数据或过程尽可能的放在一起。,局部化与信息隐蔽的概念是密切相关的,局部化有利于实现信息隐蔽。采用这种方法进行模块的划分可以得到最佳的程序结构。,4.软件总体设计,软件设计准则,模块划分的原则,提高模块的独立性,降低模块接口的复杂度。,确定适当的模块规模,一个模块的语句数量尽量在3050 之间,模块太大会造成编程和测试的低效,而模块太小又会使系统杂乱。,选取合适的深度、宽度、扇入/扇出,深度 软件结构中的模块
29、层数。,宽度 软件结构中同层次上的模块总和的最大值。,扇入 一个模块有多少个上级的模块直接调用。,扇出 一个模块直接调用的下级模块总数。,上级模块、从属模块 上、下两层的模块a和b,且a调用b,则a为上级模块,b为从属模块。,4.软件总体设计,软件结构应该满足:,顶部宽度最小,中部宽度最大,底部宽度次之;在结构顶部有较高的扇出数,在底部有较高的扇入数。,模块的作用域应在模块控制域之内,以减弱模块间的耦合性,例如:B的作用域为D、E,B的控制域为B、D、E、F、G、H,则B的控制域包括了作用域,软件结构的划分是合理的,4.软件总体设计,结构化设计方法(SD,Structured Design),
30、SD是一种把在需求分析阶段得到的数据流图映射为软件结构图的基于数据流的系统设计方法。SD方法的出发点是建立一个结构良好的软件系统,基本思想来源于模块化、自顶向下逐步求精的功能划分,评价软件结构的准则是模块独立性,即模块内聚性高、模块之间的耦合性低。SD方法提供了从数据流图导出软件结构的方法和规则。, 精细化数据流图,确定数据流图的类型。, 指出各种信息流的流界。, 将数据流图映射为软件结构。, 精细化软件结构图。, 开发接口描述和全程数据描述。,基本过程:,4.软件总体设计,SD方法是面向数据流图的,需要根据数据流图确定问题的类型,数据流图按性质分两种:变换型和事务型。一般为两种类型的混合。然
31、后从数据流图导出系统结构图,并根据模块独立性原则对导出的系统结构图进行优化。,变换型数据流图,可将此类数据流图看成是对输入数据进行转换而得到输出数据的处理,转换处理过程大致分为输入数据、变换数据、输出数据三步。,4.软件总体设计,4.软件总体设计,变换型分析设计,设计步骤:,1.确定逻辑输入和逻辑输出的边界,找出变换中心。若变换中心不好确定,一般先找出逻辑输入和逻辑输出,夹在它们中间的就是变换中心。,逻辑输入,逻辑输出,4.软件总体设计,变换型分析设计,设计步骤:,2.设计软件结构的顶层和第一层 3.设计中下层模块 4.对初始结构图优化,事务型数据流图,可将此类数据流图看成是对一个数据流进行加
32、工后,根据处理的特点和性质,按加工的结果选择一个输出数据流继续执行的处理。,4.软件总体设计,事务型分析设计与变换型类似,第三篇 面向过程的软件工程,3.软件需求分析,1.软件危机、软件工程,2.可行性研究,4.软件总体设计,5.软件详细设计,6.软件编码,7.软件测试,8.软件维护,面向对象的程序设计方法,面向对象(Object Oriented)程序设计方法简称为OO方法。面向对象的程序设计是以对象为基础,以消息驱动对象执行的程序设计技术,是基于“对象、类、继承性、多态性等技术特征”的构造系统的软件开发方法。, 各种对象组成了客观世界。, 所有对象划分成各种对象类,每个对象类都定义一组数据
33、和操作。, 按照子类和父类的关系,可将若干对象类组成一个层次结构的系统。, 对象之间仅通过消息互相联系。,特点:,5.软件详细设计,结构化程序设计方法(参考相关书籍),现实世界中存在的一个事物。它可以是物理的(例如:一本书),也可以是概念的(例如:一个开发项目)。对象由一组数据(属性)以及对数据的操作(方法)组成。因此对象可以被看成是一个封装了数据和操作的实体。,面向对象的基本概念,什么是“面向对象”?现今仍存在不同的看法。Coad和Yourdon给出的定义是“面向对象=对象+类+继承+消息传递”。也就是说:如果一个软件系统使用这样4个概念进行设计和实现,那这个软件系统就是面向对象的。,5.软
34、件详细设计,1.对象,具有相同特征和行为的对象经过抽象,就形成了类。即类就是具有共同属性、共同操作性质的对象的集合。其中一个具体的对象就是该类中的一个实例。,面向对象的基本概念,例如:,学校可以定义为一个类,包括所有的大、中、小学校。而华北电力大学则是学校类的一个实例。,5.软件详细设计,2.类,类包含两方面的内容:外部特性和内部实现。,外部特性:即类的外部接口描述,内部实现:即类的内部表示及类定义的具体实现方法,定义了一组使外界可以识别的操作符(每个操作符由操作名称和操作对象组成),用消息模式的形式来解释,通过外部特性,使用户可以了解这样一个类是什么,能够做什么事情。,定义了一组内部实现处理
35、能力的程序以及由这组程序所识别的变量。类的内部实现对用户来说是不透明的,用户只需了解该类能够做什么事情就足够了。,5.软件详细设计,例:“学生类”实现示意图,5.软件详细设计,类的层次:超类(Superclass)和子类(Subclass)。,5.软件详细设计,作用在某个对象上的各种具体的操作。,面向对象的基本概念,例如:,某一windows窗口有“最大化”、“最小化”、“打开”、“关闭”等操作。,某一篮球运动员有“运球”、“传球”、“投篮”、“跑位”等操作。,5.软件详细设计,3.方法,一个对象与另一个对象的通信单元,是要求某个对象执行某个处理或回答某些信息的规格说明。,面向对象的基本概念,
36、表示类之间相似性的一种机制。任何一个对象都是某个类的实例,它将继承该类定义的数据结构和服务功能。,例如:,“学生”是一类对象,“研究生”、“大学生”、“中学生”等都是“学生”类的“子类”。因而继承了“学生”类的性质.,5.软件详细设计,4.消息,5.继承,继承性是自动共享类及对象的语义特性,(1)新产生的对象自动继承该类的语义特性;,(2)继承传递性:子类自动继承其超类的语义特性;对多层类层次结构,下层子类可以继承其上各层超类的语义特性;,(3)多重继承:子类可以从它的多个超类中继承它们的语义特性,5.软件详细设计,一种信息隐蔽技术。目的在于将对象的使用者与对象的设计者分开。,面向对象的基本概
37、念,被开发系统的应用领域,即客观世界中由该系统处理的业务范围。,(1) 对象具有清楚的边界,对象内部的数据结构和操作限定在这个边界之内。,(2) 对象具有统一的外部接口,描述了该对象和其它对象之间的关系。,(3) 对象的内部实现是不公开的。,5.软件详细设计,6.封装,7.问题域,面向对象的基本概念,OO方法是通过分析、研究实际应用中的实体、实体的属性及其相互关系,将客观问题域中的实体抽象为计算机求解域中的对象。再对具有相同属性和功能的对象进行更高级的抽象得到能够求解的对象类。最后求解对象类,得到问题的解答。,对象具有自己的数据结构(也称为属性),用于描述对象的状态(例如:用一个字符串、整数和
38、逻辑型字段组成的记录描述教师对象的姓名、年龄和婚姻状况)。对象的状态通过各自的行为方法(操作)可以改变。,5.软件详细设计,8.OO,例:宾馆客人登记系统,宾馆客人登记系统用于在宾馆总台处理客人入住登记业务,它是宾馆前台管理信息系统的一个子系统,是整个宾馆前台管理数据流中有关客人数据的源头。具体的功能(简化的)要求是:(1) 客人可以是散客或团体成员;(2) 既可以办理即时到达客人的入住登记,又可以办理预订客人的入住登记。,5.软件详细设计,结构化方法的设计处理,5.软件详细设计,OO方法的设计处理,第一步:从需求中找出名词术语,客人、散客、团体、团体成员、总台、房类、房号和房态,第二步:确定
39、应用系统中的实体,散客、团体、团体成员、房类、房号,第三步:分析实体的属性,确定数据结构,(1)散客和团体成员有类似的属性:姓名、年龄、国籍、证件号码、职业、到达日期、离开日期、账号、房号和房租(团体成员还要具有团体的属性,包括:团名、团体账号、所属旅行社等)。,5.软件详细设计,(2)团体的属性:团体名称、团体账号、人数、团长姓名、随团导游姓名、到达/离开日期、到达航班/车次。,(3)房类的属性:名称、数量、日期、售价。,(4)房号的属性:编号、类别、日期、状态、房租。,第四步:确定系统操作,(1)散客/团体成员操作包括:输入(无预订)、修改、查询、删除、登记(有预订)、统计。,(2)团体操
40、作包括:输入(无预订)、修改、查询、删除、登记(有预订)。,(3)房类/房号操作包括:浏览显示、查询、出售、修改、加入、删除、统计、报表打印。,5.软件详细设计,第三篇 面向过程的软件工程,3.软件需求分析,1.软件危机、软件工程,2.可行性研究,4.软件总体设计,5.软件详细设计,6.软件编码,7.软件测试,8.软件维护,软件构造阶段:,为每个模块编写程序,编程的任务是为每个模块编写程序,产生可执行的代码,把软件的需求真正付诸实践,也就是将模块的逻辑描述转换成某种程序设计语言编写的程序。,编程语言的选择,最少工作量原则,最少技巧性原则,最少错误原则,最少维护原则,最少记忆原则,同时应考虑项目
41、的应用领域、用户的要求、程序员的经验和知识、软件可移植性要求等。,6.软件编码,编程风格,编程风格是指一个程序员在编程时所表现的特点、结构、逻辑思路的总和。编程风格包括源程序文件、数据说明、语句构造、输入输出安排等。编程风格的原则是简明性和清晰性。,源程序文件,源程序中各种变量如何命名,如何加注解,源程序应按什么格式写,这对于源文件的编写风格有至关重要的作用。,各种名字的命名,源程序中的注解,源程序书写格式,6.软件编码,编程风格,数据说明,为了使数据定义更容易看懂,更容易维护,要建立一些指导原则。数据说明的次序应该标准化,例如,按照数据结构或数据类型确定说明的次序。有次序就容易查阅,因此能够
42、加速测试、调试和维护的过程。,语句构造,构造语句时应该遵循的原则是每个语句应该简单而直接,不能为了提高效率而使程序变得过分复杂。尽量避免复杂的条件测试;尽量减少对“非”条件的使用;尽量避免使用多层嵌套的循环和分支;利用括号使表达式的运算顺序清晰直观; 心理换位:“如果我不是编码人,我能看懂它吗?”,6.软件编码,编程风格,输入输出,保持输入格式简单,对所有输入数据都进行校验,使用数据结束标记,不要要求用户指定数据的数目,当程序设计语言对格式有严格要求时,应保持输入格式的一致性,设计良好的输出报表,给所有的输出数据加标记,6.软件编码,第三篇 面向过程的软件工程,3.软件需求分析,1.软件危机、
43、软件工程,2.可行性研究,4.软件总体设计,5.软件详细设计,6.软件编码,7.软件测试,8.软件维护,软件测试的目标:,在软件交付使用之前必须经过严格的软件测试,通过测试尽可能找出需求分析、总体设计、详细设计和软件编程中的错误,并加以纠正,才能得到高质量的软件。软件测试不仅是软件设计的最后复审,也是保证软件质量的关键。,测试的定义:为了发现程序中的错误而执行程序的过程。,7.软件测试,测试用例由两部分组成:输入数据和预期的输出结果,同时选用合理的和不合理的输入数据作为测试用例,应同时检查程序是否做了不应做的事,应长期保留所有的测试用例,直至程序系统被废弃为止,7.软件测试,软件测试的原则:,
44、软件测试方法:,7.软件测试,一般把被测程序在机器上运行称为“动态测试”,不在机器上运行被测程序称为“静态分析”。均属于软件测试。动态测试方法中又根据测试用例的设计方法不同,分为黑盒测试和白盒测试两类。,按照测试的定义,测试是一个执行程序的过程,即要求被测程序在机器上运行。实际上不在机器上运行也可以发现程序的错误。,白盒法,黑盒法,白盒法是把程序看成装在一个透明的白盒子里,也就是人们完全了解程序的结构和处理过程,按照程序内部的逻辑结构,检验程序中的每条通路是否都能按照预定的要求正确工作。,黑盒法是完全不管程序内部的结构和处理,把程序看成一个黑盒子,只按照程序需求说明书规定的功能和性能正常使用,
45、程序是否能适当地接受输入数据并产生正确的输出信息。,7.软件测试,对每种可能的数据都进行测试,就可以得到完全正确的程序,这种包含所有可能情况的测试称为穷尽测试。对于实际程序,穷尽测试通常是做不到的。,白盒法,程序中每条可能的通路都执行一次,例如:一个有5个分支的判定语句循环执行20次,该段程序共有520条可能的执行通路(约为1014)。 如果每一毫秒完成一条路径的测试,约需3100年,黑盒法,例如:一个程序需要3个整数的输入数据,如果计算机字长为16,则每个数据可能取的值为216个,对所有输入数据各种可能值的排列组合都进行测试,可能的排列组合216216216 = 248 31014种, 若该
46、程序执行一次需要1ms,用所有数据来测试约1万年,7.软件测试,软件测试用例的设计:,设计测试用例是测试阶段的关键技术。测试用例包括预定要测试的功能,输入的测试数据和预期的结果。其中最难的是设计测试用的输入数据。,不同的测试数据发现程序错误的能力差别很大,为了提高测试效率,降低测试成本,应该选用高效的测试数据,即选用少量“最有效”的测试数据,做尽可能完备的测试。,设计测试用例的基本目标是:确定一组最可能发现某个错误或某类错误的测试数据。通常需要联合使用多种设计测试数据的技术。通常使用黑盒法设计基本的测试用例,再用白盒法设计一些补充用例。,7.软件测试,软件测试用例的设计:,黑盒测试技术,黑盒测
47、试即功能测试,测试时完全不考虑程序内部细节、结构和实现方式,仅检验程序结果与需求说明书的一致性。黑盒测试不关心程序内部的逻辑,只是根据程序的功能说明来设计测试用例。黑盒测试分为等价类划分、边值分析、错误推测和因果图法等。,7.软件测试,等价类划分,将输入数据的可能值分成若干个等价类,每一类的一个代表值在测试中的作用就等价于这一类中的其它值。如果某一类的一个例子发现了错误,这一等价类中的其它例子也能发现同样的错误。反之,如果某一类中的一个例子没有发现错误,则认为这一类的其它例子也不会发现错误。,因此,可以从每个等价类中只取一组数据作为测试数据,这样选取的测试数据最有代表性,最可能发现程序中的错误
48、。,7.软件测试,用等价类划分法设计测试用例分两步:先划分等价类,再选择测试用例。,划分等价类,研究程序的功能和说明,从中确定输入数据的有效等价类和无效等价类。先取出每一个输入条件,然后将每个输入条件划分成两个或更多的等价类。,有效等价类:,无效等价类:,程序的各种有效输入,程序的其它可能的输入情况(即错误输入),7.软件测试,划分等价类的原则:,如果某个输入条件说明了输入值的范围(如1999),则可划分一个有效等价类(1999)和两个无效等价类(小于1和大于999)。,如果某个输入条件说明了输入数据的个数(如标识符由16个字符组成),则可划分出一个有效等价类和两个无效等价类。,如果某个输入条
49、件说明了输入数据的一组可能的值,而且程序对不同输入值做不同处理,则每个允许的输入值是一个有效等价类,另外还有一个无效等价类(任何不允许的输入值)。,7.软件测试,划分等价类的原则:,如果一个输入条件说明了输入数据必须遵循的规则,则可划分一个有效等价类(符合规则)和若干个无效等价类(从各种不同角度违反规则)。,如果某一等价类中各元素在程序中的处理方式有区别,则应把这个等价类分解成更小的等价类。例如输入数据为整数,则可划分出正整数、零和负整数三个有效等价类。,7.软件测试,为了正确划分等价类,一定要注意积累经验并正确分析被测试程序的功能。,划分等价类用例设计步骤:,为每个等价类规定一个惟一的编号。,设计一组新的测试用例数据,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步骤,直到所有有效等价类均被测试数据所覆盖。,设计一组新的测试用例数据,使其只覆盖一个无效等价类。重复这一步骤,直到所有无效等价类均被覆盖。,