1、第3章 软件工程基础,3.1 软件工程基本概念,软件定义与特点软件危机与软件工程软件生命周期软件工程的目标与原则,软件 与计算机操作相关的程序、规程、规则,以及可能 有的文件、文档及数据特点是一种逻辑实体,具有抽象性没有明显的制作过程运行、使用期间不存在磨损、老化问题开发、运行依赖计算机系统软件复杂性高、成本昂贵涉及诸多社会因素,软件定义与特点,程序=算法+数据结构 软件=程序+数据+文档,软件危机与软件工程,软件危机主要特征 生产率:软件开发周期大大超过规定日期 成本:软件开发成本严重超标 质量:软件质量难于保证软件工程定义 Fritz Bauer定义:“建立并使用完善的工程化原则,以较经济
2、 的手段获得能在机器上有效运行的可靠软件的一系列方法” IEEE93定义:“将系统化的、规范的、可度量的方法应用于软件 的开发、运行和维护的过程,即将工程化应用于软件中” 软件工程三要素 方法:完成软件工程的技术手段 工具:支持软件的开发、管理、文档生成 过程:支持软件开发的各个环节的控制、管理,软件生命周期,软件工程目标和原则,目标 低成本 较好的软件功能 易于移植、维护 及时交付等主要研究内容 软件开发技术 软件开发方法学 开发过程 开发工具和软件工程环境(CASE) 软件工程管理: 软件管理学、软件工程经济学、软件心理学原则:抽象、信息隐蔽、模块化、一致性、完备性等,3.2 结构化分析方
3、法,需求分析与需求分析方法结构化分析方法软件规格说明书,需求分析与需求分析方法,需求分析系统分析员的主要焦点是 “做什么(what)” ,不是 “怎样做(how)”需求分析任务需求分析方法 结构化分析(SA) 面向对象的分析方法(OOA),结构化分析方法(SA),常用工具 数据流图(DFD) 数据字典(DD) 判定树 判定表,DFD的主要元素,加工(转换)数据流存储文件源(潭),数据字典(DD),功能 对系统相关数据元素的精确、严格的定义,即对DFD中四个基本成分的详细描述数据结构描述方式 定义式【示例】,操作符 含义描述 = 定义为 + 与(顺序结构) n.m 重复(循环结构) () 或(选
4、择结构) ( . ) 任选 * * 注释符,存折户名所号帐号开户日期性质1存取行50 户名2字母24 所号“001”“999” (注:储蓄所编码规定三位数字) 帐号“000001”“999999” (注:帐号规定由六位数字组成) 开户日期年月日 性质“1”“6”(注:“1”表示普通户,“5”工资户等) 存取行日期(摘要)指出存入余额 操作复核 年 “00”“99” 月“01”“12” 日“01”“31” 摘要1字母4(注:表明该存取是存?是取?还是换?),定义式示例,判定树(决策树),条件1 条件2 结果 计 79, 订票量20: 30% 算 12月 订票量20: 20% 折 扣 16, 订票
5、量20: 15% 量 10,11月 订票量20: 10%,判定表(决策表),描述多条件、多目标动作的形式化工具,软件需求规格说明书(SRS),(Software Requirement Specification) 需求分析阶段的最终结果文档 特点:正确性、无歧义性、可验证性、一致性等,3.3 结构化设计方法,基本概念概要设计详细设计,软件设计的基本概念,开发阶段最重要的步骤 主要工作 概要设计:结构设计、数据设计、接口设计 详细设计:过程设计 基本原理 抽象性 模块化 信息隐蔽 模块独立性 内聚:模块内各个元素彼此结合的紧密程度 耦合:不同模块间互相依赖(连接)的紧密程度 原则:高内聚,低耦
6、合,概要设计,任务 设计软件系统结构 设计数据结构及数据库 编写概要设计文档 文档评审 工具:结构图(SC) 设计原则,规模适中 扇入扇出适中 作用域应当在控制域中 提高模块独立性 设计成单入口和单出口 减少接口和界面的复杂性 设计功能可预测的模块,结构图(SC),描绘软件结构的图形工具基本形式 有关术语 上级模块 从属模块深度:控制的层数宽度:最大模块数层扇入:调用某个模块的上级模块数目扇出:一个模块调用其它模块的数目原子模块:树中位于叶结点的模块,结构图基本形式,详细设计,任务为每个功能模块确定实现算法和局部数据结构 设计工具 程序流程图 N-S图 PAD图 PDL(伪码),程序流程图(程
7、序框图),盒图(N-S图),基本控制结构,问题分析图(PAD图),基本控制结构,3.4 软件测试,测试:是为了发现错误而执行程序的过程测试准则测试方法静态测试动态测试 白盒测试 黑盒测试 测试的实施,测试准则,所有的测试都应该能追溯到用户需求 制定严格测试计划 注意测试群集现象 穷举测试是不可能的 应有第三方从事测试工作,避免编写者自己测试,又称结构测试、逻辑驱动测试 主要方法 逻辑覆盖测试 路径覆盖:所有可能路径至少经历一次 语句覆盖:每个语句至少执行一次 判定覆盖:每个判定表达式都取到可能结果 条件覆盖: 判定中的每个条件取得可能结果 判定-条件覆盖 基本路径设置,白盒测试,语句覆盖,A=
8、2, B=0 ,X=4,判定(分支)覆盖,A=3, B=0 ,X=1,A=2, B=1 ,X=3,条件覆盖,A=1, B=0 ,X=3,A=2, B=1 ,X=1,判定/条件覆盖,A=2, B=0 ,X=4,A=1, B=1 ,X=1,基本路径设置,路径1:1-2-10-11-13 路径2:1-2-10-12-13 路径3:1-2-3-10-11-13 路径4:1-2-3-4-5-8-9-2 路径5:1-2-3-4-5-6-8-9-2 路径6:1-2-3-4-5-6-7-8-9-2,又称功能测试,数据驱动测试主要方法 等价类划分法 有效等价类 无效等价类 边界值分析法 错误推测法,黑盒测试,软
9、件测试的实施,测试步骤 单元测试集成测试确认(验收)测试系统测试,单元测试,目标:发现模块内部错误 对象:以模块为单位 测试内容模块接口测试局部数据结构测试重要路径测试出错处理测试边界条件测试 主要方式:白盒测试测试环境驱动(Driver)模块桩(Stub)模块,集成测试,集成测试:组装模块的同时进行测试 目标:发现接口有关的问题 测试方式 增量方式【示例】 自底向下 自底向上 混合增量方式 非增量方式,(a)自顶向下,(b)自底向上,确认(验收、有效性)测试,目标:检查系统功能是否达到SRS的指标 主要方式:黑盒测试 面向对象:用户(Alpha测试和Beta测试),3.5 程序的调试,调试(Debug),也称纠错 基本步骤 错误定位 修改程序 回归测试 基本方法 强行排错法 回溯法 原因排除法,