由于过几天要考软件工程了,所以把软件工程比较重要的内容进行整理归纳
第 1章
软件危机产生的本质原因;
!!软件日益庞大
什么是软件工程?
软件工程是:
(1)将系统化的、规范化、可量化的方法应用于软件的开发、运行和维护,即将工程化方法应用于软件。
(2)在(1)中所述方法的研究
软件工程方法学三要素?
方法、工具、过程
软件生命周期分为哪三大时期?八个阶段?
软件定义、开发、运行维护三个时期
- 问题定义
- 可行性研究
- 需求分析
- 总体设计
- 详细设计
- 编码和单元测试
- 综合测试
- 软件维护
前五个过程模型各自特点;
- 瀑布模型 阶段间具有顺序性和依赖性 推迟实现的观点 质量保证的观点
- 快速原型模型 快速建立一个能反应用户主要需求的原型系统,让用户先试用,然后提出修改意见,开发人员再快速修改原型系统
- 增量模型 分批的逐步向用户提交产品,整个软件产品被分解成许多个增量构建
- 螺旋模型 看作是在每个阶段之前都增加了风险分析过程的快速原型模型
- 喷泉模型 以用户需求为动力,以对象为驱动,面向软件开发过程迭代和无缝的特性
第 2章
数据流图(网上能查到,基本上只要记住至少需要一个输入流和一个输出流就可以)
第 3章
获取需求的方法
- 访谈 2.问卷调查 3.现场考察 4.资料查阅 5.市场调研
结构化分析建立哪三个模型?
数据模型(实体关系图ERD)、
功能模型(数据流图DFD,至少需要一个输入流和一个输出流)、
行为模型(状态迁移图STD)
第 5章
结构化方法学总体设计原理
1.模块化(把程序划分成独立命名且可单独访问的模块)
2.抽象 (事物之间存在共性,将其进行集合和概括起来,暂时忽略他们其中的差异)
3.逐步求精 (为了能集中精力解决主要问题而尽量推迟对问题细节的考虑)
4.信息隐藏和局部化 (一个模块内的信息,对于不需要的模块来说,是不能访问的,将一些关系密切的软件元素放得比较靠近彼此)
5.模块独立(前四种的直接结果)
耦合与内聚的基本概念
耦合:对一个软件结构内不同模块之间互连程度的度量
内聚:标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展
耦合和内聚是两个很相似的概念
几种耦合的定义
数据耦合(低耦合):如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据
控制耦合(中等程度的耦合):如果传递的信息中有控制信息
特征耦合:当整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素
公共环境耦合:若一组模块都访问同一个公共数据环境,随着耦合的模块个数的增多,复杂程度也随之增强
内容耦合(最高程度):
一个模块直接访问另一个模块的内部数据;
或者一个模块不通过正常入口转到另一模块内部;
七种内聚的定义
功能内聚 完成一个单一的功能
顺序内聚 按照顺序执行
通信内聚 使用同一个输入数据或产生同一个输出数据
过程内聚 处理元素相关,以特定的次序执行
时间内聚 同一时间执行
逻辑内聚 逻辑上相同或相似的一类
偶然内聚 关系松散,一个模块的各成分之间毫无关系
从上到下,性能逐渐递减
第 6章
盒图
PAD图
第 7章
测试的分类,阶段,目标,好的测试,成功的测试,
黑盒测试:知道产品应该具有的功能,通过测试检验是否每一个功能都能正常使用
白盒测试:知道产品的内部工作过程
逻辑覆盖测试
语句覆盖,使每个语句都执行一次
判定覆盖 每个判定的每种可能的结果都至少执行一次
条件覆盖 每个条件都取到各种可能的结果
如上图
如果是语句覆盖: 那么我们只需要让其经过 sacbed就可以
那么就可以是 A=2 B=0 X=2
如果是判定覆盖:那么我们需要能够覆盖 sacbed,以及 sabd
那么就可以是A=2 B=0 X=2
以及 A=0 B=0 X=0
如果是条件覆盖的话:那么我们需要在a点满足A>1,A<=1,B=0,B≠ 0
在b点我们要满足 A=2 A≠2 X>1 X<=1
那么就可以是 A=2 B=0 X=1
以及 A=1 B=1 X=2
等价类划分的
把所有可能的输入数据划分成若干个等价类,以减少必须设计的测试用例的数目
边界值分析
处理边界情况时程序最容易发生错误
故障推测
很大程度上靠直觉和经验(。。。)
第 8章
软件提交后,为什么还要改变?
因为在软件测试的时候不可能暴露出一个大型软件系统中所潜藏的错误
四种类型的维护
完善性维护:扩充功能和改善性能而进行的修改
纠错性维护:开发阶段已经发生而系统测试阶段尚未发现的错误
适应性维护:软件适应信息技术变化和管理需求变化而进行的修改
预防性维护:为了改进应用软件的可靠性和可维护性
第 9,10,11,12章
面向对象分析建立哪三个模型?
对象模型,动态模型,功能模型
类与类之间的关系识别
关联、依赖、泛化、实现
面向对象设计通常分解为几个子系统?
人机交互、问题域、任务管理、数据管理
第13章
软件项目管理的概念
通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,已达到既定目标的过程
估算软件规模的方法;
代码行技术:依照以往开发类似产品的经验和历史数据,估计实现一个功能所需要的源程序行数
功能点技术:根据软件信息域的特性和软件复杂度的评估结果
做进度计划的方法;
估算开发时间
Gantt图(甘特图)
工程网络
估算工程进度
关键路径
机动时间
人员组织三种形式;
主程序员组(多数缺乏经验)
民主制程序员组
现代程序员组
配置管理的概念
一种标识、组织和控制修改的技术
软件配置项
软件生存周期各个阶段活动的产物经审批后
基线
软件工程活动从一个环节转入另外一个环节时对阶段产品或组件的标识