软件工程考前总结
2024-01-13 09:59:13 0 举报
AI智能生成
软件工程考前总结
作者其他创作
大纲/内容
基线
通过了正式复审的规格说明或中间产品,作为进一步开发的基础,并且只有通过正式的变更控制才能改变它
特点
明确的标识
明确的内容
经过正式审批
严格控制变更
里程碑
用来说明项目进展情况的事件,通常把一个开发活动的结束或一项开发任务的完成定义为一个里程碑
必须与软件开发工作的进展情况密切相关,里程碑作为任务完成的标志,必须非常明显,里程碑具有很高的可见性
软件工程方法学三要素
方法
工具
过程
需求分析
系统责任指开发的系统应具备的职能
需求类型
功能需求
系统可以完成的所有事情
设计与本系统有接口的其他系统的所有事情
非功能需求
软件开发过程中必须遵守的约束 对可以使用的资源和软件质量的各个方面的限制 影响软件工程师做决策的自由度
非功能需求是可验证的
状态迁移图
描述系统的状态如何响应外部的信号进行推移的一种图形表示
直观的捕捉到状态之间的关系
单纯性 机械的分析许多情况 容易建立分析工具
数据流图
元素
数据变化
数据源 外部实体
数据流
数据存储文件
层次结构
顶层
仅包含一个加工 代表被开发系统
输入: 该系统的输入数据
输出: 系统的输出数据
特点
一种高层的系统逻辑模型
这个数据流图只有一个反映了目标系统要实现的功能
确定系统的边界: 内部实体 外部实体
底层
加工不需在做分解的数据流图
中间层
对上层的细化
总体设计
模块
数据说明 可执行语句等程序代码的集合
过程 函数 子程序 类 结构体 Agent Aspect service
把大型软件按照规定的原则划分为一个个较小的相对独立但又相关的模块
组成软件系统的基本单元
实现的一段代码 - 对应需求功能
属性
功能
模块实现的功能
逻辑
模块内部则么做
状态
模块使用时的环境和条件
模块独立
模块独立是模块化 抽象 信息隐蔽和局部化的直接结果
耦合
块间联系 程序结构中不同模块之间的互联程度
取决于 mo
模块间接口的复杂度
调用模块的方式
访问一个模块的点和通过接口的数据量
7级
非直接耦合
通过上级模块进行联系 无直接关联
数据耦合
参数传递的是一般类型的数据
特征耦合
参数传递的是结构体之类的数据
控制耦合
模块间传递诸如标记量的控制信息
外部耦合
几个模块访问同一一般类型的全局变量
公共耦合
全剧结构类型的数据
内容耦合
病态连接 一个模块直接操作另一个模块的数据
内聚
块内联系或模块强度 模块内各个成分彼此结合的紧密程度 模块内部的聚合能力
等级
偶然内聚
一个模块所完成的几个任务之间关系松散 互不相关。 为了避免重复书写而把重复代码集成到一个模块内
逻辑内聚
块内任务间在逻辑上相似或相同
时间内聚
执行时间一样而把任务放在一个模块
过程内聚
块内成分必须按照特定次序执行
通讯内聚
模块内各个成分都是用同一输入数据 或产生同一输出数据 借公用数据而联系在一起
顺序内聚
模块内各个组成部分都是与一个功能密切相关 顺序执行的
功能性内聚
一个功能一个模块 块内成分属于一个整体
高内聚 低耦合
子主题
控制域
控制范围 模块本身以及所有下属模块
作用域
作用范围 与条件判定相联系的概念 受该模块内一个判定影响的所有模块的集合
意义
任务的分解降低了问题规模 便于组织开发
使复杂的问题得以分解 降低问题的复杂度
增加软件的可读性和可维护性
有效的阻断错误传播 减小修改的副作用 提高软件的可靠性
易于系统功能的扩展 利于软件的重用
抽象
摘要 - 对具体事物的抽象
思维方式 抽取事物的本质属性
抽象过程
一个命名的指令序列
抽象数据
命名的数据集合 他描述一个数据对象所包含的属性
详细设计
针对模块详细设计
程序流程图
顺序型
选择型
多情况选择性
先判定型循环
后判定型循环
N-S图 盒图
顺序型
选择性
while重复型
until重复型
多分支选择型
特点
功能域(特定功能作用域)明确
不可能任意转移控制
很容易确定局部和全程数据的作用域
很容易表现出嵌套关系 表示模块的层次结构
问题分析图PAD
同上
特点
使用表示结构化控制结构的PAD符号所设计出来的程序必然是结构化程序
PAD所描绘的程序结构十分清晰 左面竖线是第一层 向右延伸 竖线总数为层次数
变现程序逻辑易读易懂易记 从左到右 从上到下遍历
容易将PAD转化为高级语言源程序 可自动完成 提高软件可靠性和生产率
可表示程序逻辑 描绘数据结构
PAD图符号支持自顶向下 逐步求精的方法使用 直至完成详细设计def
环域复杂度
V(G)=m-n+p m为弧数 n为节点数 P=1
判定节点数+1
环域数
意义
代表程序结构的复杂度
可加的
根据度量结果,可以对测试难度和软件可靠性进行预测
计算机语言发展
特点
硬件依赖性由强到弱
描述数据结构的复杂性越来越高
描述软件特征的层次由低到高
计算机语言发展的特点(三句话),与软工的发展有何关联,消除语义断层。
第一代机器语言、第二代汇编语言、第三代高级语言(工业时代)、第四代(信息时代)SQL、OO等。
特点:
1) 对计算机环境的依赖越来越低(硬件资源,操作系统,平台)
2) 所表达数据结构越来越复杂
3) 程序特征越来越抽象
和软件工程的发展有什么关系:计算机语言从低级到高级,更有利于软件工程的发展,计算机语言的发展是为软件工程服务的,有助于消除语义断层,从某种程度上解决了语义断层。
第一代机器语言、第二代汇编语言、第三代高级语言(工业时代)、第四代(信息时代)SQL、OO等。
特点:
1) 对计算机环境的依赖越来越低(硬件资源,操作系统,平台)
2) 所表达数据结构越来越复杂
3) 程序特征越来越抽象
和软件工程的发展有什么关系:计算机语言从低级到高级,更有利于软件工程的发展,计算机语言的发展是为软件工程服务的,有助于消除语义断层,从某种程度上解决了语义断层。
软件维护
在软件运行维护阶段对软件产品的修改
类型
改正性
适应性
完善性
预防性
植入错误法
人为植入N个错 一段时间后发现n个错 此外有m个原先的错 错误总数为
ALL = m/n*N
通过估计软件中残留错误的数量来确定软件的可靠性
假设设计测试用例发现植入错误和原有错误的能力相同
能力成熟模型
定义:用于评价软件机构的软件过程能力成熟的模型,最初为了大型软件项目的招标活动提供一种全面而客观地评审依据,后来又同时被应用于许多软件机构内部的过程改进活动中。
基本思想:由于问题是由人们管理软件过程的方法不当引起的,所以新软件技术的运用并不会自动提高软件的生产率和质量。该模型有利于软件开发机构建立一个有规律的成熟的软件过程,改进后的软件过程将开发出质量更好的软件,使更多的软件项目免受时间延误和费用超支之苦。
作用: 指导软件机构通过确定当前的过程成熟度并识别出对过程改进其关键作用的问题,从而明确过程改进的方向和策略。通过集中开展与过程改进的方向和策略相一致的一组过程改进活动,软件机构便能稳步而有效的改进其软件过程,使其软件过程能力得到循序渐进的提高
成熟度等级是妥善定义的向成熟软件机构前进途中的平台,每个成熟度等级都为软件过程的继续改进提供了一个台阶。
5个层次
第一级: 初始级
软件过程的特征是无序的,甚至混乱。 没有什么过程是经过定义的
没有健全的软件工程管理制度,具有不可预测性。软件过程是不稳定的,产品质量只能根据相关人员的个人工作能力而不是软件机构的过程能力来预测。
第二级: 可重复级
软件机构建立了基本的项目管理过程(过程模型),可跟踪成本,进度,功能和质量。已经建立起必要的过程规范,对新项目的策划和管理过程是基于以前类似项目的实践经验,使得有类似应用经验的软件项目能够再次取得成功。
使项目管理过程稳定,使软件机构能够重复以前在成功项目中所进行过的软件项目工程实践。
软件项目的策划和跟踪是稳定的已经为一个有纪律的管理过程提供了可重复以前成功实践的项目环境。软件项目工程活动处于项目管理体系的有效控制下,执行着基于以前项目的准则且合乎现实的计划。
建立了基本的软件管理控制制度,可对现行项目提出约束条件。
软件需求条理化,完整性受控制。
第三级: 已定义级
软件机构已经定义了完整的软件过程(过程模型),软件过程已经文档化和标准化。所有项目组都是用文档化的经过批准的过程来开发和维护软件,包含了第二级的全部特征。
无论管理活动和工程活动都是稳定的。软件开发的成本,进度以及产品的功能和质量都受到控制,软件产品的质量具有可追溯性。这种能力是基于在软件机构中对以定义的过程模型的活动,人员和职责都有共同的理解。
第四级: 已管理级
软件机构对软件过程和软件产品都建立了定量的质量目标,所有项目的重要过程活动都是可度量的。
定量的控制软件过程和软件产品,为评定项目的过程质量和产品质量奠定了基础
软件过程是可度量的,软件过程在可度量的范围内运行,这一级的过程能力允许软件机构在定量的范围内预测过程和产品质量趋势,在发生偏离时可以及时采取措施予以纠正,并且可以预期软件产品是高质量的。
第五级: 优化级
软件机构集中精力持续不断的改进软件过程,防止出现缺陷为目标的软件机构,有能力识别软件过程要素的薄弱环节,并有足够手段改进他们。
软件过程是可优化的,这一级软件机构能够持续不断的改进其过程能力,既对现行的过程实例不断地改进和优化,又借助于所采用的新技术和新方法来实现未来的过程改进。
过程包含
获取 供应 开发 操作 维护 管理 支持
软件产品的特点
是一种逻辑实体,具有高度复杂性和抽象性
软件过程有别于一般物质的制造过程。一旦研制开发成功,就可大量拷贝同一内容的副本
软件没有磨损老化的问题,其生命周期曲线不符合所谓的浴缸曲线
对硬件和环境的依赖性,导致软件移植问题
尚未完全摆脱手工作坊式的开发方式,生产效率低下
软件成本相当昂贵
软件工作牵扯到很多社会因素。涉及机构,体质和管理方式,人们的观念和心理。
软件危机
计算机软件的开发和维护过程中所遇到的一系列严重问题
开发困难,满足不了增长且复杂的需求
如何维护数量不断膨胀的软件产品
软件工程的原则
质量原则
管理原则
PDCA plan do check action
工程原则
软件生命周期
软件定义阶段
问题定义
可信性研究
需求分析
软件开发阶段
总体设计
详细设计
编码和单元测试
综合测试
运行阶段
软件维护
软件过程模型
为了理解事务而对事务做出的一种抽象,忽略不必要的细节 是事物的一种抽象形式 一个规划 一个程式
瀑布模型
特点
阶段间具有顺序性和依赖性
推迟实现的观点
质量保证的观点
优点
开发过程基本上是线性顺序的 便于管理
基于明确 完备的需求 可以更好的开发效果
文档驱动 适应需求比较明确和稳定的项目
僵化的瀑布模型
某些类型的系统需求是模糊的
项目参与者之间存在通信鸿沟
预先定义的需求可能是过时的
没为变更做准备
喷泉模型
特点
迭代
重复
演进
无间隙
各阶段间无明显界限
面向对象建立模型
5各层次
主题层
相当于高层的模块或子系统
类与对象层
对问题概念的抽象,可以从用户需求或其他规格说明书中找到
结构层
描述类之间的整体与部分 一般与特殊的关系
属性层
类所保存的信息 给出各类之间的实例连接
服务层
类可提供的操作,根据需要的功能给出各个操作之间的消息连接
三要素(三视点)
静态结构
对象模型WHO最关键
描述系统的静态结构,包括构成系统的类和对象 它们的属性和操作 以及他们之间的联系
描述系统的数据结构
交互次序
动态模型WHEN
描述系统的控制逻辑 涉及系统中各个类和对象的时序及变化情况
描述系统的控制结构
状态图
三要素
事件
状态
行为
描述对象的个体行为
事件追踪图
给出多个对象所表现出来的集体行为
数据变换
功能模型WHAT
描述系统内部数据的传送与处理,由多个数据流图组成
描述系统的功能
测试
为了发现程序中的错误而执行程序的过程
意义
软件质量保证的重要手段
是否达到需求说明的功能和预期的指标
应用最小的测试代价获得最大的测试效果
为了发现错误 不是证明程序无措
不能证明程序无错
可信度问题
软件测试不同于程序测试 软件测试应贯穿于软件定义域开发的整个期间
静态测试
代码会审
走查
办公桌检查
动态测试
黑盒测试(功能测试 数据驱动测试)
需在所有可能的输入条件和输出条件中确定测试数据
技术
等价类划分
边界值分析
错误猜测发
因果图法
白盒测试(结构测试 逻辑驱动测试)
完全理解程序内部结构和处理过程 适用于规模较小的软件
对程序模块的所有独立的执行路径至少测试一次
对所有逻辑判定 两种情况至少测试一次
再循环的边界和运行界限内执行循环体
测试内部数据的有效性
测试技术 逻辑覆盖
以程序内部的逻辑结构为基础
语句覆盖
每一可执行语句至少执行一次
判定覆盖(分支覆盖)
不仅每条语句执行一次 程序中每个判断真假至少执行一次
条件覆盖
不仅每条语句至少执行一次 每个判断的每个条件的可能值至少执行一次
判定条件覆盖
判断中每个条件的所有可能取值至少执行一次 每个判断的所有可能判定结果至少执行一次
条件组合覆盖
每个判断的所有可能的条件取值组合至少执行一次
路径覆盖
覆盖程序中所有可能路径
嵌套型
连锁型
灰盒测试
适用于web测试
穷举和选择测试
要素:
程序
测试数据
需求定义
a测试
由一个用户在开发环境下进行的测试 公司内部的用户在模拟实际操作环境下的测试
由软件工程师主导 在开发现场执行的
B测试
由软件的多个用户在实际使用环境下进行的测试
由用户c参与与主导 不在开发现场
子主题
软件:
程序
按照事先设定的功能和性能要求执行的指令序列
数据
使程序能正常操作信息的数据结构
文档
与程序开发和维护有关的各种文献和资料
0 条评论
下一页