软件工程复习
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)。
-
代码行技术是比较简单的估算软件规模的方法。
前面没有提到的一些重点问题
- 敏捷软件开发过程的核心价值观:
-
个体与交互胜于流程与工具
-
可工作的软件胜于面面俱到的文档
-
客户协作胜于合同谈判
-
响应变化胜于遵循计划
- 如何理解需求分析的作用和重要性。 需求分析的难点在哪里/li>
-
作用:避免需求中的错误,高效发开软件。
-
重要性:能减少软件开发费用,提高软件质量,确保软件开发的正常进行。
-
难点:
- 用户和开发人员间存在交流障碍
- 用户对需求的陈述不完整
- 简述结构化分析方法的基本思想,其建模方法有哪些/li>
- 基本思想: 对于一个复杂的系统,按照其内部数据的流动和处理过程,采用“抽象”和“分解”的手段,首先“抽象”得到系统的高层逻辑模型,之后采用自顶向下逐步求精的方法,对系统逻辑模型逐层不断“分解”细化,直到不能再细化为止,即可得到系统最底层的详细逻辑模型。对系统结构化分析的成果通常采用数据流图和数据字典来表示。
- 建模方法:数据流图(DFD),状态转换图(STD),实体关系图(ER),控制流图(CFD)。
- 简述软件设计的 7 条启发式规则/li>
- 改进软件结构提高模块独立性
- 模块规模应该适中
- 深度、宽度、扇出和扇入应适当
- 模块的作用域应该再控制域之内
- 降低模块结构的复杂度
- 设计单出入口的模块
- 模块功能应能预测
- 要形成良好的编码风格可以从哪些方面做起/li>
- 程序内部文档
- 数据说明
- 语句构造
- I/O
- 效率
- 在选择编程语言时,要考虑哪些因素/li>
- 项目的应用范围
- 用户的要求
- 软件开发人员的爱好和能力
- 系统的可移植性要求
- 算法和数据结构的复杂性
- 平台支持
- 面向对象设计的准则/li>
-
模块化
-
抽象
-
信息隐藏
-
弱耦合
-
强内聚
-
可重用
- 简述面向对象测试策略的特点。
- 面向对象的单元测试
- 面向对象的集成测试
- 面向对象的确认测试
- 目前项目开发时常用的小组组织方法有哪些/li>
- 民主制程序员组
- 主程序员组
- 现代程序员组。
- 简述软件文档的意义格的软件工程文档的特性/li>
- 意义:在软件开发工作中具有突出的地位和相当的工作量。
- 特性:
- 及时性
- 完整性
- 实用性
- 规范性
- 结构化
- 简洁性
- 什么是软件质量件质量保证措施有哪些/li>
- 软件质量:软件与明确地和隐含地定义的需求相一致的程度。
- 措施:
- 正式技术复审
- 程序正确性证明
- 什么是模块化块化有什么好处/li>
- 模块化:开发具有独立功能而且和其他模块之间没有过多的相互作用的模块。
- 好处:
- 有效模块化的软件容易开发
- 容易测试和维护
一些习题
- 旅行 把预订机票的旅客信息(姓名、年龄、单位、身份证 码、旅行时间及目的地等)输入机票预订系统。系统为旅客安排航班,打印出取票通知单(附有应付的账款)。旅客在飞机起飞的前一天凭取票通知单交款取票,系统检验无误,输出机票给旅客。
请画出系统的顶层数据流图、0 层数据流图。
-
某高校学生档案管理系统的主要功能有:
(1)对学生档案信息的增加、删除和修改;
(2)对学生信息的查询和打印;
(3)对学生信息的统计和打印;
(4)此外,本系统还应该能与其它系统共享部分数据。
请设计出学生档案管理软件的系统结构图。
某校图书管理系统具有以下功能:
(1)借书:先为读者办理借书证,借书证上记录读者姓名、学 、所属系和班级等信息。
借书时根据读者的借书证查阅读者档案,若借书数目未超过规定数量,则办理借阅手续,修
改库存记录及读者档案;若超过规定数量则不予借阅。
(2)还书:根据读者书中的条形码,修改库存记录及读者档案,若借阅时间超过规定期限
则罚款。
(3)图书管理员还要定期生成订书清单,包括书名、图书代 、单价、数量等,根据需要
向供应商订购图书。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!