《殷人昆《实用软件工程》复习资料.docx》由会员分享,可在线阅读,更多相关《殷人昆《实用软件工程》复习资料.docx(20页珍藏版)》请在三一办公上搜索。
1、殷人昆实用软件工程复习资料殷人昆实用软件工程复习资料 1. 软件工程 目标:正确性、可用性、适合销售 活动:需求、设计、实现、V&V(验证与确认)、支持 原则:开发泛型、设计方法、支持工具、工程管理WW 软件工程是开发,运行,维护和修复软件的系统方法,将系统化的,规范的,可度量的方法应用与软件的开发,运行维护的过程。即将工程化应用于软件中。 2. 软件过程中的基本活动 1. 软件规格说明 plan 2. 软件开发 do 3. 软件确认 check 4. 软件演进 action 3. 瀑布模型:需求-系统设计-实现单元测试-集成与系统测试-运营维护。他的显著特点是顺序性和依赖性。 4. 演化模型
2、:软件通过不断的演化才能完成和完善,其显著特点是迭代。适合于业务和需求不断变更的开发过程,交付部分功能给客户,确认需求,逐步完善。 5. 螺旋模型:将瀑布模型和演化模型结合起来,加入了风险分析。 6. 增量模型:是将软件分解成一系列的增量的构件,在增量开发迭代中逐步加入,也叫极限程序设计。 7. 软件工程原则: a) 抽象自顶向下,逐层细化 b) 模块化的开发方法 c) 信息隐蔽和数据封装。 d) 局部化 e) 一致性 f) 完备性 g) 可验证性 8. 软件工程基本原理: a) 按软件生存期分阶段制定计划并认真实施 b) 坚持进行阶段评审 c) 坚持严格的产品控制 d) 使用现代程序设计技术
3、 e) 明确责任 f) 用人少而精 g) 不断改进开发的过程 9. 识别用户要求,必须考虑的问题: a) 功能和性能 b) 可靠性和质量 c) 总的系统目标 d) 成本与进度的把控 e) 制造需求 f) 市场竞争情况 g) 有效的技术 h) 将来可能的扩展 10. 可行性研究 a) 问题识别 b) 市场调查 c) 分析准备 第 1页 共 19页 殷人昆实用软件工程复习资料 d) 环境分析 e) 物理分析 f) 功能分析 g) 信息分析 h) 动态分析 i) 确立系统方案和成本估算 j) 模型评审 k) 成本可行性 l) 法律可行性 11. 面向对象设计 面向对象=对象+分类+继承+消息通信,基
4、本组成部分叫对象,计算是通过新对象的确立和对象之间的通信来执行。相对于面向过程开发,核心:数据被封装在对象中,而不是全局变量中,数据流是通过消息传递,而不是面向过程解决办法。算法被包裹在对象中,实现功能。 12. 统一建模语言:UML概述 Unified Modeling Language的缩写,他聚集了建模的精髓。 数据建模 业务建模 对象建模 构件建模 13. UML图 用例图:描述系统边界和主要功能;主要该系统在它的上下文环境所提供的服务。 1) 上下文环境建模:主要指在位于系统之外并与系统进行交互的参与者以及他们扮演的角色的含义。 2) 功能需求建模:说明系统想要的行为。 交互图:描述
5、用例的实现,其主要描述了系统的外部视图,如何通过对象之间的交互实现用例。包括顺序图和协作图,顺序图也叫时序图或序列图,他是按照时间顺序来的。 第 2页 共 19页 殷人昆实用软件工程复习资料 类图:标示系统的静态机构 类图从系统的逻辑视图展现了一组类、接口、协作和它们之间的关系,类图给出系统的静态设计视图,主动类的类图给出了系统的静态进程视图。其主要包括 1) 类及其结构和行为 2) 接口 3) 协作 4) 关联、依赖、泛化关系 5) 多重性和导航指示符 6) 角色名字 类图的关系: 父子关系 实现关系 关联关系 第 3页 共 19页 殷人昆实用软件工程复习资料 聚合:整体和部分关系 组合关系
6、依赖关系 第 4页 共 19页 殷人昆实用软件工程复习资料 整体类图 状态图:模型化对象的行为 泳道图 第 5页 共 19页 殷人昆实用软件工程复习资料 泳道图 构件图和部署图:展现物理实现的体系结构 衍型:扩展建模能力 14. 软件需求: a) 为满足用户解决某一问题而达到某个目标所需要的条件或者能力,系统或系统部件为满足合同、规格、标准说明或其他正式的强制性文档所必须具有的条件和能力。为满足以上条件和能力的文档化说明 b) 软件需求包括:业务需求、用户需求、功能需求、非功能性需求。 c) 业务需求:描述了组织愿景,即为什么要开发一个系统;系统的业务范围、业务对象、客户特性、价值和各种特性的
7、优先级别。 d) 用户需求:描述了系统必须完成任务,即用户对系统的目标要求。它只涉及到外部可见行为,不涉及内部特性。是用户对自身需求的一种陈述。这种陈述可能与实际需求不一致。 e) 功能需求:定义了开发者应该提供的软件功能或服务,但不涉及这些功能和服务的实现。 f) 非功能需求:对功能需求的补充,包括了对系统的各种限制和用户对系统的质量的要求。如系统响应时间或截面。 i. 包括产品必须遵从的标准、规范和合约 ii. 外部接口的具体细节 iii. 性能要求 iv. 设计实现的约束条件 15. 需求获取的过程 需求获取包括以下活动: 发现和分析问题 获取需求 第 6页 共 19页 殷人昆实用软件工
8、程复习资料 需求归档 需求获取的主要步骤 理解业务领域,即目标软件的业务环境,如银行、电信,了解后可以建立自对业务理解后的数据模型。通过结合实际业务,迭代完善业务模型 定义项目的视图和范围,定义项目范围是描述项目该做什么,不该做什么一般使用用例图。 寻找软件的需求来源,客户、竞品、系统需求规格说明书、当前系统的问题报告和改进要求、市场调研报告、观察用户如何工作、用户工作场景分析、事件和响应。 识别用户类和用户代表,确定系统的用户及其分类,与用户一块工作,确定系统的决策者。 确定系统的业务流程和业务规则 访谈和记录 需求整理和描述 16. 面向对象的UML需求获取方法: a) 用户模型视图:从用
9、户角度来标示系统,通过用例图来标示 b) 结构模型视图:通过静态的数据模型图,类图、对象图来建模 c) 行为模型视图:描述系统的动态和行为,以及在上述两种视图中的各元素如何交互。 d) 实现模型视图 e) 环境模型视图 面向对象模型,分为三个独立模型 a) 有用例和场景组成功能视图 b) 用类和对象标示的分析对象模型 c) 用状态图和顺序图标示的动态模型 17. 对需求文档的要求: 1) 完整:要求必要的需求信息,必须进行完整的描述 2) 无歧义:每种需求只有一种解释。 3) 一致性:对需求规格说明,必须保持一致。 4) 可验证:可演示、测试、分析、审查、特殊的检查 5) 可修改 6) 可追踪
10、:向前和向后的追踪性。 18. 软件需求评审的主要内容: a) 用例:是否清晰,用例规格。 b) 功能:是否清楚,是否必须,是否满足,是否覆盖异常 c) 性能:是否精确描述,是否制定指标,是否制定使用环境 d) 接口:外部、内部描述是否清晰。调用关系。 e) 数据:是否确定系统的输入、输出 f) 硬件 g) 软件 h) 通信 i) 正确性 完整性 一致性,兼容性 ,安全性 清晰性,健壮性,可扩展性。 19. 需求管理: a) 需求变更:建议变更-分析影响-作出决策-交流-合并 b) 版本控制:确定需求文档版本 c) 需求跟踪: d) 需求状态跟踪 20. 需求变更的控制策略: a) 需求变更原
11、因:内部原因,外部原因 i. 内部原因:需求获取的不确切,需要发生变更,以适应真正的客户需求 第 7页 共 19页 殷人昆实用软件工程复习资料 ii. 外部原因:客户需求与之前发生了变化,如:客户的组织结构和工作流程发生了变化。 b) 需求变更的策略 i. 认识到变更不可避免的时候,为变更指定计划 ii. 重新确定需求的基线 iii. 指定变更的唯一渠道,防止因为变更导致的需求扩散。 iv. 指定合理的需求变更管理过程:如必须经过变更管理委员会确定的变更,才能真正进入需求文档,而不是开发人员擅自做主变更需求。 21. 软件设计 a) 传统结构化软件设计:数据设计,体系结构设计,接口设计,过程设
12、计。 b) 面向对象的软件设计:体系结构设计、类设计、接口设计、构件设计 i. 体系结构设计:软件的主要结构元素其之间的关系 ii. 类设计:转化为设计类的实现及软件实现所要求的数据结构 iii. 数据设计:主要是关系数据库中的E-R实体关系图 iv. 构件级设计:构件级设计 22. 软件设计原则: a) 设计应遵循:过程抽象,数据抽象。 b) 过程应遵循模块化的原则 i. 模块可分解 ii. 模块可组装 iii. 模块可被理解 iv. 模块连续性 v. 模块保护 c) 应遵循信息屏蔽的原则 d) 模块独立性:高内聚,低耦合。 e) 模块设计原则:先把该模块下的所有下层模块看成黑盒 23. 极
13、限编程 a) 极限编程是一种原型设计方法,是基于实践的设计方法。 b) 极限编程的原则:交流、简单、反馈、勇气。 i. 交流:鼓励开发人员与客户直接沟通,用沟通代替文档。 ii. XP不建议过分构建系统设计,反对杞人忧天的做法。简单最好,实现为前提。 iii. 反馈要迅速,反馈越快越好,进行结对编程,测试优先,现场客户。 iv. 拥抱变化,不变是变化,要有坚持XP设计的勇气,同时有放弃勇气。 c) XP的重要方法: i. 放弃包袱,轻装上阵。 ii. 结对编程 iii. 测试优先,以测试用例为驱动,单元测试。 iv. 重构 v. 持续集成 vi. 小版本 vii. 现场客户 24. 软件体系结
14、构 软件体系结构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个子模块和子系统有效的组织起来,组织成一个完整的系统。 25. 常见的风格:管道过滤器风格: 第 8页 共 19页 殷人昆实用软件工程复习资料 26. 面向对象的设计风格 27. 层次结构的风格 28. 数据仓库风格 专家黑板系统 29. 设计模式: 设计模式分为三类: 1)创建型模式:与对象的创建有关 2)结构型模式:处理类与对象的组合,将一组对象组合成一个大的结构 3)行为型模式:描述类与对象交互和职责分配。 按照使用范围,又分为对象和类两种类型 其中23中设计模式,主要 创建型:描述怎么创建一个对象,他隐藏对象
15、创建的具体细节,实用程序可不依赖具体的对象,因此当增加一个新对象时几乎不需要修改代码。其隐藏了这些类的实例如何创建、如何放在一起。 创建型类模式有:工厂模式 创建型对象模式有:抽象工厂,构造模式,原型模式,单例模式 重点1:抽象工厂模式: 以同一接口建立一整组相关或相互依赖的对象,而不用指明个对象真正所属的具体类。 第 9页 共 19页 殷人昆实用软件工程复习资料 抽象工厂的特点: 1. 封装性:都是接口,不关心细节。只需知道工厂类即可,就能创建出一个对象,省时省力。 2. 约束性:产品约束在产品内部,外部不需要关心。 缺点: 1. 扩展性困难,增加一个新产品,需要抽象类,抽象类实现工厂都要修
16、改,改动太大。抽象工厂是一种契约关系,一种契约修改,所有的代码都要修改。 使用场景: 1. 使用对象组,这类对象有相同约束,如:文本编辑器,在Linux下的和Windows下的因为底层API不同,代码实现不同。但是功能是相同的,有共同的约束条件,可以用抽象工厂,还有DB的操作,不同数据库的实例化。 2. 一个模式在什么情况下才能够使用,是很多读者比较困惑的地方,抽象工厂模式是一个简单的模式,使用的场景非常多,大家在软件产品开发过程中,涉及到不同操作系统的时候,都可以考虑使用抽象工厂模式,例如一个应用,需要在三个不同平台上运行:Windows、Linux、Android上运行,你会怎么设计?分别
17、设计三套不同的应用?非也非也,通过抽象工厂模式屏蔽掉操作系统对应用的影响。三个不同操作系统上的软件功能、应用逻辑、UI都应该是非常类似,唯一不同的是调用不同的工厂方法,由不同的产品类去处理与操作系统交互的信息。 重点2 工厂方法 定义一个用于创建对象的接口,当让子类决定实现那个一个类的对象。此模式让一个类将创建对象的过程交予给子类来处理 第 10页 共 19页 殷人昆实用软件工程复习资料 工厂模式特点:使用频率很高具有封装性好,代码结构清晰的显著特点。扩展性也非常优秀,只需要增加扩展类,既可以实现扩展。在数据库开发中,会用到工厂方法模式。工厂模式是典型的的解耦框架。 工厂模式场景:他是new一
18、个对象的替代品,但是需要考虑new对象的成本。 其次,需要灵活的、可扩展的框架时,可以考虑采用工厂方法模式。万物皆对象,那万物也就皆产品类,例如需要设计一个连接邮件服务器的框架,有三种网络协议可供选择:POP3、IMAP、HTTP,我们就可以把这三种连接方法作为产品类,定义一个接口如IConnectMail,然后定义对邮件的操作方法,三个具体的产品类进行不同的实现,再定义一个工厂方法,按照不同的传入条件,选择不同的连接方式。如此设计,可以做到完美的扩展,如某些邮件服务器提供了WebService接口,很好,我们只要增加一个产品类就可以了。 再次,工厂方法模式可以用在异构项目中,例如通过WebS
19、ervice与一个非Java的项目交互,虽然WebService号称是可以做到异构系统的同构化,但是在实际的开发中,还是会碰到很多问题,如类型问题、WSDL文件的支持问题,等等,从WSDL中产生的对象都认为是一个产品,然后由一个具体的工厂类进行管理,减少与外围系统的耦合。 最后,可以使用在测试驱动开发的框架下,例如,测试一个类A,就需要把与类A有关联关系的类B也同时产生出来,我们可以使用工厂方法模式把类B虚拟出来,避免类A与类B的耦合。目前由于JMock和EasyMock的诞生,该使用场景已经弱化了,读者可以在遇到此种情况时直接考虑使用JMock或EasyMock 重点3:单例模式: 单例模式
20、:个类只有一个实例并提供一个访问它的全局访问点。该实例应在系统生存期中都存在 . 优点:内存中只存在一个实例,减少了内存的开支。特别是一个对象需要频繁的创建、销毁,并且创建或者销毁的性能又无法优化。单例模式的优势非常明显。在对文件操作,读取配置,都可以。 缺点:没有借口,不能扩展。不利于测试。 使用场景: 1.要求生成唯一序列号的环境; 第 11页 共 19页 殷人昆实用软件工程复习资料 2.在整个项目中需要有访问一个共享访问点或共享数据,例如一个Web页面上的计数器,可以不用每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确保是线程安全的; 3.创建一个对象需要消耗的资源过多,如要访
21、问IO、访问数据库等资源; 需要定义大量的静态常量和静态方法的环境,可以采用单例模式; 重点4:适配器模式 1. 父类:Target 方法Request; 2. 子类:Adapter 实现父类Request方法,是作为适配器类。 3. 被桥接对象 Adaptee 拥有特殊SpecialRequest 在Adapter类中,实现特殊类,并将特殊类的方法包裹进目标类的方法中:具体实现: Class Target Public void Request Class Special Public void SepicalRequest Class Adapter extends Target Spec
22、ial sr = new Special; Public void Request Sr.SpecialRequest; 重点5: 桥接器模式 这是普通一种父子类关系来实现抽象模型。其缺点是不符合开放闭合原则,一个类有多个原因引起其变化,如本关系中跟汽车和路两种类有关系。里面有代码的重复。 第 12页 共 19页 殷人昆实用软件工程复习资料 通过抽象类,分别实现了抽象路 和抽象车,然后通过在抽象路中调用抽象车,实现了桥接。 重点5:组合模式 第 13页 共 19页 殷人昆实用软件工程复习资料 软件需求规格说明软件设计规格说明集成测试以此为集成测试的依据验证模块设计模块设计规格说明单元测试30.
23、 软件测试 原则:尽快发现问题,测试必须追溯到需求,测试用例应包括合理和不合理两部分组成。 软件测试应该贯穿整个软件过程中。 测试的两个方面: 1) 缺陷测试 2) 验证和确认 测试的步骤: 1)指定测试计划 2)测试设计:设计测试用例,定义测试过程 3)实施测试 4)单元测试 5)集成测试 6)系统测试 7)评估测试 测试对应软件系统的不同阶段 注:接收测试也叫用户测试 单元测试:单元测试的目的在于发现各模块内部的错误,以确保受测试模块内部的一致性与逻辑正确。需要强调的是,单元测试是必须要进行的、不能省略的步骤。 回归测试 系验证系统需求接受测试系以此为接受测试的依据验证软件需求验证软件设计
24、以此为单元测试的依据软件编程第 14页 共 19页 殷人昆实用软件工程复习资料 单元测试包括: 1. 模块接口测试,通过数据流进行测试。 2. 局部数据结构测试:包括数据类型,数据初始化,上下溢等 3. 路径测试:保证基本每条语句所经过路径要测试一次 4. 错误处理的测试:适应各种出错条件 5. 边界测试:程序中判定操作或循环的操作界限的边缘条件 集成测试:根据实际情况对程序模块采用适当的集成测试策略组装起来,对系统的接口以及集成后的功能进行正确性检验的测试工作。 集成测试包括基于模块分解的,基于分层的和基于路径的。 集成测试策略: l 功能测试 l 性能测试:性能测试用来测试软件在系统中的运
25、行性能。其目标是量度系统的性能与预先定义目标有多大差距。 l 压力测试:系统在一个短时间内活动处在峰值时的反应。 l 容量测试:系统正常运行的范围内测试并确定系统能够处理的数据容量。 l 恢复性测试:在人工干预下,恢复测试的目标就是验证系统从软件或者硬件失效中恢复的能力。 l 备份测试 l 界面测试:界面外观是否符合要求,界面是否按照预定进行响应。 l 健壮性 l 兼容性 l 易用性 回归测试:回归测试是在软件变更之后,对软件重新进行的测试。检验对软件进行的修改是否正确 31. 软件调试 软件调试是在进行了成功的测试之后才开始的工作。它与软件测试不同,调试的任务是进一步诊断和改正程序中潜在的错
26、误 常见调试方法: 1. 强行排错:打印内存信息,看是否泄露 2. 回溯法 3. 归纳法 4. 演绎法 32. 测试用例设计 n 测试用例是为了特定目的而设计的测试数据及与之相关的测试规程的一个特定的集合,或称为有效地发现软件缺陷的最小测试执行单元。 n 软件质量的好坏很大程度上取决于测试用例的数量和质量。不论程序员的编程水平、软件设计水平有多高,软件过程执行得如何好,如果没有通过合适数量和质量的测试用例进行测试,其最终的软件质量都是难以保证的。 n 黑盒测试:测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求和功能规格说明,检查程序的功能是否符合它的功能说明。 n 用黑盒测试发
27、现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。 n 白盒测试:把测试对象看做一个玻璃盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。 n 通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。因此白盒测试又称为结第 15页 共 19页 殷人昆实用软件工程复习资料 构测试或逻辑驱动测试。 路径覆盖测试:对程序模块的所有独立的执行路径至少测试一次 逻辑覆盖测试:对所有的逻辑判定,取“真”与取“假”的两种情况都至少测试一次 控制流测试:在循环的边界和运行界限内执行循环体 数据流测试、
28、领域测试:测试内部数据结构的有效性 重点:白盒测试用例设计方法 1. 白盒测试包括: a) 逻辑覆盖 i. 语句覆盖:每一句可执行的语句都执行一次 2. 3. 路径1: 判定1和判定2都走真分支 4. P1 ( a c e ) 5. = (A 1) and (B = 0) and (A = 2) or (X/A 1) 6. = (A 1) and (B = 0) and (A = 2) or 7. (A 1) and (B = 0) and (X/A 1) 8. = (A = 2) and (B = 0) or 9. (A 1) and (B = 0) and (X/A 1) 10. 路径2:
29、判定1和判定2都走假分支 11. P2 ( a b d ) 12. = not (A 1) and (B = 0) and 13. not (A = 2) or (X 1) 14. = not (A 1) or not (B = 0) and 15. not (A = 2) and not (X 1) 16. = not (A 1) and not (A = 2) and not (X 1) or 17. not (B = 0) and not (A = 2) and not (X 1) 18. 19. 路径3:路径3: 20. P3 ( a b e) 21. = not (A 1) and
30、(B = 0) 22. and (A = 2) or (X 1) 23. = not (A 1) or not (B = 0) 24. and (A = 2) or (X 1) 25. = not (A 1) and (A = 2) or not ( A 1) and (X 1) 26. or not (B = 0) and (A = 2) 27. or not (B = 0) and (X 1) 28. 路径4: 第 16页 共 19页 殷人昆实用软件工程复习资料 29. P4 ( a c d ) 30. = (A 1) and (B = 0) 31. and not (A = 2) or
31、(X/A 1) 32. = (A 1) and (B = 0) and not (A = 2) 33. and not (X/A 1) 34. i. 判定覆盖:每条分支都执行一次,又叫分支覆盖 ii. 条件覆盖:每个可能取值的条件执行一次 iii. 判定-条件覆盖:每个可能取值的条件执行一次,每个判断中分支执行一次。 iv. 条件组合覆盖:所有可能的取值组合执行一次 v. 覆盖程序所有路径测试 b) 判定结构分析 c) 循环结构分析 i. 简单循环 ii. 连锁循环 iii. 嵌套循环 iv. 非结构循环 d) 基本路径覆盖:基本路径测试方法把覆盖的路径数压缩到一定限度内,程序中的循环体最多只
32、执行一次。 有语句变成分支图 基本路径集 第 17页 共 19页 殷人昆实用软件工程复习资料 测试用例 33. 重点黑盒测试用例设计 n 等价分类法:把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每一部分中选取少数代表性的数据做为测试用例。 划分等价类 u 如果输入条件规定了取值范围,或值的个数,则可确立一个有效等价类和两个无效等价类 u 如果输入条件规定了输入值的集合,或者是规定了“必须如何”的条件,这时可确立一个有效等价类和一个无效等价类。例如:“以字母打头的串”。那么所有以字母打头的构成有效等价类,而不在此集合内的归于无效等价类。 u 等价类划分例子: l “标识符是由字母开
33、头,后跟字母或数字的任意组合构成。编译器能够区分的有效字符数为8 个,最大字符数为 80 个。” 并且规定:“标识符必须先说明,再使用。”“在同一说明语句中,标识符至少必须有一个。” l 分析:从输入条件看: n 标识符的组成 n 标识符的第一个字符 n 标识符的字符个数 n 说明语句中的标识符个数 n 标识符的使用 转换为等价类: 选取测试用例 n 第 18页 共 19页 殷人昆实用软件工程复习资料 n 边界值分析法:边界值分析也是一种黑盒测试方法,是对等价类划分方法的补充。大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。 边界值分析法测试用例:例如,判断三角形问题,问题的提法是:程序接受 3 个整数 a、b 和 c 作为输入,用做三角形的边。整数 a、b 和 c 必须满足以下条件: C11a200 C21b200 C31c200 C4ab + c, C5ba + c C6ca + b 分析:C1、C2和C3,整数a、b、c的边界值为1和200,稍超出边界的值为0和201。C4、C5和C6的边界值分别是b+ca+1、a+cb+1和b+ca+1。 n n n n n n n 判定表法 因果图法 规范导出法 内部边界值法 错误推测发 接口测试 综合法 第 19页 共 19页