前言
软工视频从这个月三号开始建的项目,由于期间穿插着准备final—test,所以进行的没那么迅速,看视频总感觉自己记不住什么东西,一边看一边做笔记整理,把每一集大概讲的是什么都整理下来,关键主要的知识点着重标记,下面是我看视频过程中整理的笔记。
主要内容
第一集
软件:计算机系统中与硬件相互依存的部分,是程序,数据,文档的集合
软件的分类:功能,软件规模,软件服务对象的氛围,使用的频度
功能划分:
1. 系统软件
2. 支撑软件
3. 应用软件
软件发展阶段:
1. 设计50-60年代
2. 系统60-70年代
3. 工程70年代以后
第二集
软件工程过程:
软件规格说明、开发,确认
软件生存期:软件从开发使用到有新的软件替换它使用的整个周期
指定计划:
1. 确定目标
2. 给出要求
3. 完成该软件任务的可行性研究
第三集
喷泉模型:
1. 演化
2. 维护
3. 确认
4. 实现
5. 设计
6. 分析
原型(渐增型),变换型
系统开发生命周期:
三个主要阶段:
1. 分析
2. 设计
3. 实现
软件工程的定义:开发,运行,维护和修复软件的系统方法。
软件工程三要素:方法,工具,过程
第四集
软件危机:开发和维护过程中遇到的一系列严重问题
软件工程的原则:
1. 分解
2. 独立性
3. 一致性
4. 确定性
软件生存期:计划,开发,维护三个阶段
问题定义:为软件需求分析功能与性能的依据
可行性研究
1. 经济
2. 技术
3. 操作
4. 法律
5. 时间
第五集
软件计划内容:
1. 软件范围
2. 环境资源
3. 软件成本
软件价格估计:参数化算法:c=f(Vi)
代码行(LOC)价格估算技术
任务分解方法
成本/收益分析
效益分析目的:从经济学角度分析开发一个新系统是否划算,从而帮助领导决策是否开发一个系统。
货币的时间价值:用利率表示
纯收入:指整个生存周期之内的累计经济效益与投资之差。
投资回收期:累计的经济效益等于最初投资所需要的时间
投资回收率:用来衡量投资效益的大小。
成本估计方法:自顶向下估计,自底向上估计,算法模型估计三类。
第六集
软件需求分析的任务:
1. 描述软件功能和性能
2. 软件设计的约束和软件同其他系统元素的接口细节
3. 定义软件的其他有效性需求
需求分析的任务:借助于当前系统的逻辑模型导出目标系统的逻辑模型,解决目标系统的“做什么”的问题。
常用分析方法:
1. 面向数据流的结构化方法
2. 面向数据结构的Jackson方法
3. 结构化数据系统开发方法
4. 面向对象的分析方法
第七集
数据流图:
1. 数据加工
2. 数据源或终点
3. 数据流
4. 数据存储文件
第十集
需求分析方法共性:
1·支持数据域分析的机制
2·功能表示的方法
3·接口的定义
4·问题分解的机制以及对抽象的支持
5·逻辑视图和物理视图
6·系统抽象模型
数据域三种属性:数据流,数据内容和数据结构
需求分析评审的方法:
一致性,完整性,现实性和有效性
软件设计任务:
1·概要设计
2·详细设计
软件结构:程序的模块结构(树状结构,网状结构)和数据的结构
第十一集
开发一个CAD软件时的三种抽象层次
抽象层次1:用问题所处环境的术语来描述这个软件。
抽象层次2:任务需求的描述。
抽象层次3:程序过程表示。
模块三个属性:
1·功能
2·逻辑
3·状态
第十二集
耦合:模块与模块之间的联系
控制耦合:如果一个模块通过传送开关,标志,名字等控制信息,明显的控制选择另一没看的功能,就是控制耦合。
内容耦合:调用模块有多个入口;一块模块直接调用另一个模块中的类型;俩个模块的代码有重叠部分;接口方式直接引用。
数据耦合:数据项作为一个参数
内聚:同一个模块内,语句之间的联系
第十三集
变换分析方法由四步组成:
1、重画数据流图
2、区分有效输入,有效输出,和中心变换部分
3、进行一级分解,设计上层模块
4、进行二级分解,设计输入,输出和中心变换部分的中,下层模块。
一个完整的模块应当有以下几部分:
1、 执行规定的功能部分
2、 出错处理的部分
3、 给他的调用者返回一个结束状态标志
消除重复功能,改善软件结构:
1、 完全相似
2、 部分相似
尽可能的减少高扇出结构,随着深度增大扇入
第十四集
应限制使用三种病态联结
1、 直接病态联结
2、 公共数据域病态联结
3、 通信模块联结
过程设计阶段,表达过程规格说明的工具有三类:
1、 图形工具
2、 表格工具
3、 语言工具
程序流程图五种基本控制结构:
1、 顺序型
2、 选择型
3、 先判断型循环(do-while)
4、 后判定型循环(do - until)
5、 多情况选择型(case型)
第十五集
第十六集
进程间的通讯方式有三种:
1、 进程同步发生
2、 通过数据通道发送/接收活动发送
3、 访问公用存储信息
第十七集
软件设计:
概要设计和程序编码
程序设计语言分类:
汇编语言:机器语言,第一二代计算机用
高级语言:同一个问题,高级语言编码可比汇编少3-7倍
按照语言的内在特征将高级语言分类:
1、 系统实现语言
2、 静态高级语言
3、 快结构高级语言
4、 动态高级语言
选择语言的原则:
1、 最少工作量原则
2、 最少技巧性原则
3、 最少错误原则
4、 最少维护原则
5、 减少记忆原则
结构化程序设计包括两方面:
1、 编写程序时,强调使用几种基本控制结构
2、 在程序设计过程中,尽量使用自顶向下和逐步细化原则,由粗到细,一步步展开。
第十八集
源程序文档化:
1、 标识符的命名
2、 安排注释
3、 程序的视觉组织
语句结构:
语句构造力求简单,直接,不能为了片面追求效率而使语句复杂化
1、 在一行内只写一条语句
2、 程序编写首先应当考虑清晰性
3、 程序要能直截了当的说明程序员的用意
4、 除非对效率有特殊的要求,程序编写要做到清晰第一效率第二
5、 首先要保证程序正确,然后才要求提高速度
第十九集
6、 让编译程序做简单的优化
7、 尽可能使用库函数
8、 避免不必要的转移。同时如果能保持程序的可读性,则不必使用goto语句
9、 尽量只采用三种基本的控制结构来编写程序
10、 避免使用空的else语句和if then if 语句。
11、 避免采用过于复杂的条件测试
12、 尽量减少使用否定条件的条件语句
13、 尽可能用通俗易懂的伪码来描述程序的流程,然后再翻译成必须使用的语言。
14、 数据结构要有利于程序的简化
15、 要模块化
16、 利用信息隐蔽,确保每一个模块的独立性。
17、 从数据出发去构造程序。
18、 不用修补不好的程序,要重新编写
19、 对太大的程序,要分块编写
第二十集
环路复杂度取决于程序控制结构的复杂度。
运算对象包括变量名和常数。
程序员工作量:E=V/L
第二十一集
软件测试
软件测试的目的和原则
用例设计
策略
种类
程序调试
软件测试的目的:
1、 测试是程序的执行过程,目的在于发现错误
2、 一个好的测试用例在于能发现至今未发现的错误
3、 一个成功的测试是发现了至今未发现的错误的测试
软件测试的原则:
1、 测试用例应由测试输入数据和对应的预期输出结果这两部分组成。
2、 程序员应避免检查自己的程序。
3、 在设计测试用例时,应当包括合理的输入条件和不合理的输入条件
测试过程是依相反顺序安排的自底向上,逐步集成的过程。
第二十二集
条件测试路径选择:
当程序中判定多于一个时,形成的分支结构可以分为两类:
1、 嵌套型分支结构
2、 连锁型分支结构
循环测试路径选择:
循环分为四种不同类型:
1、 简单循环
2、 嵌套循环
3、 连锁循环
4、 非结构循环
黑盒测试的测试用例设计
1、 等价类划分(有效等价类和无效等价类)
2、 边界值分析
3、 错误推测法
4、 因果图
第二十三集
等价类和边界值方法的区别;
1、 边界值不是从等价类中随便取一个数据作为代表,而且选择一个或几个特定值,使这个等价类的每个边界都作为测试的目标
2、 边界值分析不仅要考虑输入条件,而且要考虑输出条件。
软件测试的策略:
四个步骤:
单元测试
组装测试
确认测试
系统测试
第二十四集
软件测试的策略四个步骤:
1、 单元测试:又叫模块测试,是针对软件测试的最小单位——程序模块,进行正确性检验的测试工作。
测试内容:
模块接口
出错处理
独立路径
边界条件
局部数据结构
2、 组装测试:一次性组装方式和增殖性组装方式
3、 确认测试
4、 系统测试
第二十五集
系统测试:
测试种类:
功能测试,可靠性测试,强度测试,性能测试,恢复测试,启动/停止测试,配置测试,可支持性测试,过程测试,互连测试,兼容性测试,容量测试,文档测试
调试:软件调试是在进行了成功测试之后开始的工作。调试的任务是进一步诊断和改正程序中潜在的错误。
调试步骤:
1、 从错误的外部表现形式入手,确定程序中出错位置
2、 研究有关部分的程序,找出错误的内在原因。
3、 修改设计和代码,以排除这个错误
4、 重复进行暴露了这个错误的原始测试和某些有关测试。
几种主要的调试方法:
强行排错
回溯法排错:分析错误出现的征兆,确定最先出现错误的位置
归纳法调试:基本思想:从一些错误征兆着手,分析他们之间的关系找出错误
演绎法调试:从一般原理或前提出发,经过排除和精化的过程来推导出结论的思考方法。
调试原则:
确定错误的性质和位置的原则(用头脑去分析思考与错误征兆有关的信息,避开死胡同)
修改错误的原则:
1、 张出现错误的地方,很可能还有别的错误
2、 当心修改一个错误的同时可能会引入新的错误。
修改之后要写测试分析报告
第二十六集
软件测试概念:
1、 软件测试
2、 程序测试
3、 软件确认和程序确认
软件维护:
维护的类型:
1、 改正性维护
2、 适应性维护
3、 完善性维护
第二十七集
面向对象技术
面向对象=对象+类+继承+通信
对象:是面向对象开发模式的基本成分
每个对象可用他本身的一组属性和他可以执行的一组操作来定义。
属性:一般只能通过执行对象的操作来改变
操作:又叫方法或服务。他描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。
消息:对象与对象之间的联系。是一个对象与另一个对象的通信单元。
类:一组具有相同数据结构和相同操作的对象的集合。
继承:是使用已存在的定义作为基础建立新定义的技术。
新类:既存类所声明的数据和新类所增加的声明的组合。
第二十八集
论域分析
应用分析:根据特定应用的需求进行论域分析。
类的实现:通过变量的声明,操作界面的实现及支持界面操作的函数的实现,可实现一个类的预期行为和状态。
类的测试:在最抽象的层次开始,沿继承关系继续向下进行。
对象模型化技术OMT:把分析时收集的信息构造在三类模型中,即对象模型,功能模型和动态模型
对象模型:作用是描述系统的静态结构
聚合:代表整体和部分的关系
限定:用以对关联的含义做某种约束
角色:用来说明关联的一端。
动态模型:着重于系统的控制逻辑。
他包括两个图:
状态图:是一个状态和事件的网络,侧重于描述每一类对象的动态行为。
事件追踪图:侧重于说明发生于系统执行过程中的一个特定“场景”
场景也叫脚本,是完成系统某个功能的一个事件序列。
事件:每个事件都是单独发生的。事件从一个对象向另一个对象传递信息。
第二十九集
Coad和yourdon面向对象分析:
(面向对象分析)OOA的俩个任务;
1、 形式地说明我们所面对的应用问题,最终成为软件系统基本构成的对象,还有系统所必须遵从的,由应用环境所决定的规则和约束。
2、 明确的规定构成系统的对象如果协同合作,完成指定的功能。
构造OOA概念模型的层次由五个层次组成:
1、 类与对象
2、 属性,
3、 服务
4、 结构
5、 主题
第三十集
定义服务的方法和策略:
1、 找出每一个对象的所以状态,在各种状态需要做的工作。利用状态迁移图
2、 找出必要的操作
3、 建立消息连接
4、 描述服务:利用状态转换图,脚本,和事件追踪图,描述服务的功能。
高层设计原则:
1、 使子系统的各个高层部件之间的通信量达到最小
2、 子系统应当把那些成组的类打包,形成高度的内聚
3、 逻辑功能分组,提供一个一个单元,识别并定位问题事件。
用户分类:
1、 按技能层次分类
2、 按组织层次分类
3、 按技能分类
第三十一集
面向对象分析(OOA)
定义服务的方法和策略:
1、 找出每一个对象的所有状态,在各种状态需要做的工作。利用状态迁移图
2、 找出必要的操作
3、 建立消息连接
4、 描述服务:利用状态转换图,脚本和事件追踪图,描述服务的功能。
面向对象设计(OOD)
主要工作分为俩个阶段:
1、 高层设计
2、 类设计
高层设计的特点:
1、 高层设计可以表征为标识和定义模块的过程
2、 模块可以是一个单个的类,也可以是由一些类组合成的子系统
3、 定义过程是职责驱动的
第三十二集
设计命令层:
1、 研究现行的人机交互活动的内容和准则
2、 建立一个初始的命令层
3、 细化命令层
用户界面设计的原则:
1、 一致性
2、 操作步骤少
3、 不要“哑播放”
任务管理部分的设计:
1、 任务,是进程的别称,是执行一系列活动的一段程序
2、 主要包括任务的选择和调整
数据管理方法:
1、 文件管理
2、 关系数据库管理
3、 面向对象库数据管理
测试:
1、 基于定义的测试:把类当做一个黑盒对待,确认类的实现是否遵照他的定义。
2、 基于程序的测试:考虑类的实现,确定代码编写的是否正确。
类测试:
类:作为在语法上独立的部件,应当允许用在不同的应用中。
类应尽可能孤立的进行测试。
组装测试,总体组装。
事务分离的原则:将基本需求和实现区别开。
第三十三集
用户界面应具备的特性:
1、 可使用性
2、 灵活性
3、 复杂性和可靠性
用户界面设计的任务分析:
1、 用户特性分析
2、 用户工作分析
3、 记录有关系统的概念和术语
4、 确定界面类型
用户类型:
1、 外行型
2、 初学型
3、 熟练型
4、 专家型
用户模型和观点:
1、 理论认知模型:目的是要了解人的思维过程。
2、 用户知识模型:描述了一定范畴内的知识以及类型之间的联系。
3、 用户特性模型:依据在用户特性分析所描述的技能和能力对用户进行分类。
4、 用户任务模型:根据用户要求中提出的任务的功能和操作次序,构想该任务的概念。
5、 用户观点:指系统结构的用户模型。是用户描述和设想现行系统结构的方法。
任务模型:动态和静态。
第三十四集
工作设计的目的:使任务需求和操作员的能力相匹配。
简单的正文菜单的设置与选取方式:
1、 首字符匹配方式
2、 序号匹配方式:
3、 亮条匹配方式
固定位置菜单:
1、0层——主菜单:定位于屏幕中心或占领整个屏幕,菜单项的内容是所属各个子系统的名称。
2、1层——子系统层:这一层菜单在水平方向排成一行,安放于屏幕的上沿或下沿
3、2层:当用户挑选了某一个操作类时,屏幕上将按垂直方向显示这组操作类的名称
第三十五集
第三十六集
报告有三种局部设计:
1. 列表适用于记录信息的简单罗列,档案报告属于这一类
2. 块结构是用行,列和总计等形式来组织分类,信息报告属于这一类
3. 分组结构则在块内进一步做更复杂的信息布局,文宗报告属于这一类
直接操纵界面的基本特性:
1. 明确的动作
2. 即时的反馈
3. 增量效应
4. 直观的交互作用
5. 剥皮市的学习
6. 可逆的动作
7. 事先验证
第三十七集
软件质量的特性:
软件质量特性度量有两类:
1. 预测型:利用定量和定性的方法,估算软件质量的评价值,以得到软件质量的比较精确的估算值
2. 验收型:在软件开发各阶段的检查点,对软件的要求质量进行确认性检查的具体评价值,他是对开发过程中的预测进行评价。
预测度量有两种:
第一种叫尺度度量,是一种定量度量
第二种叫做二元度量,是一种定性度量
质量保证是面向消费者的活动。
第三十八集
软件质量保证的实施从两方面开展:纵向和横向
1、 要求所有与软件生存期有关的人员都要参加
2、 要求对产品形成的全过程进行质量管理
软件质量度量和保证的条件;
1、 适应性
2、 易学性
3、 可靠性
4、 针对性
5、 客观性
6、 质量经济性
第三十九集
第四十集
测试覆盖率Cv:
配置管理:
协调软件开发使得混乱减到最小的技术叫做配置管理。
SCM活动的目标:
1. 标识变更
2. 控制变更
3. 确保变更正确的实现
4. 向其他有关的人报告变更
基线:是软件生存期中各开发末尾的特定点,又称里程碑。
软件配置管理的任务:
1. 标识单个的SCI
2. 标识和管理软件各种版本
3. 控制变更
4. 审查软件配置
5. 报告所有加在配置上的变更。
第四十一集
版本控制是SCM的基础,它管理并保护开发者的软件资源。
版本管理的主要任务:
1、 集中管理档案,安全授权机制:
版本管理的操作将开发组的档案集中的存放在服务器上,经系统管理员授权给各个用户。
用户通过登入和检出的方式访问服务器上的 文件,未经授权的用户无法访问服务器上的文件。
配置审计:软件的完整性,是指开发后期的软件产品能够正确的反映用户要求。
审查的两种方法:
2、 正式技术评审
3、 软件配置审计
软件能力成熟度模型CMM:
一、 提出
美国卡耐基梅隆大学软件工程研究所在1987年提出软件过程。
二、 CMM的发展
三、 CMM特征:
基于实际实践
最好的反映了实践的情况
反映了软件过程改进和软件过程评估执行人员的需求
形成文档
文档可以公开使用
四、 什么是CMM
软件开发机构用于定义,实施,测量,控制和改进其软件过程的一种阶段性描述,该模型使得对现有过程能力的确定,以及对软件质量和过程改进的重要问题的识别变得方便,从而为选择过程改进策略提供指南。
提高软件开发哪里的 手段:
是软件过程改进的指南,是适应软件生产过程的一个标准。
以具体实践为基础
在原有软件过程基础上提出的,描述了软件过程中的关键元素
CMM主要用途:
1、 用于软件过程的评价
2、 用于软件过程的改进
3、 用于软件能力的评价
第四十二集
IDEAL方法(软件改进方法):
起始阶段:发起并确定软件过程改进基础设施
诊断阶段:实施评估,确定机构的软件过程成熟度基线,向机构提出改进建议
建立阶段:建立起软件过程改进基础设施,包括成立过程协同小组,定义软件过程,改进策略和目标
行动阶段:实施过程改进
推进阶段:分析软件过程改进中的经验教训,进一步更新软件过程改进的过程,重新发起,建立起下一个改进周期的新目标
过程:针对确定的目的所实施的序列步骤
即:为实现系统的目标所执行一系列操作步骤
软件过程:有关开发和维护软件及其相关产品的活动,方法,实践,和变换的集合
即:软件从开发到维护的一系列产品
软件过程管理:有效的管理,人,方法,工具的集成
软件过程能力:遵循某过程可能达到的预期结果的范围
软件过程性能:对实际结果的度量
软件过程成熟度:
一个特定的软件过程被清晰的定义,管理,测量,控制以及有效使用的程度。
第四十三集
共同特性:
共同特性是一些属性,指明一个关键过程域的执行和制度化是否有效,可重复和可持续。
执行约定:描述项目或机构完整的实现软件过程而必须采取的一些措施
执行能力:描述项目或机构完整的实现软件过程所必须有的先决条件
执行活动:描述了执行一个关键过程域所必须的活动,任务和规程
测量和分析:描述了为确定与过程有关的状态所需的基本测量实践
验证时间:描述了为确保执行的活动与已建立的过程一致所采取的步骤
机构结构和任务:
机构任务:责任人,上级负责人,项目负责人,一线软件负责人,软件任务主管,工作人员,软件工程人员和成员
软件工程管理
软件工程分两部分:
软件开发技术
软件工程管理
软件项目的任务:
研究:该项目的主要性能,功能和系统界面
估算:经费,进度和资源
软件项目计划内容:
1、范围:
项目目标
主要功能
性能限制
系统界面
特殊要求
3、 资源:
人力资源
硬件资源
软件资源
其他