清华大学郑人杰 殷仁昆教授 《软件工程讲义》03.

合集下载

清华大学殷仁昆教授讲授《软件工程》讲义

清华大学殷仁昆教授讲授《软件工程》讲义
e) 模块保护 将模块内出现异常情况的影响 范围限制在模块内部;
5) 设计应遵循信息隐蔽的原则。
✓ Patnas主张在开发时,将每个程序的成分隐 藏在模块内,定义每一个模块时尽可能少地 显露其内部的处理。
2020/5/4
软件工程
14
✓ 每个模块的实现细节对于其它模块是隐蔽的, 将来修改软件时偶然引入错误所造成的影响 就可以局限在一个或几个模块内部,不致波 及到软件的其它部分。
内聚性:内聚是一个模块内部各个元素彼此结 合的紧密程度的度量。
② 设计应当模块化。
2020/5/4
软件工程
8
③ 设计应当包含数据、体系结构、接口和构件 (模块)的清晰的视图。
④ 设计应当根据将要实现的对象和数据模式导出 合适的数据结构。
⑤ 设计应当建立具有独立功能特征的构件。 ⑥ 设计应当建立能够降低模块与外部环境之间复
杂连接的接口。 ⑦ 设计模型应当通过使用软件需求信息所驱动的
⑤ 设计结果应能适应未来可能的变更;
⑥ 设计不是编码,编码也不是设计。设计模型 的抽象级别比源代码高。在编码级别上唯一 的设计决策是补充一些实现细节。
2020/5/4
软件工程
10
⑦ 设计应具有容错性和异常处理能力。对于异 常数据、事件、操作条件等能够平滑处理。
⑧ 在建立设计方案时就应能评估设计质量,而 不是在系统编码之后。
求,必须满足用户希望的所有隐式需求。
2020/5/4
软件工程
7
① 对于开发者和未来的维护者而言,设计必须 是可读的、可理解的,使得将来易于编程、 易于测试、易于维护。
② 设计应该给出软件的全貌,包括从实现角度 可看到的数据、功能、行为。
衡量设计模型的技术原则 ① 设计模型应该是一个分层结构。该结构: ✓ 使用可识别的设计模式搭建系统结构。 ✓ 用显示良好设计特征的构件构成。 ✓ 可以用演化的方式实现。

(完整word版)殷人昆《实用软件工程》复习资料

(完整word版)殷人昆《实用软件工程》复习资料

1.软件工程目标:正确性、可用性、适合销售活动:需求、设计、实现、V&V(验证与确认)、支持原则:开发泛型、设计方法、支持工具、工程管理WW软件工程是开发,运行,维护和修复软件的系统方法,将系统化的,规范的,可度量的方法应用与软件的开发,运行维护的过程。

即将工程化应用于软件中。

2.软件过程中的基本活动(pdca)1.软件规格说明plan2.软件开发do3.软件确认check4.软件演进action3.瀑布模型:需求-》系统设计-》实现单元测试-》集成与系统测试-》运营维护。

他的显著特点是顺序性和依赖性。

4.演化模型:软件通过不断的演化才能完成和完善,其显著特点是迭代。

适合于业务和需求不断变更的开发过程,交付部分功能给客户,确认需求,逐步完善。

5.螺旋模型:将瀑布模型和演化模型结合起来,加入了风险分析。

6.增量模型:是将软件分解成一系列的增量的构件,在增量开发迭代中逐步加入,也叫极限程序设计。

7.软件工程原则:a)抽象自顶向下,逐层细化b)模块化的开发方法c)信息隐蔽和数据封装。

d)局部化e)一致性f)完备性g)可验证性8.软件工程基本原理:a)按软件生存期分阶段制定计划并认真实施b)坚持进行阶段评审c)坚持严格的产品控制d)使用现代程序设计技术e)明确责任f)用人少而精g)不断改进开发的过程9.识别用户要求,必须考虑的问题:a)功能和性能b)可靠性和质量c)总的系统目标d)成本与进度的把控e)制造需求f)市场竞争情况g)有效的技术h)将来可能的扩展10.可行性研究a)问题识别b)市场调查c)分析准备d)环境分析e)物理分析f)功能分析g)信息分析h)动态分析i)确立系统方案和成本估算j)模型评审k)成本可行性l)法律可行性11.面向对象设计面向对象=对象+分类+继承+消息通信,基本组成部分叫对象,计算是通过新对象的确立和对象之间的通信来执行。

相对于面向过程开发,核心:数据被封装在对象中,而不是全局变量中,数据流是通过消息传递,而不是面向过程解决办法。

软件工程实践者教材--概述

软件工程实践者教材--概述
o 软件涉及各行各业的知识,这对软件工程师提出了很高要求。 o 软件不仅是一种在市场上推销的工业产品,也是与文学艺术作
品相似的精神作品。与体力劳动相比,精神活动过程的特点是 “不可见性”,这大大增加了组织管理上的困难。
软件工程实践者教材--概述
社会对软件的要求
o 用户的需求更高、涉及的领域更广 o 软件运行环境更加庞大 o 软件更新换代更加频繁
n 实现预期的软件功能,达到较好的软件性能,满足用户 的需求。
n 增强软件过程可见性和可控性,保证软件的质量。 n 提高软件的可维护性,降低维护费用。 n 提高软件开发生产率,及时交付使用。 n 合理预算开发成本,付出较低的开发费用。
软件工程实践者教材--概述
1.3 软件工程发展简史
o 1968年在德国格密斯(Garmish)举行的 学术会议上,北大西洋公约组织(NATO) 正式提出了“软件工程”这一术语。软件工 程作为工程学科家族中的新成员,对软件产 业的形成和发展起了决定性作用,它指导人 们科学地开发软件,有效地管理软件项目, 对提高软件质量具有重要作用。
软件工程实践者教材--概述
•别墅的设计—设计图纸、施工图纸
软件工程实践者教材--概述
•设计和施工说明
软件工程实践者教材--概述
其他管理性文件
o 项目计划书 o 施工质量计划书 o 建设标准和规范 o 施工手册 o ……
软件工程实践者教材--概述
典型helloworld程序—太简单! 不要设计
o 90年代后期,软件工程的一个重要进展就是基于组件的开发方 法。为了提高软件生产力,尽可能地利用可复用组件来组装成 新的应用软件系统。到目前为止,组件技术的研究和发展形成 了新一代软件工程,即第三代软件工程,也有不少人称之为组 件工程。

清华大学郑人杰殷仁昆教授软件工程讲义03

清华大学郑人杰殷仁昆教授软件工程讲义03
b) 模块可组装性 可利用已有的设计构件组 装成新系统,不必一切从头开始。
软件工程
12
c) 模块可理解性 一个模块可不参考其他模 块而被理解;
d) 模块连续性 对软件需求的一些微小变更 只导致对某个模块的修改而整个系统不 用大动;
e) 模块保护 将模块内出现异常情况的影响 范围限制在模块内部;
5) 设计应遵循信息隐蔽的原则。
✓ Patnas主张在开发时,将每个程序的成分隐 藏在模块内,定义每一个模块时尽可能少地 显露其内部的处理。
软件工程
13
✓ 每个模块的实现细节对于其它模块是隐蔽的, 将来修改软件时偶然引入错误所造成的影响 就可以局限在一个或几个模块内部,不致波 及到软件的其它部分。
✓ 在可预见将来可能修改的场合,信息隐蔽可 以提高软件的可修改性、可测试性和可移植 性。
公共耦合(Common Coupling)
若一组模块都访问同一个公共数据环境,则它 们之间的耦合就称为公共耦合。公共的数据环 境可以是全局数据结构、共享的通信区、内存 的公共覆盖区等。
软件工程
21
公共耦合的复杂程度随耦合模块的个数增加而 显著增加。若只是两模块间有公共数据环境, 则公共耦合有两种情况。松散公共耦合和紧密 公共耦合。
软件工程
25
功能内聚 (Functional Cohesion)
一个模块中各个部分都是完成某一具体功能必 不可少的组成部分,或者说该模块中所有部分 都是为了完成一项具体功能而协同工作,紧密 联系,不可分割的。则称该模块为功能内聚模 块。
功能内聚模块的功能独立性最强。
软件工程
26
信息内聚 (Informational Cohesion)
这种模块完成多个功能,各个功能相互独立但 都在同一数据结构上操作,每一项功能有一个 唯一的入口点。这个模块将根据不同的要求, 确定该执行哪一个功能。

CH1软件工程课件

CH1软件工程课件
17
yet, Success Hasnt Come Easily
Successfully 53%
Challenged 16%
31% Canceled
软件危机
相关术语
✓ “两难境地(Crunch Mode)”:处于两难境地的项目面临着无
法达到最初目标的威胁(费用、进度表、功能性等等),而项目团 队在努力想要跨越该困境。
能够对一定数量的读者进行相应的信息存储与 管理,这其中包括:
8
读者信息的登记、删除及修改。 读者资料的统计与查询。
能够对需要的统计结果提供打印输出。 能够提供一定的安全机制,提供数据信息授权
访问,防止随意删改,同时提供信息备份的服 务。
9
鼓励项目
移动互联网项目 李开复:创新工作室
应提交的文档
5
软件工程
计划:工作内容
① Contractor Management ② Home Owner Management ③ Architectural Management ④ Interior Designer ⑤ Landscape Management ⑥ Schedule & Supplier Management Funding Management Land Office Management
“Software” = “Place a sequence of instructions together to get the computer to do something useful”.
User Computer
Late 1950’s:
Computer became cheaper and more common High level languages were invented easier

软件工程概论课后习题答案

软件工程概论课后习题答案

软件工程概论郑人杰等版第1章软件与软件工程的概念1.1 举出你所知道的应用软件的例子。

办公软件、游戏软件、财务软件、银行软件、人事管理软件、工资管理软件、学籍管理软件等。

1.2 认为“软件就是程序,软件开发就是编程序。

”这种观点是否正确?为什么?认为“软件就是程序,软件开发就是编程序。

”这种观点是错误的。

首先,软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合,程序只是软件的组成部分之一;其次,在软件开发中,编程只是软件开发过程的一个阶段。

1.3 如果将软件开发比作高楼大厦的建造,可以将软件的设计比作什么?可以将软件的设计比作建筑设计,软件设计的成果相当于建筑设计的设计图纸。

1.4 什么是软件危机?它有哪些典型表现?为什么会出现软件危机?软件危机:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。

典型表现:(1)对软件开发成本和进度的估计常常很不准确。

(2)用户对“已完成的”软件系统不满意的现象经常发生。

(3)软件产品的质量往往靠不住。

(4)软件常常是不可维护的。

(5)软件通常没有适当的文档资料。

(6)软件成本在计算机系统总成本中所占的比例逐年上升。

(7)软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算机应用迅速普及深入的趋势。

产生软件危机的原因:除了软件本身的特点,其原因主要有以下几个方面:(1) 缺乏软件开发的经验和有关软件开发数据的积累,使得开发工作计划很难制定。

(2) 软件人员与用户的交流存在障碍,使得获取的需求不充分或存在错误。

(3) 软件开发过程不规范。

如,没有真正了解用户的需求就开始编程序。

(4) 随着软件规模的增大,其复杂性往往会呈指数级升高。

需要很多人分工协作,不仅涉及技术问题,更重要的是必须有科学严格的管理。

(5) 缺少有效的软件评测手段,提交给用户的软件的质量不能完全保证。

1.5 什么是软件工程?软件工程是指导计算机软件开发和维护的工程学科。

清华大学郑人杰殷仁昆教软件工程讲义08

清华大学郑人杰殷仁昆教软件工程讲义08
25
1. 数据组员是否满足数据封装旳要求
检验数据组员是否满足数据封装旳要求,就是检验 其数据组员是否能被外界(数据组员所属旳类或子 类以外旳调用)直接调用。更直观旳说,当变化数 据组员旳构造时,看其是否影响了类旳对外接口, 是否会造成相应外界必须改动。
值得注意,有时强制旳类型转换会破坏数据旳封装 特征。例如: class Hiden { private: int a = 1;
12
c) 高层旳类旳属性和服务是否完全体现下层 旳共性。
d) 低层旳类是否基于其上层类旳属性和服务 并具有自己旳特殊性。
2) 对复合构造旳测试从如下方面入手: a) 整体类和局部类旳复合(聚合)关系是否符 合现实旳关系。 b) 整体类旳局部类是否在问题领域中有实际应 用。 c) 整体类中是否漏掉了在问题领域中有用旳局 部类。
件旳功能实现,造成软件开发后期大量可防止旳修 补工作;而某些冗余旳对象或构造会影响类旳选定、 程序旳整体构造或增长程序员不必要旳工作量。所 以,OOA测试旳要点在其完整性和冗余性。 根据Coad和Yourdon措施所提出旳OOA实现环节, 对OOA阶段旳测试划分为下列五个方面: ✓对认定旳类旳测试 ✓对认定旳构造旳测试 ✓对认定旳主题旳测试
11
✓ 在Coad和Yourdon措施中,认定旳构造分为两 种:泛化构造和复合构造。泛化构造体现了问 题领域中对象旳一般与特殊旳关系,复合构造 体现了问题领域中对象旳整体与局部旳关系。
1) 对泛化构造旳测试可从如下方面着手: a) 对于构造中旳一种类,尤其是处于高层旳类, 看是否能在问题领域中派生出其下一层旳类。 b) 对于构造中旳一种类,尤其是处于同一低层 旳类,看是否能抽象出在现实世界中有意义 旳更一般旳上层旳类。
21

【计算机专业考研必备】殷仁昆_数据结构考研-要点解析(清华大学殷仁昆教授数据结构辅导班讲义)

【计算机专业考研必备】殷仁昆_数据结构考研-要点解析(清华大学殷仁昆教授数据结构辅导班讲义)
14
3) 注意练习
只看书不做题,不能真正学会有关知识, 不能达到技能培养的目的。 做题是自我检查的重要手段。 在做算法设计类型的习题时,应考虑数据 结构的定义。 3. 提高算法设计的能力。

编写算法的题可能是学生比较棘手的问题,特 别是在考试这样一个氛围,时间又短促,想编 出一个好算法不太容易。
问题2. 当元素以A, B, C, D, E顺序进栈,D, B, C, E, A 是可能的出栈顺序吗?
解析:“否”,因序列的进出栈顺序为 IA IB IC ID OD, 当D 出栈后,栈顶为C,不能让B先出来。 所以D, B, C, E, A 不是可能的出栈顺序。
26
问题3. 可否用两个栈模拟一个队列?反过来呢? 解析:“可以”,一个栈把全部数据反过来,另一 个栈再把这些数据反过去即可。而队列不能。 问题4. 栈、队列对线性表加了什么限制?
9
复习的范围

根据2009年考试分析和历年考试经验,可以对今 后考试作一个简单评估:

单项选择题覆盖了考试大纲涉及的所有各章, 主要考查对各个数据结构的定义和特点的理解, 以及相应延伸的概念。

综合应用题分为两个部分:算法分析题和算法 设计题(编程题),主要考查分析问题和解决 问题的能力。算法分析题的重点在图、查找、 排序部分,算法设计题的重点在线性表、树与 二叉树、查找和排序部分。
16
第一章知识点解析

本章“线性表”的知识点有 5 个: 1) 线性表的定义和特点:由数据元素组成,惟一 直接前驱与后继。 2) 线性表的基本操作:查找、定位、遍历、插入、 删除。 3) 线性表的存储表示:顺序存储、链表存储。 4) 循环链表和双向链表:定义和基本运算。
5) 线性表的应用:掌握使用线性表基本操作实现 应用算法
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档