软件工程讲义 软件工程电子书ppt课件.ppt
1,实用软件工程,2,1课程学时 总学时:48学时;其中讲课:32学时; 上机:16学时2. 学习成绩考核方法 平时成绩(包括考勤和作业)30%,上机10%,期末考试60%。,3,Chapter 1 概述,1.1 软件工程的产生1.2 软件工程学1.3 软件生命周期1.4 软件开发模型1.5 案例-在线宠物商店,4,1.1.1 软件工程发展史软件是指计算机程序及其有关的数据和文档。软件生产的各个阶段必需完成的有关计算机程序的功能、设计和使用的文字或图形资料,这些资料称为“文档”。1. 程序设计阶段2. 软件=程序+文档阶段3. 软件工程阶段4. 第4代技术阶段,1.1 软件工程的产生,5,1.1 软件工程的产生,1.1.2 软件危机爆发时间1967年NATO的研究组首次提出1968年NATO软件工程会议首次提出软件工程概念1968-2011, 近40年“危机”一词软件危机依然存在,Crisis!,6,1.1 软件工程的产生,软件危机面对的问题艺术 vs. 标准化错误的发现软件需求获取软件支持和维护开发速度 vs. 市场需求开发周期过长、开发成本过高研发风险软件Trouble软件开发中的复杂的协作(人员,问题,过程)不同角色的软件神话(管理者,用户,开发者,大众),7,1.1 软件工程的产生,采用什么方法缓解危机硬件 ?建筑学?拍电影?软件工程!,8,1.2 软件工程学,1.2.1 什么是软件定义Program + Data Structure + Documents Wang Jiahua, 软件工程, pp.1软件的性质复杂性难以描述性不可见性变化性,风险性易于副本的大批量生产强合作性,9,1.2 软件工程学,1.2.1 什么是软件工程Fritz Bauer:“建立和应用完善的工程原理以便经济地得到在真实机器上可靠和有效运行的软件重原理、轻技术、无度量IEEE:(1)应用系统的有规则的定量的方法开发、使用和维护软件;即应用工程于软件。(2)研究(1)中的方法粗糙,10,1.2 软件工程学,Definition软件工程是软件开发、运行、维护和引退的系统方法。因而软件工程是指导计算机软件开发和维护的工程学科。软件工程采用工程的概念、原理、技术和方法来开发与维护软件。软件工程的目标是实现软件的优质高产,软件工程的目的是在规定的时间、规定的开发费用内,开发出满足用户需求的、高质量的软件产品。,11,1.2 软件工程学,1.2.3 软件工程学的内容 软件开发技术和软件工程管理。软件开发技术包含软件工程方法学、软件工具和软件工程环境。软件工程管理学包含软件工程经济学和软件管理学。1. 软件工程方法学 三个要素:方法,工具,过程。2. 软件工具,12,1.2 软件工程学,3. 软件工程环境:是方法和工具的结合。 “软件开发环境是相关的一组软件工具集合,它支持一定的软件开发方法或按照一定的软件开发模型组织而成”。 计算机辅助软件工程(Computer Aided Software Engineering,CASE) 是一组工具和方法的集合,可以辅助软件生命周期各阶段进行软件开发活动。4. 软件工程管理目的是为了能按预定的时间和费用,成功地生产软件产品。内容:费用管理、人员组织、工程计划管理、软件配置管理。软件工程各阶段所产生的全部文档和软件本身构成软件配置。,13,1.2 软件工程学,1.2.4 软件过程软件过程的定义ISO 9000把软件过程定义为:“把输入转化为输出的一组彼此相关的资源和活动”。软件开发过程,是把用户要求转化为软件需求,把软件需求转化为设计,用代码实现设计并对代码进行测试,完成文档编制并确认软件可以投入运行使用的过程。,14,1.2 软件工程学,为什么要引入软件过程?(1/2)软件工作的范围软件的开发风险(规模、周期、复杂度),涉及整个软件生存周期,扩展到,少,可预知、可控,多,不易预知,不易控制,发展到,只考虑编写程序,15,1.2 软件工程学,为什么要引入软件过程?(2/2)软件开发的角色软件标准,团队中更多的角色,扩展到,软件产品的标准化,软件开发过程的标准化,扩展到,程序员,16,1.2 软件工程学,1.2.5 软件工程基本原理用分阶段的生命周期计划进行严格的管理;坚持进行阶段评审;实行严格的产品控制;采用现代程序设计技术;软件工程结果应能清楚地审查;开发小组的人员应该少而精;承认不断改进软件工程实践的必要性。,17,1.3 软件生命周期,1. 软件生命周期定义从设计软件产品开始到产品不能使用为止的时间周期。软件生命周期中,软件开发与维护时的费用越低,软件的使用寿命越长,产生的价值就越大,这就是掌握软件工程学的目的。2. 软件生命周期划分的原则各阶段的任务彼此间尽可能相对独立。同一阶段的工作任务性质尽可能相同。,18,1.3 软件生命周期,3. 软件生命周期各阶段的任务由软件计划、软件开发和软件运行维护三个时期组成。软件计划时期:问题定义、可行性研究、需求分析三阶段。软件开发时期:软件概要设计、软件详细设计、软件实现、综合测试等阶段。软件运行过程中需要不断地进行维护,使软件持久满足用户需要。,19,1.4 软件开发模型,为什么需要模型?模型帮助我们解释事物如何工作模型能够拓宽我们的视野(抽象)软件过程模型一个过程模型是一个过程的抽象表示过程模型帮助我们更好地理解软件开发,20,3.1 过程模型概念(2/5),21,1.4.1 瀑布模型(Waterfall Model),1.4 软件开发模型,22,1.4.2 快速原型模型快速原型模型(Rapid Prototype Model)是快速开发一个可以运行的原型系统,通常有三种类型:渐增式的原型:也称增量模型。用于验证软件需求的原型。用于验证设计方案的原型。,1.4 软件开发模型,23,1.4.3 增量模型,增量方式包括:增量开发增量提交,1.4 软件开发模型,24,1.4.4 喷泉模型,适用于面向对象方法。主张分析和设计过程的重叠、不严格区分。模块集成过程: 反复经过 分析、设计、测试、集成,再分析、设计、测试、集成。,1.4 软件开发模型,25,1.4.5 螺旋模型,1.4 软件开发模型,26,1.4.6 RUP(统一过程),RUP(Rational Unified Process)使用UML,采用用例驱动和架构优先的策略,采用迭代增量建造方法。通常,结构化方法可使用瀑布模型、增量模型和螺旋模型进行开发;面向数据结构方法可使用瀑布模型、增量模型进行开发;面向对象方法可采用快速原型、喷泉模型、软件重用开发模型(11章)和统一过程RUP进行开发。,1.4 软件开发模型,27,案例-在线宠物商店(1/3),宠物大战SUN Vs. Microsoft主要功能:列举宠物商品类别和提供搜索功能显示宠物列表和宠物具体信息提供用户登录验证、注册新用户和维护用户信息等功能管理购物车实现结帐处理查询订货情况统计销售记录,28,案例-在线宠物商店(2/3),问题(1/2):从何开始?采用什么技术?需要多少时间?需要多少人?哪些角色?能否并行、协作地开发?人力应该如何高效率的投入?开发计划?直接编码? 需求?设计方案和模型?人机交互的界面?功能优先级?,29,案例-在线宠物商店(3/3),问题(2/2):开发风险?可扩展性?复用?设计模式? 编码规范?需求变更?测试?开发过程?软件度量? 最后期限?,30,Chapter 2 软件计划,2.1 软件问题定义及可行性研究2.2 需求分析的任务2.3 需求分析步骤2.4 实体-关系图2.5 数据流图2.6 状态转换图2.7 数据字典2.8 需求分析的其他图形工具2.9软件计划阶段文档,31,2.1 软件问题定义及可行性研究,2.1.1软件问题定义What问题定义是软件开发过程当中的一个定义要解决的问题并确定系统范围的活动。Why形成一个早期判断,达成一个最初共识 When项目日程表的最前端占整个软件开发时间中的比例很小,32,2.1 软件问题定义及可行性研究,Who系统分析师、出资方领导、出资方技术人员、开发方领导和项目经理 Where客户现场,33,2.1 软件问题定义及可行性研究,How,34,2.1 软件问题定义及可行性研究,2.1.2 可行性研究What可行性研究是以相对短的时间和相对低的成本来确定给定的问题在其约束条件内是否有解、有几种解以及哪个是最佳解。 Why必须要先确立满足约束条件的方案是否存在、是否可行、是否最优,然后再在最优方案的基础上进行开发,35,2.1 软件问题定义及可行性研究,When项目的早期阶段占整个软件开发时间中的比例较小,但比问题定义活动所消耗的时间长Who系统分析师、出资方领导、出资方技术人员、用户代表、开发方领导、项目经理、架构设计师、领域专家、财务人员、市场人员、软件质量保证(SQA,Software Quality Assure)人员等Where客户现场。,36,2.1 软件问题定义及可行性研究,How,How(1/2),37,2.1 软件问题定义及可行性研究,2.1.3 制定项目开发计划完成软件问题定义和可行性研究之后,可以制定初步的项目开发计划。制定工程计划进度有两种方法:Gantt图法和工程网络技术,详细见9.3节。,38,2.2 需求分析的任务,What(1/3)需求:主要是在产品构建之前确定的系统必须符合的条件或具备的功能,它们是关于系统将要完成什么工作的一段描述语句,它们必须经过所有相关人员的认可,其目的是彻底地解决客户的问题。 需求文档一组需求的集合 用户需求文档、系统需求文档和软件规约文档,39,2.2 需求分析的任务,功能性需求和非功能性需求 功能性需求:描述了系统应该做什么,即具备的功能或服务。(输入、输出和计算等)非功能性需求:描述了系统必须遵守的约束条件。(响应时间、吞吐量 、可靠性、可移植性、可扩展性、易用性、安全性、资源要求、可复用性、技术要求、文化和政策需求、法律需求、道德要求、隐私要求,等等) 描述需求的标准是完整的、正确的、必要的、无歧义的、可行的、可验证的以及被设置了优先级别的。,40,2.3 需求分析步骤,Why需求不一致、模糊、矛盾需求变更客户忽略领域常识/知识/术语 客户集中于现有系统的不足之处,而忽略了系统要实现的关键功能零碎、无组织、不明确、表达不清不分轻重缓急,41,2.3 需求分析步骤,When项目的早期阶段?,贯穿于整个软件开发过程的需求活动,42,2.3 需求分析步骤,Who系统分析师、需求阐释者、客户代表、用户代表、开发方领导、项目经理、架构设计师、领域专家、财务人员、市场人员、软件质量保证(SQA,Software Quality Assure)人员、程序员、测试人员、部署人员、技术文档编写人员、培训人员等。Where调研时,在客户现场编纂软件需求规约文档时,可以在开发单位复审相关的需求文档时,根据需要来安排,43,2.3 需求分析步骤,How,44,2.4 实体-关系图,E-R图实体联系图,用以表示应用领域中的实体及其相互关系通过E-R图可以很快转成关系数据库概念实体:一切事物,如操作员、顾客、宠物等属性:客观实体和联系实体所拥有的性质关系:事物间关系,45,2.4 实体-关系图,46,2.5 数据流图,什么是数据流程图是一个分层的概念模型,分为三个层次:总体图、零级图、细节图,分别描述系统的不同特征。4种符号:方,圆,开口矩(平行线),箭头 3个层次:总体图,零级图,细节图优点容易理解,容易在开发方和用户方之间进行交流,以及在开发组织内部交流,47,2.5 数据流图,表示符号外部实体数据处理 数据存储数据流,48,2、数据流图的附加符号, 表示数据流之间是“与”关系(同时存在) 表示数据流之间是“或”关系 表示只能从几个数据流中选一个(互斥关系),49,2.5 数据流图,分层表示的数据处理总体图:描述了系统和周围环境的关系 零级图:表示一个系统的主要功能或者是一个大型系统的主要组成子系统细节图:表示一个复杂的处理的详细内部表示,50,2.5 数据流图,分层表示的数据处理总体图,51,2.5 数据流图,分层表示的数据处理零级图,52,2.5 数据流图,分层表示的数据处理细节图,53,2.5 数据流图,数据流程图绘制的有关规定(1/2)外部实体只能出现在总体图和零级图中 数据存储只能出现在零级图和细节图中 数据存储在分层的DFD图中只能出现一次数据存储必须既有读操作,也有写操作 数据流要有名字 数据流必须开始或结束在处理圆圈上数据流不表示有关的控制逻辑,54,2.5 数据流图,数据流程图绘制的有关规定(2/2)每个处理要有编号,但不表示先后顺序每个图中处理的数不应超过9个 每个处理应该既有输入的数据流,也有输出的数据流 子图与父图中对应的处理必须执行相同的功能,并且子图与对应的处理流入和流出的数据流相同 输入/输出命令不能作为DFD图中的处理,55,2.5 数据流图,规定举例1,56,2.5 数据流图,规定举例2,57,数据流程图(DFD)规定举例3,规定举例3,58,2.5 数据流图,规定举例4,E1-DS1数据流未与处理相连DS1-DS2数据流无处理处理P1无输出数据流 处理P2无输入数据流数据存储DS2无读操作 所有数据流没有名字,2,59,2.5 数据流图,规定举例5,DS1无写操作,60,2.5 数据流图,例子,61,Data Flow Diagrams,Example,62,2.5 数据流图,例子,63,2.6 状态转换图,表示符号状态:是可以被观察到的系统的行为模式 圆圈或矩形表示,并在圆圈或矩形中标明状态的名字 变迁表示一种状态向另一种状态的迁移带箭头的线来表示,在线上要标注出事件的名称,需要时也可以和把DFD图中相关的处理标注进来,64,2.6 状态转换图,例子1:进程,65,2.7 数据字典,数据流程图的问题数据流程图描述了一个系统的主要处理逻辑,所存取的数据文件或数据库及其输入和输出的关系。但不能反映系统的具体细节。什么是数据字典配合数据流程图,反映具体细节。二者结合,精确描述。作用:统一定义,便于通讯,便于共享,66,2.7 数据字典,数据字典的内容数据元素最小数据单元 数据流基本数据单元,有关的数据元素所组成的动态的数据结构 数据存储数据结构的载体,静态的数据结构 处理具体处理逻辑外部项数据源或数据终点等外部实体,表示数据的来源和去向,67,2.7.2 数据字典使用的符号, 表示“等价于”或“定义为” 连接 ,| 表示“或”,用“|”分隔,表示可任选其中某一项 表示“重复” ( ) 表示“可选”,用“,”号隔开1A 表示 A 的内容至少要出现 1 次。B 表示 B 的内容允许重复 0 至任意次。 如: 成绩单学号姓名1课程名成绩3 也可写为 成绩单学号姓名 课程名成绩,2.7 数据字典,68,2.7 数据字典,数据元素,69,2.7 数据字典,数据流,70,2.7 数据字典,数据存储,71,处理,72,2.8.1 层次图层次图是一系列多层次的树形结构矩形框,用来描述数据的层次结构,也可描述程序结构。,2.8 需求分析的其他图形工具,73,2.8.2 Warnier 图 (Warnier diagram),表示数据层次结构(Warnier-Orr图)可表达数据结构也可表达程序结构Warnier 图使用的符号:()花括号 表示属于数据结构的同一层次。()异或符号 ,符号的上、下方的两个名字代表的数据只能出现一个。 ()圆括号( ) ,数据重复出现的次数。,2.8 需求分析的其他图形工具,74,2.8.3 IPO 图,输入处理输出(Input Process Output )图的简称。【例2.10】招聘考试成绩管理系统 IPO 图。,2.8 需求分析的其他图形工具,75,2.9.1 软件计划阶段文档的编写步骤,(1)编写软件问题定义文档。(2)书写可行性研究报告。(3)编写软件需求说明书。(4)修改、完善项目开发计划。(5)制定初步的系统测试的计划,作为今后软件确认和验收的依据。(6)编写初步的用户手册。(7)编写数据要求说明书。,2.9 软件计划阶段文档,76,Chapter 3 结构化设计,3.1 软件设计步骤3.2 软件结构设计3.3 软件结构设计的图形工具3.4 面向数据流的设计方法3.5 过程设计工具3.6 系统人机界面的设计3.7 数据代码设计3.8 面向数据结构的设计方法3.9 软件设计文档,77,3.1 软件设计步骤,What 设计:是在系统的约束条件下(如预算、时间、人力资源、用户软、硬件环境和用户对系统的操作能力等),为了实现系统的功能性需求和非功能性需求,而找到并描述的一种遵循高质量的通用原则的方法,其交付文档能够指导开发人员实现系统。,78,3.1 软件设计步骤,总体设计任务是根据软件需求规约文档,确定一个合理的软件体系结构。这个体系结构包括合理地划分组成系统的模块、模块间的调用关系以及模块间的接口关系。软件体系结构还从总体方面决定了系统的可扩充性、可维护性,以及系统的性能等。总体设计的设计粒度较大,有时也被称为概要设计、架构设计。,79,3.1 软件设计步骤,详细设计 详细设计地任务是在总体设计的基础上进一步确定如何实现目标系统,包括系统的数据对象的设计、人机接口的设计以及模块逻辑的详细设计。设计部件的粒度系统、子系统、框架、构件、组件、模块、类、方法等,80,3.1 软件设计步骤,Why软件架构是软件系统的核心应对复杂多变的情况,同时保持完整性应对系统在扩展功能当中出现的问题大规模复用的有效基础 项目管理的基础,81,3.1 软件设计步骤,When项目的中、早期阶段?,工作量,早期 中期 后期,项目时间,大小,贯穿于整个软件开发过程的设计活动,82,3.1 软件设计步骤,Who主要包括架构设计师、软件设计员、复用工程师、设计复审员、项目经理、财务人员、软件质量保证(SQA,Software Quality Assure)人员和需求变更者等Where建议在软件企业内部进行设计,83,3.1 软件设计步骤,How,84,3.2.1 软件结构设计的基本原理 软件的模块化、模块独立性、抽象和逐步求精、信息隐蔽和局部化等。1.模块化 模块是一个独立命名的,拥有明确定义的输入、输出和特性的程序实体。 模块化设计可以简化软件的设计和实现,提高软件的可理解性和可测试性,并使软件更容易得到维护。,3.2 软件结构设计,85,2抽象化 在解决复杂的具体问题时,人们往往先忽略其细节和非本质的方面,而集中注意力去分析问题的本质和主要方面,搞清所要解决的问题的本质所在;同时人们在总结认识和实验规律时,也往往突出各类问题的共性,找出各种客观事物、状态和过程间的联系和相似性,加以概括和提取,即抽象。,3.2 软件结构设计,86,3信息隐蔽 信息隐藏是指在设计和确定模块时,应使一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说是不可访问的。 信息局部化是指将一些关系密切的成份,设计时放得彼此靠近。,3.2 软件结构设计,87,3.2.2 模块化 模块化(Modularization)是把系统分割成能完成独立功能的模块。 1. 模块化可产生的效果 减少复杂性 提高软件可靠性 提高可维护性 有助于软件工程的组织管理 有助于信息隐蔽,3.2 软件结构设计,88,2. 模块分割方法 横向分割 根据输入输出等功能不同来分割模块。 纵向分割 根据系统对信息处理过程中不同的阶段来分割 模块分割顺序 先确定中心控制模块,由控制模块指示从属模块,逐次进行分解。,3.2 软件结构设计,89,3.2.3 模块独立性1耦合度:模块同模块的联系称为块间的联系(模块的耦合度) 2内聚度:一个模块内部各成份的联系称为块内的联系(模块的内聚度),3.2 软件结构设计,90,耦合度按从强到弱的顺序可分为几种类型: (1)内容耦合:当一个模块直接修改或操作另一个模块的数据或者直接转入另一个模块时,就发生了内容耦合 (2)公共耦合:两个以上的模块共同引用一个全局数据项(3)控制耦合:一个模块在界面上传递一个信号(如开关值、标志量等)控制另一个模块,接收信号的模块的动作根据信号值进行调整,称为控制耦合。,3.2 软件结构设计,91,(4)数据耦合:指两个模块彼此交换数据(5)独立耦合:模块间没有信息传递时,属于非直接耦合 耦合性与模块属性的关系,3.2 软件结构设计,92,内聚度按强度从低到高有以下几种类型: (1)偶然内聚:模块内的各个任务没有什么有意义的联系,它们之所以能构成一个模块完全是偶然的原因。(2)逻辑内聚:几个逻辑上相关的功能被放在同一模块中,则称为逻辑内聚。(3)时间内聚:如果一个模块完成的功能必须在同一时间内执行(如系统初始化),但这些功能只是因为时间因素关联在一起,则称为时间内聚。,3.2 软件结构设计,93,(4)过程内聚:如果一个模块内部的处理成份是相关的,而且这些处理必须以特定的次序执行,则称为过程内聚。(5)通信内聚:如果一个模块的所有成份都操作同一数据集或生成同一数据集,则称为通信内聚。(6)顺序内聚:如果一个模块的各个成份和同一个功能密切相关,而且一个成份的输出作为另一个成份的输入,则称为顺序内聚。(7)功能内聚:模块的所有成份对于完成单一的功能都是必须的,则称为功能内聚。,3.2 软件结构设计,94,内聚与模块属性的关系,3.2 软件结构设计,95,3.2.4 模块设计启发规则1改进软件结构提高模块独立性 2. 注意模块的可靠性、通用性、可维护性和简单性,3.2 软件结构设计,96,3. 模块规模应该适中4深度、宽度、扇入和扇出都应适当,3.2 软件结构设计,97,5模块的作用域应该在控制域之内 6力争降低模块接口的复杂程度 7设计单入口单出口的模块 8模块功能应该可以预测,3.2 软件结构设计,98,3.3.1 层次图(或HIPO图),3.3 软件结构设计的图形工具,99,1. 结构图的符号 (1)方框代表模块,框内注明模块的名字和主要功能。(2)方框之间的大箭头或直线表示模块的调用关系。 (3)带注释的小箭头表示模块调用时传递的信息及其传递方向。尾部加空心圆的小箭头表示传递数据信息。尾部加实心圆的小箭头表示传递控制信息。(4)选择结构(5)循环结构,模块 H 循环调用模块 A,B,C,,3.3 软件结构设计的图形工具,3.3.2 结构图,100,2. 结构图的绘制,【例3.2 】招聘考试成绩管理系统的结构图,3.3 软件结构设计的图形工具,101,1变换流 在数据处理问题中,我们通常会遇到这样一些问题,即从“外部世界”取得数据,对取得数据进行某种变换,然后再将变换得到的数据传回给“外部世界”。我们把这个过程称为变换流。 其中取得数据称为传入信息流程,变换数据称为变换信息流程,传回数据称为传出信息流程。,3.4 面向数据流的设计方法,102,1变换流,3.4 面向数据流的设计方法,103,2事务流 在实际中,我们还会遇到另一类问题,即通常在接受某一项事物后,根据事物的特点和性质,选择分派给一个适当的处理单元,然后给出结果。 这类问题就是事物问题。它的特点是,数据沿着接受分支把外部信息(数据)转换成一个事物项,并根据它的值从多条数据流中选择其中的某一项数据流。发出多条数据流的处理单元叫事物中心。,3.4 面向数据流的设计方法,104,2事务流 事务中心的作用: 1、接受输入数据(事物项) 2、根据事物作出判断,并选择处理路径。 3、沿处理路径执行。,3.4 面向数据流的设计方法,105,2事务流,3.4 面向数据流的设计方法,106,变换流分析与设计 分析数据流程图,确定输入流、输出流边界,根据输入、变换、输出3个数据流分支,按一定的规则将它直接映射为结构图。,3.4 面向数据流的设计方法,107,变换流分析与设计步骤:(1)确定变换流、输入流和输出流部分(2)设计模块结构的顶层和第一层 (3)设计中下各层,3.4 面向数据流的设计方法,108,举例,3.4 面向数据流的设计方法,109,举例,3.4 面向数据流的设计方法,110,事物流分析与设计步骤:(1)根据事务功能设计一个顶层总控模块;(2)将事务中心的输入数据流对应为一个第一层的接收模块及该模块的下层模块;(3)将事务中心对应为一个第一层的调度模块;(4)对每一种类型的事务处理,在调度模块下设计一个事务处理模块;然后为每个事务处理模块设计下面的操作模块及操作模块的细节模块,每一处理的对应设计可用变换分析方法。,3.4 面向数据流的设计方法,111,举例,3.4 面向数据流的设计方法,112,举例,3.4 面向数据流的设计方法,113,混合流分析与设计基本思路:(1)首先利用变换分析方法把软件系统分为输入、变换和输出三部分,由此设计出软件系统的上层构架,例如,顶层和第一层模块;(2)然后根据数据流程图各个部分的结构特点,适当地选择变换分析或事务分析,由此设计出软件系统的下层结构。,3.4 面向数据流的设计方法,114,混合数据流,3.4 面向数据流的设计方法,115,混合型数据流程图映射的软件结构图,3.4 面向数据流的设计方法,116,3.5.1 流程图2. 流程图符号,3.5 过程设计工具,117,3 流程图使用约定,3.5 过程设计工具,118,4. 流程图的三种基本结构:顺序、选择、循环。,3.5 过程设计工具,119,3.5.2 盒图。1. 盒图的符号,3.5 过程设计工具,120,3.5.2 盒图【例3.5】将下述含GOTO语句的程序流程图,改为N_S图。,3.5 过程设计工具,121,3.5.2 盒图【例3.5】将下述含GOTO语句的程序流程图,改为N_S图。,3.5 过程设计工具,122,3.5.3 PAD 图1、基本符号,3.5 过程设计工具,123,3.5.3 PAD 图【例3.7】学生成绩管理系统的 PAD 图,3.5 过程设计工具,124,3.5.4 判定表,1. 判定表的组成左上部列出所有条件。左下部列出所有可能做的工作。右上部每一列表示各种条件的一种可能组合,所有列表示条件组合的全部可能情况。右下部的每一列是和每一种条件组合所对应的应做的工作。2. 判定表中的符号右上部用“T”表示条件成立,用“”表示条件不成立,空白表示条件成立与否不影响。右下部画“X”表示做该行左边列出的那项工作,空白表示不做该项工作。,3.5 过程设计工具,125,【例3.8】用判定表表示教师课时津贴费规定。,某校对各种不同职称教师,根据其是本校专职教师还是外聘兼职教师,决定其讲课的课时津贴费。本校专职教师每课时津贴费:教授 80 元,副教授 60 元,讲师 50 元,助教40 元。外聘兼职教师每课时津贴费:教授 90 元,副教授 80 元,讲师60 元,助教 50 元。,3.5 过程设计工具,126,【例3.9】用判定树表示教师课时津贴规定。,3.5 过程设计工具,127,过程设计语言(Program Design Language,简称 PDL),也称伪码, 是一种混杂语言,说明某种结构化的程序设计语言的语法形式。用PDL表示的程序结构:1 顺序结构 处理1 处理2 处理3选择结构 IF-THEN-ELSE结构: IF 条件 处理1 ELSE 处理2 ENDIFIF-THEN结构: IF 条件 处理1 ENDIF,3.5 过程设计工具,128,3.6 系统人机界面设计,大量的项目因为没有让用户充分参与界面的设计而失败 市场部门的问题开发人员的问题用户的问题设计模型的问题,129,一些典型的不良界面对用户的主观臆测不友好晦涩难懂 行为不当 界面复杂,3.6 系统人机界面设计,130,以用户为中心的设计(User-Centered Design,UCD) 理解用户的特征理解用户的任务 确保用户参与 遵循良好的界面设计原则,3.6 系统人机界面设计,131,界面设计指导原则全部界面格式和风格应保持一致 适当组织菜单层次和菜单项 为不同的用户或功能提供不同的界面服务 力求用户需要的输入量最少 破坏性命令或功能选项应确认提供有效的系统保障能力 布局合理 简单易懂,整洁有序,条理清晰 帮助功能 一定的智能,3.6 系统人机界面设计,132,界面设计基础 字符型界面和图形界面,3.6 系统人机界面设计,133,界面设计基础界面控件菜单、命令控件、静态文本控件、文本控件、数据窗口控件、下拉列表框控件、单选按钮控件、复选框控件、树形结构控件、图形控件、微调框控件、滑动条控件自定义的控件,3.6 系统人机界面设计,134,多通道人机交互强调计算机输入信息的自然性和多样性语音交互虚拟现实高级交互,3.6 系统人机界面设计,135,3.7.1 代码设计目的 代码是为了对数据进行识别、分类、排序等操作所使用的数字、文字或符号。 代码的性质:简洁性、保密性、可扩充性和持久性。3.7.2 代码设计原则标准化:国际标准、国家标准、部颁标准或习惯标准 惟一性 可扩充性 简单性 规范化 适应性,3.7 数据代码设计,136,3.7.3代码种类1. 顺序码2. 信息块码3. 归组分类码4. 助记码5. 数字式字符码6. 组合码,3.7 数据代码设计,137,计算机软件本质上是信息处理系统,因此,可以根据软件所处理的信息的特征来设计软件。前面曾经介绍了面向数据流的设计方法,也就是根据数据流确定软件结构的方法,本节将介绍面向数据结构的设计方法,也就是根据数据结构设计程序处理过程的方法。,3.8 面向数据结构的设计方法,138,在许多应用领域中信息都有清楚的层次结构,输入数据、内部存储的信息(数据库或文件)以及输出数据都可能有独特的结构。数据结构既影响程序的结构又影响程序的处理过程,重复出现的数据通常由具有循环控制结构的程序来处理,选择数据(即,可能出现也可能不出现的信息)要用带有分支控制结构的程序来处理。层次的数据组织通常和使用这些数据的程序的层次结构十分相似。,3.8 面向数据结构的设计方法,139,面向数据结构的设计方法的最终目标是得出对程序处理过程的描述。这种设计方法并不明显地使用软件结构的概念,模块是设计过程的副产品,对于模块独立原理也没有给予应有的重视。因此,这种方法最适合于在详细设计阶段使用,也就是说,在完成了软件结构设计之后,可以使用面向数据结构的方法来设计每个模块的处理过程。,3.8 面向数据结构的设计方法,140,使用面向数据结构的设计方法,当然首先需要分析确定数据结构,并且用适当的工具清晰地描绘数据结构。本节先介绍Jackson方法的工具Jackson图,然后介绍jackson程序设计方法的基本步骤。,3.8 面向数据结构的设计方法,141,3.11.1 Jackson图 虽然程序中实际使用的数据结构种类繁多,但是它们的数据元素彼此间的逻辑关系却只有顺序、选择和重复三类,因此,逻辑数据结构也只有这三类。,图3.29 A由B、C、D三个元素顺序组成(每个元素只出现一次,出现的次序依次是B、C和D),1. 顺序结构 顺序结构的数据由一个或多个数据元素组成,每个元素按确定次序出现一次。图3.29是表示顺序结构的Jackson图的一个例子。,3.8 面向数据结构的设计方法,142,图3.30 根据条件A是B或C或D中的某一个(注意:在B、C和D的右上角有小圆圈做标记),2. 选择结构 选择结构的数据包含两个或多个数据元素,每次使用这个数据时按一定条件从这些数据元素中选择一个。图3.30是表示三个中选一个结构的Jackson图。,3.8 面向数据结构的设计方法,143,3. 重复结构 重复结构的数据,根据使用时的条件由一个数据元素出现零次或多次构成。图3.31是表示重复结构的Jackson图。,图3.31 A由B出现N次(N0)组成(注意,在B的右上角有星号标记),Jackson图有下述优点: 便于表示层次结构,而且是对结构进行自顶向下分解的有力工具; 形象直观可读性好; 既能表示数据结构也能表示程序结构(因为结构程序设计也只使用上述三种基本结构)。,3.8 面向数据结构的设计方法,144,上一小节介绍的Jackson图的缺点是,用这种图形工具表示选择或重复结构时,选择条件或循环结束条件不能直接在图上表示出来,影响了图的表达能力,也不易直接把图翻译成程序。为了解决上述问题,本书建议使用图3.32中给出的改进的Jackson图。,图3.32 改进的Jackson图(a)顺序结构,B、C、D中任一个都不能是选择出现或重复出现的数据元素(即,不能是右上角有小圆或星号标记的元素);(b)选择结构,S右面括号中的数字i是分支条件的编号;(c)可选结构,A或者是元素B或者不出现(可选结构是选择结构的一种常见的特殊形式);(d)重复结构,循环结束条件的编号为i,145,请读者注意,虽然Jackson图和描绘软件结构的层次图形式相当类似,但是含义却很不相同:层次图中的一个方框通常代表一个模块;Jackson图即使在描绘程序结构时,一个方框也并不代表一个模块,通常一个方框只代表几个语句。层次图表现的是调用关系,通常一个模块除了调用下级模块外,还完成其他操作;Jackson图表现的是组成关系,也就是说,一个方框中包括的操作仅仅由它下层框中的那些操作组成。,3.8 面向数据结构的设计方法,146,3.11.3 Jackson方法Jackson结构程序设计方法基本上由下述四个步骤组成。第1步 分析并确定输入数据和输出数据的逻辑结构,并用Jackson图描绘这些数据结构。第2步 找出输入数据结构和输出数据结构中有对应关系的数据单元。所谓有对应关系是指有直接的因果关系,在程序中可以同时处理的数据单元(对于重复出现的数据单元必须重复的次序和次数都相同才可能有对应关系)。第3步 从描绘数据结构的Jackson图导出描绘程序结构的Jackson图:,3.8 面向数据结构的设计方法,147,3.8 面向数据结构的设计方法,第4步 列出所有操作和条件(包括分支条件和循环结束条件),并且把它们分配到程序结构图的适当位置。,148,【例3.10】用Jacksan方法对学生成绩管理系统进行结构设计。,学生成绩管理系统在学生入学时输入学生基本信息。每次单科成绩是按班级内学生学号的顺序依次输入每位学生的平时成绩和考试成绩,成绩输入格式见表3.5。然后由计算机计算每位学生的单科成绩总评分。输出的学生个人成绩单格式,见表3.6;班级各科成绩汇总表格式,见表3.7。,3.8 面向数据结构的设计方法,149,输入、输出的Jacksan图,3.8 面向数据结构的设计方法,150,学生成绩管理系统结构 Jacksan 图,3.8 面向数据结构的设计方法,151,3.9.1 概要设计说明书3.9.2数据库设计说明书3.9.3详细设计说明书3.9.4 操作手册编写提示,3.9 软件设计文档,152,Chapter 4 软件编码和软件测试,4.1 结构化程序设计4.2 软件测试目标4.3 软件测试方法4.4 软件测试步骤4.5 设计软件测试方案4.6 软件测试原则和策略4.7 软件测试、验证与确认4.8 软件测试文档,153,结构化程序设计(Structured Programming ,SP)仅采用顺序、选择、重复三种基本控制结构;每种基本结构只有一个入口、一个出口;将这三种基本控制结构根据程序的逻辑,嵌套或组合成结构化程序,完成预定的功能。结构化程序设计的特点源程序有清晰性,并能较好地适合自顶向下或自底向上的程序设计技术。在详细设计阶段,使系统结构具有模块化和清晰性的特性。在软件编码阶段,使软件易于理解、修改,便于重复使用。,4.1 结构化程序设计,154,4.1.1 程序设计语言的选择,1. 程序设计语言的分类(1)面向机器语言:机器语言和汇编语言。(2)高级程序设计语言2. 高级语言选用的实用标准(1)项目的应用领域(2)软件开发环境(3)根据系统用户的要求来选择(4)软件开发人员的知识,4.1 结构化程序设计,155,4.1.2 程序设计风格,源程序文档编写规则 1. 结构化程序设计: 强调模块采用自上而下,逐步求精设计方法。只使用顺序,选