软件工程复习
软件工程复习
(内容有出入,某些按自己理解简写)
1-2章
软件工程概述,可行性研究及需求分析
-
软件工程三要素:
方法、过程和工具
。 -
软件工程研究的内容:
方法与技术、工具与环境、管理技术、标准与规范
。 -
软件危机的主要原因是:
软件本身的特点以及开发方法
。 -
软件生命周期:
可行性研究,需求分析,软件设计,编码,软件测试,软件维护
。 -
软件生命周期模型:
瀑布模型 模型简单,执行容易,但无法适应变更 快速原型模型 完成的功能往往是最终产品能完成的功能的子集 增量模型 将待开发的软件系统模块化和组件化 螺旋模型 每个阶段前增加一个风险分析 喷泉模型 体现面向对象软件开发过程迭代和无缝的特性 -
软件过程是软件开发活动的集合。
-
数据流图(DFD)是进行软件需求分析的常用工具,基本的图形符号是
加工、数据流、数据存储和外部实体。
-
在需求分析中建模方法:
数据流图(DFD),状态转换图(STD),实体关系图(ER),控制流图(CFD)
。 -
需求分析中主要描述手段:
DFD,数据字典,加工说明
。 -
软件工程需求分析阶段:
分析系统的数据要求,确定系统的功能需求,确定软件系统的性能要求
。 -
需求分析的主要方法有
结构化分析方法(SA)
,考虑
数据和处理
的需求分析。 -
软件需求规格说明书的内容包括:
对重要功能的描述,对数据的要求,软件的性能
。 -
需求规格说明书不可以作为
软件可行性研究
的依据。 -
软件危机的主要表现是
软件产品的质量低劣,开发生产软件效率低下
。
第3-5章 软件设计,编码实现,测试和维护
-
面向数据流的软件设计模式可将
数据流
映射软件结构。 -
软件模块的独立性由
内聚性和耦合性
来衡量:内聚性:模块的功能强度(模块内各元素之间彼此结合得紧密程度)
耦合性:模块间相连程度的度量。
在软件设计时,应该提高模块的内聚程度,
高内聚低耦合
。
耦合程度
小 —>大 : 数据,控制,公共,内容。 -
Jackson方法是根据
数据结构
导出程序结构。 -
在面向数据流的软件设计方法中,一般将信息流分为
变换流和事务流
。 -
软件实现
将
软件设计
的结构翻译成一种程序设计语言的代码。 -
软件测试的目的是为了发现软件的错误(
找出软件中所有的错误是不可能的
) -
白盒
法又称为
逻辑覆盖
法,主要用于单元测试。 白盒测试要对系统
内部结构
和
工作原理
有一个清楚的了解。 白盒测试有多种技术:代码检查法,基本路径测试,逻辑覆盖测试。
白盒测试是根据程序的 内部逻辑 来设计测试用例的。
-
黑盒测试又称为
功能测试
,主要关注功能的实现。 黑盒测试又分为:等价类划分法,边界值分析法,错误推断法,因果图法,决策表法,场景法等。
-
下面给出黑盒测试与白盒测试的差别。
黑盒测试 白盒测试 不涉及程序结构 考察程序逻辑结构 用
软件规格说明书
生成测试用例用
程序结构信息
生成测试用例可适用于从单元测试到系统验收测试 主要适用于单元测试和集成测试 某些代码段得不到测试 对所有逻辑路径进行测试 从
用户
观点测试从
管理者角度
测试 -
成功的测试需要在运行测试用例
发现程序的错误
。 -
软件集成测试交给
不属于该软件开发组的软件设计人员
承担,可以提高集成测试的效果。 -
集成测试的主要方法有:渐增式测试方法,非渐增式测试方法。
-
软件测试的目的是
尽可能
发现软件中的错误,通常
单元测试
是代码编写阶段可进行的测试,它是整个
测试工作的基础
。 -
单元测试不能完成的测试是
系统功能
。 -
软件维护的副作用—
修改软件而造成的错误
(Bug越改越多) -
影响软件可维护性的主要因素:
可修改性,可测试性,可理解性
。 -
测试用例由
输入数据
和
预期输出结构
两部分组成。 -
功能测试
是
系统测试
的主要内容,检查系统的功能、性能是否与需求规格说明相同。 -
划分模块虽然可以降低软件设计的复杂性和工作量,但是会增加软件成本。
-
软件设计说明书
不是
软件概要设计的主要成果。
第6-7章 面向对象和UML,面向对象软件设计和实现
-
面向对象技术中,对象是
类的实例
,对象有三种成分:
封装,属性,方法
。 -
面向对象特征:
多态性,继承性,封装性,对象唯一性,抽象性。
-
面向对象模型主要包括: 对象模型(o)、动态模型(d)、功能模型(f)。
-
封装
把对象的属性和操作结合在一起,构成一个独立的对象。内部信息对外界隐藏,外界只能通过接口与对象发生联系。
-
关联是建立
类
之间的关系。 -
所有的对象可以成为各种对象类,每个对象类都定义了一组
方法
。 -
通过执行对象的操作可以改变独享的属性,但它必须通过
消息
的传递。 -
UML是软件开发中的一个重要工具,它主要应用于
基于对象的面向对象方法
。 -
UML图:
- 用例图
- 静态图:类图,对象图
- 行为图:状态图,活动图
- 交互图:顺序图,协作图
- 实现图:构件图,部署图
UML 图 | 功能 |
---|---|
用例图 | 从用户使用系统的角度描述系统功能的图形表达方法 |
类图 | 表达系统类及其相互联系的图(面向对象设计的核心) |
对象图 | 对象是类的实例,对象间连接是类之间关联的实例 |
状态图 | 描述一个特定对象的所有可能状态和引起状态转换的事件 |
顺序图 |
描述对象之间的动态交互关系,着重表现对象间消息传递的 时间顺序 |
活动图 | 活动图描动作及动作间关系 |
协作图 | 描述相互协作的对象间的交互关系和链接关系 |
构件图 | 描述软件构件间的依赖关系 |
部署图 | 描述处理器、硬件设备和软件构件运行时的构架 |
-
面向对象分析首先要建立
问题的对象模型
。 -
面向对象分析阶段建立的模型中,核心是
对象
(生活中也是)。 -
面向对象的动态模型中,每张状态图表示
某一个类
的动态行为。 -
动态模型着重于系统的逻辑控制,它包括
事件追踪图
和
状态图
。 -
对象模型的描述工具是
对象图
。 -
功能模型中的
数据流图(DFD)
,往往形成一个层次结构。 -
面向对象设计阶段的主要任务是
系统设计
和
对象设计
。 -
只有类的共有界面的成员才能成为使用类的操作,这是软件设计的
信息隐藏
原则。 -
对象的
属性集合
是它的特征表示。 -
面向对象程序设计语言不同于其他语言的主要特点是
继承性
。 -
面向对象的测试与传统测试方法的主要区别是
测试对象不同
。 -
面向对象分析与设计活动是一个多次
反复迭代
的过程。
第8章 软件工程管理
-
软件工程针对维护工作的主要目标是:提高软件的可维护性,降低维护的工作量。
-
度量
的作用是为有效地、定量地进行软件工程过程管理。 -
LOC和FP是两种不同的估算技术 ,两者对分解所需要的
详细程度
不同。 -
风险管理过程:
规划,识别 ,评估
。 -
按照人家配置管理的原始指导思想,受控制的对象应该是
软件配置项
。 -
常用的评估软件质量的因素:
可理解性,可靠性,可维护性
。 -
基线是通过了
正式复审
的
软件配置项
(基线形成前可以快速修改)。 -
使用软件时提出增加新功能就必须进行
完善性
维护。 -
软件文档不仅是软件开发各阶段的重要依据,也影响软件的可维护性。
-
影响软件维护的主要因素:
可修改性,可测试性,可理解性
。 -
CMM表示
软件过程成熟度模型
(Capability Maturity Model Integration)。 -
代码行技术
是比较简单的估算软件规模的方法。
前面没有提到的一些重点问题
- 敏捷软件开发过程的核心价值观:
-
个体与交互胜于流程与工具
-
可工作的软件胜于面面俱到的文档
-
客户协作胜于合同谈判
-
响应变化胜于遵循计划
- 如何理解需求分析的作用和重要性。 需求分析的难点在哪里?
-
作用:避免需求中的错误,高效发开软件。
-
重要性:能减少软件开发费用,提高软件质量,确保软件开发的正常进行。
-
难点:
- 用户和开发人员间存在交流障碍
- 用户对需求的陈述不完整
- 简述结构化分析方法的基本思想,其建模方法有哪些?
- 基本思想: 对于一个复杂的系统,按照其内部数据的流动和处理过程,采用“抽象”和“分解”的手段,首先“抽象”得到系统的高层逻辑模型,之后采用自顶向下逐步求精的方法,对系统逻辑模型逐层不断“分解”细化,直到不能再细化为止,即可得到系统最底层的详细逻辑模型。对系统结构化分析的成果通常采用数据流图和数据字典来表示。
- 建模方法:数据流图(DFD),状态转换图(STD),实体关系图(ER),控制流图(CFD)。
- 简述软件设计的 7 条启发式规则?
- 改进软件结构提高模块独立性
- 模块规模应该适中
- 深度、宽度、扇出和扇入应适当
- 模块的作用域应该再控制域之内
- 降低模块结构的复杂度
- 设计单出入口的模块
- 模块功能应能预测
- 要形成良好的编码风格可以从哪些方面做起?
- 程序内部文档
- 数据说明
- 语句构造
- I/O
- 效率
- 在选择编程语言时,要考虑哪些因素?
- 项目的应用范围
- 用户的要求
- 软件开发人员的爱好和能力
- 系统的可移植性要求
- 算法和数据结构的复杂性
- 平台支持
- 面向对象设计的准则?
-
模块化
-
抽象
-
信息隐藏
-
弱耦合
-
强内聚
-
可重用
- 简述面向对象测试策略的特点。
- 面向对象的单元测试
- 面向对象的集成测试
- 面向对象的确认测试
- 目前项目开发时常用的小组组织方法有哪些?
- 民主制程序员组
- 主程序员组
- 现代程序员组。
- 简述软件文档的意义?合格的软件工程文档的特性?
- 意义:在软件开发工作中具有突出的地位和相当的工作量。
-
特性:
- 及时性
- 完整性
- 实用性
- 规范性
- 结构化
- 简洁性
- 什么是软件质量?软件质量保证措施有哪些?
- 软件质量:软件与明确地和隐含地定义的需求相一致的程度。
-
措施:
- 正式技术复审
- 程序正确性证明
- 什么是模块化?模块化有什么好处?
- 模块化:开发具有独立功能而且和其他模块之间没有过多的相互作用的模块。
-
好处:
- 有效模块化的软件容易开发
- 容易测试和维护
一些习题
-
旅行社把预订机票的旅客信息(姓名、年龄、单位、身份证号码、旅行时间及目的地等)输入机票预订系统。系统为旅客安排航班,打印出取票通知单(附有应付的账款)。旅客在飞机起飞的前一天凭取票通知单交款取票,系统检验无误,输出机票给旅客。
请画出系统的顶层数据流图、0 层数据流图。
-
某高校学籍管理系统用于各个学院对每一位学生的入学、毕业、每学期考试成绩、升留级等事项进行处理,包括录入学生基本信息、存储学生基本情况例如,学生各科成绩等;查询学生各科成绩、单科成绩;打印学生名单、学生成绩单;统计班平均成绩、各科平均成绩;根据分数进行升留级处理等功能。 具体描述:
学籍管理系统细分为录入、存储处理、查询处理,升留级处理和统计处理。
(1)录入、存储处理首先对学生信息进行审查,如果是新生,则录入、存储新生的信息。并写入学生记录文件;否则,从学生成绩文件中读该学生的各科成绩,输出学生记录表及成绩单。
(2)查询处理接收学生学号和课程号,并进行有效性检查,如无效,则拒绝接受;否则按照查询要求从学生成绩文件中读取成绩并打印成绩单。
(3)升留级处理接收学生成绩,并从成绩标准文件中读取信息,判断该学生是否升级,形成升留级名单,并更新学生记录。
(4)统计处理接收学生记录,根据统计选择进行班平均成绩和各科平均成绩的统计,形成相应的统计表。
请画出该学籍管理系统的三层数据流图。
-
某高校学生档案管理系统的主要功能有:
(1)对学生档案信息的增加、删除和修改;
(2)对学生信息的查询和打印;
(3)对学生信息的统计和打印;
(4)此外,本系统还应该能与其它系统共享部分数据。
请画出此系统的顶层数据流图、0 层数据流图。
-
某高校学生档案管理系统的主要功能有:
(1)对学生档案信息的增加、删除和修改;
(2)对学生信息的查询和打印;
(3)对学生信息的统计和打印;
(4)此外,本系统还应该能与其它系统共享部分数据。
请设计出学生档案管理软件的系统结构图。
-
在自动饮料售货机中,除了买饮料的顾客,还有以下活动者:
(1) 供应商,向自动饮料售货机添加饮料
(2) 收银员,从自动饮料售货机收钱。
后面两类人在使用自动饮料售货机时,都涉及打开和关闭该机器。请画出它们的用例图。
某校图书管理系统具有以下功能:
(1)借书:先为读者办理借书证,借书证上记录读者姓名、学号、所属系和班级等信息。
借书时根据读者的借书证查阅读者档案,若借书数目未超过规定数量,则办理借阅手续,修
改库存记录及读者档案;若超过规定数量则不予借阅。
(2)还书:根据读者书中的条形码,修改库存记录及读者档案,若借阅时间超过规定期限
则罚款。
(3)图书管理员还要定期生成订书清单,包括书名、图书代号、单价、数量等,根据需要
向供应商订购图书。