导图社区 软件工程基础知识
软件工程是一门研究用工程化方法构建和维护有效、实用和高质量的软件的学科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计件有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,也提高了工作效率和生活效率 。
编辑于2022-09-03 12:01:56 浙江省软件工程基础知识
软件工程概述
软件工程基本原理
用分阶段的生命周期严格管理,坚持进行阶段评审,实现严格的产品控制,实现现代化程序设计技术,结果应能清楚的审查,开发小组的人员应少而精,承认不断改进软件工程的必要性
软件工程的基本要素
方法
工具
过程
软件生存周期
可行性分析和项目开发计划
需求分析
概要设计
选择系统解决方案,规划子系统
系统架构,模块划分,系统接口,数据设计
详细设计
设计子系统内部具体实现
编码
测试
维护
软件需求
功能需求
所开发的软件必须具备怎样的功能
非功能需求
产品必须具备的属性和品质
如可靠性,性能,响应时间和扩展性
设计约束
通常对解决方案的一些约束说明
软件过程
能力成熟度模型CMM
对软件组织化阶段的描述,随着软件组织定义,实施,测量,控制和改进其软件过程,软件组织能力经过这些阶段逐步提高
初始级
软件过程的特点是杂乱无章,有时共至很混乱,几乎没有明确定义的步骤,项目的成功完全依赖个人的努力和英雄式核心人物的作用。
可重复级
建立了基本的项目管理过程和实践米跟踪项目费用、进度和功能特性,有必要的过程准则来重复以前在同类项目中的成功。
已定义级
管理和工程两方面的软件过程己经文档化、标准化,并综合成整个软件开发组织的标准软件过程。所有项目都采用根据实际情况修改后得到的标准软件过程来开发和维护软件,
已管理级
制定了软件过程和产品质量的详细度量标准。软件过程的产品质量都被开发组织的成员所
优化级
加强了定量分析,通过来自过程质量反馈和来自新观念、新技术的反馈使过程能不断持续地改进。
能力成熟度模型CMMI
将已有的几个CMM模型结合一起,使之构造成为集成模型,支持多个工程学科和领域,系统的,一致的过程改进框架,使适应现代工程的特点和需要,能提高过程的质量和工作效率
两种方法
阶段式模型
只关心组织成熟度
初始级
过程不可预测且缺乏控制
已管理级
过程为项目服务
已定义级
过程为组织服务
定量管理级
过程已度量和控制
优化级
集中过程改进
连续式模型
关注每个过程域的能力,一个组织能不同的过程域可以达到不同的过程域能力等级
统一过程模型UP
是一种开发过程,UP的每一次迭代都是一次完整性的软件开发过程,包括整个开发生命周期,有五个核心工作流
需求
分析
设计
实现
测试
三大特点
用例和风险驱动
以架构为中心
迭代并且增量
开发的四个阶段
起始
项目的初始活动,如确认需求和风险评估
精华
需求分析和架构设计
构建
系统的构建,产生实现模型
移交
软件提交方面的工作,产生软件增量进行B测试,交付系统
软件过程模型(软件开发模型)
软件开发的全部过程,活动,和任务的结构框架
瀑布模型(SDLC)
结构化方法中的模型,是结构化的开发,只适用于需求明确或者二次开发(需求稳定),当需求不明确时,最终开发的项目会错误,有很很大缺陷,交付速度较快
V模型
瀑布模型的变体,特点是增加了很多测试,并且这些测试贯穿于软件开发的各个阶段,不像其他模型都是软件开发完再测试,很大程度上保证了项目的准确性
演化模型/快速原型开发
与瀑布模型相反,原型针对的解决,需求不明确的情况首先快速功能模型演示给用户看,并按用户要求及时修改,中间通过不断演示和用户沟通,最终设计出项目,就不会出现与用户要求不符合的情况,采用的是迭代的思想不适用大规模的软件开发
螺旋模型
是多种模型的混合,针对需求不明确的项目,与原型类似,但增加风险分析
四步
指定计划-风险分析-实施工程-用户评估
增量模型
首先开发核心功能,而后与用户确认,之后再开发次核心模块功能,即每次开发一小部分功能,并与用户需求确认,最终完成项目开发,优先级最高的服务最先交付
特点
由于不是从系统整体角度规划模块,因此不利于模块的划分,难点在与如何将客户需求划分为多个增量,与原型不用的是增量模型的每一次增量版本都可作为独立操作的作品,而原型构造是为了演示
喷泉模型
以用户需求为动力,以对象为驱动的模型适合面向对象开发方法,使开发过程具有迭代性和无间隙性
基于构件开发模型CBSD
利于预先包装的构件来构造应用系统,构件可以使组织内部开发的构件,也可以是商品化成品软件构件
特点
增强复用性,提高可靠性,节省时间成本
形式化方法模型
建立在严格数学基础上的一种软件开发方法
软件开发方法
结构化方法
面向对象数据流,自顶向下,逐层分解,逐步在被面向对象开发方法替代,数据处理不太复杂的产品
结构化方法的设计
体系结构设计是宏观架构设计
数据设计是数据流的设计
接口设计关注模块间的连接设计
过程设计
模块内的具体实现过程的数据结构和算法的设计
Jackson方法
面向数据结构的方法,适合小规模的项目
原型方法
使用需求不明确的开发方法,以原型模型为代表
面向对象方法
强调复用性,构件全面合理的模型,提供不同项目项目,方便修改,节省开发时间和效率
敏捷开发
针对中小型项目,主要是为程序员减负,去掉不必要的会议和文档
方法
开发宣言
个体和交互胜过过程和工具
可以工作的软件胜过面面俱到的文档
客户合作胜过合同谈判
响应变化胜过遵循计划
结对编程
一个程序员开发,另一个程序员在一旁观察审查代码,能够有效的提高代码质量,在开发同事对代码进行初步审查,共同对代码负责。
自适应开发
强调开发方法的适应性,不像其他方法那样有很多具体的实践做法,他更侧重软件的重要性提供最根本的基础,并从更高的组织和管理层次来阐述开发方法为什么必须具备适应性
水晶方法
每一个不同项目都需要一套不同的策略,约定和方法论
特性驱动开发
是一套针对中小型软件开发项目的开发模式,是一个接收模型驱动的快速开发过程,他强调的是简化,使用,易于北开发团队接收,适用于需求经常变动的项目
极限编程XP
核心是沟通,简明,反馈和勇气,因为知道计划永远赶不上变化,XP无需开发人员在软件初期做出很多的文档,XP提倡测试先行,为了将以后出现bug几率降到最低
并列争球法SCRUM
是一种迭代的增量化过程,把每段时间(30天)一次的跌代称为一个冲刺,并按需求的优先级别来实现产品,多个自组织的自治小组并行地递增实现产品
软件工具
软件开发工具
对于软件开发过程中的各种活动
包括需求分析,设计工具,编码与排错工具,测试工具
软件维护工具
辅助软件维护过程中活动的软件,辅助维护人员对软件代码及文档进行各种维护活动
包括版本控制工具,文档分析工具,开发信息库工具,逆向工程工具,再工程工具
软件管理和软件支持工具
辅助管理人员和软件支持人员的管理活动和支持活动,以确保软件高质量的完成
包括软件管理工具,软件配置工具,软件评价工具
软件开发环境
指支持软件产品开发的软件系统,由软件工具集和环境集成机制构成
工具集用于支持软件开发的相关过程,活动和任务,
环境集成机制为工具集成和软件开发,维护和管理提供统一的支持
软件项目管理
有效的项目管理集重在4P上
人员
产品
过程
项目
软件估算方法
成本估算方法
自顶向下估算/类比估算方法
确定一个总金额,在向下分摊到每一个功能点
自底向上估算
从底层功能点开始估算成本,向上累加
差别估算法
与以往项目比较,找出不同点进行重新估算,相同点则直接估算
专家估算
聘请专家以其经验对项目整体费用进行估算
COCOMO模型
常见的软件规模估算方法,常用的代码行分析方法作为其中一种度量估计单位,以代码行数估算每个程序员工作量,累加得软件成本
按照详细程序分
基本COCOMO模型
是一个静态单边量模型,他用一个已估算出来的源代码行数(LOC)为自变量的经验函数计算软件开发工作量
中间COCOMO模型
在基本COCOMO模型的基础上,再涉及产品,软件,人员,项目等方面的影响因素调整工作量的估算
详细COCOMO模型
包括中间COCOMO模型的所有特性,但更近一步考虑了软件工程中的每一个步骤(如分析、设计)影响
Putnam估算模型
一种动态多变量模型,假设在软件开发的整个生命周期中工作量有特点分。
COCOMO2模型
COCOMO的升级,也是以软件规模作为成本的主要因素,考虑多个成本驱动因子,估算选择有,对象点、功能点、代码行
分为三个阶段
应用组装模型
软件工程前期阶段使用
早期设计阶段模型
需求已经稳定,并且基本的软件体系结构已经建立时使用
体系结构阶段模型
软件的构造过程中使用
软件项目组织
组织结构模式
项目型
项目经理绝对领导
职能型
部门领导为主
矩阵型
二者结合,既有项目经理也有部门领导,但权利分割不同
程序设计小组的组织方式
主程序员制小组
主程序全权负责,后援工程师必要时能替代主程序员适合大规模项目
沟通路径N-1
民主制小组/无主程序组
无主程序员小组,成员地位平等,任何决策都是全员参与投票,适合于项目规模小,开发人员少,采用新技术和确定小的项目
沟通渠道=N(N-1)/2
层次式小组
一名组长领导若干个高级程序员,每个高级程序员领导若干个程序员
风险管理
软件分析两个特性
不确定性
可能发生也可能不发生
损失
发生会产生恶性后果
技术分析威胁
威胁到开发软件的质量和交付的时间
项目分析威胁
项目计划,如果项目分析发生,可能拖项目进度,和增加项目成本
商业风险威胁
威胁到开发软件的生存能力
市场风险
开发的软件没人用
策略风险
开发产品不符合公司销售策略
销售风险
销售部门不知道如何销售
管理风险
人员变动没高层管理层的支持
预算风险
没有得到预算和人员保证
风险管理过程
风险识别
识别可预测的分析,确定风险的来源产生条件等产生一个列表
风险预测/风险估计
从两方面预测分析,风险可能产生的概率和风险发生产生的后果
风险评估
评估风险损失
风险控制
辅助项目组建立处理风险的策略
风险避免
最好
风险控制
RMMM计划
风险缓解
监控
管理计划
利用风险优先级来确定风险控制策略
优先级级由风险暴露确定
风险暴露=风险影响X风险概率
风险影响
当风险发生时造成的损失
风险概率
风险发生的可能性
风险管理
风险管理的一个重要活动
进度管理
基本原则
划分,相互依赖,时间分配。工作量确认,明确输出结果,确定里程碑
Gantt图(横道图)
横轴表时间,纵轴表活动,以时间顺序表示活动,能反映活动间的并行关系,但无法反映活动之间的依赖关系,因此也难以清晰的确定关键任务和关键路径
PERT图(前驱图)
有向图,反映活动之间的依赖关系,有向边上标注活动运行时间但无法反映活动之间的并行关系
图的关键时间
最早开始时间ES
取所有前驱活动最早完成时间EF的最大值
最早完成时间EF
最早开始时间ES+活动本事的时间DU
关键路径(项目总工期)
项目中耗时最长的一条线路
最晚完成LF
取后续活动最晚开始时间的最小值
最晚开始时间LS
最晚完成LF-活动本身时间DU
松弛时间
某活动的最晚开始时间-最早开始时间(或最晚完成时间-最早完成时间——也即该活动最多可以晚开始多少天
软件质量管理
ISO/IEC9126软件质量模型
功能性
与一组功能及其指定的性质有关的一组属性,功能是指满足规定或隐含需求的那些功能
适合性
与对规定任务能否提供一组功能以及这组功能是否适合有关的软件
准确性
与能够得到正确或相符的结果或效果有关的软件属性
互用性
与其他指定系统进行交互操作能力相关的软件属性
依法性
使软件服从有关标准,约定,法规及类似规定的软件属性
安全性
与避免对程序和数据的非法授权或意外访问的能力有关的软件属性
可靠性
与在规定的一段时间内和规定的条件下软件维持在其性能水平有关额度能力
成熟性
由软件故障引起失效的频度有关的软件属性
容错性
与在软件错误或违反指定接口的情况下维持指定性能水平的能力有关的属性软件
已恢复性
在故障发生后,重新建立其性能水平并恢复直接受影响数据的能力,以及未达到此目的所需的时间与努力有关的软件属性
易使用性
使用所需的努力和由一组规定或隐含的用户对这样使用所做的个别评价有关的一组属性
易理解性
与用户为理解逻辑概念及其应用所付出的劳动有关的软件属性
易学性
用户为学习其应用所付出的努力
易操作性
用户为操作所付出的努力
效率
在规定时间下,软件的性能水平与所用资源之间的关系有关的软件属性
时间特性
与响应和处理时间以及软件执行其功能的吞吐量有关的软件属性
资源特性
与资源执行其功能时,所使用的资源量及使用资源的持续时间有关的软件属性
可维护性
进行规定修改所需要的努力有关的一组属性
易分析性
为诊断缺陷或失效的原因,或为判定待修改部分所需努力有关的软件属性
易改变性
与进行修改,排错或适应环境变换所需努力有关软件属性
易测试性
与确定经修改软件所需努力有关的软件属性
稳定性
与修改造成未预料效果的风险有关的软件属性
可移植性
适应性
如软件不同环境时的处理或手段有关的软件属性
易安装性
与在指定环境下安装软件所需努力有关的软件属性
一致性
是软件服从可移植性有关的标准或约定的软件属性
易替换性
与一软件在该软件环境中用来替代指定的其他软件
软件从某一环境转移到另一环境的能力
McCall质量模型
产品修正
可维护性
灵活性
可测试性
产品转移
可移植性
复用性
互用性
产品运行
正确性
可靠性
易使用性
效率
完整性
软件质量保证
3个要点
软件必须满足用户需求,与用户需求不一致的软件毫无质量可言
软件应遵循规定的一系列开发标准,不遵循这些准则软件,其质量难以得到保障
软件还应满足某些隐含的需求
可理解性
可维护性
未明确写在用户需求中
7个任务
应用技术方法
把软件质量设计到产品中而非事后保证
正式的技术评审
测试软件
标准的实施
遵循标准
控制变更
度量
收集软件度量
记录保存和报告
将质量理解为用户满意程度,是用户满意有两个必要条件
设计质量
设计的规格说明符合用户标准
程序质量
设计按照设计规格说明书所规定的情况正确执行
软件容错技术
容错就是软件遇到的处理能力,实现容错的的手段主要好似冗余
结构冗余
静态
通过表决和比较,少数服从多数
动态
多重模块待机备份,故障时切换备份机
混合冗余
二者综合
时间冗余
遇到错误时重复执行
例如回滚重复执行还有错,则转入错误处理逻辑
信息冗余
为检错和纠错在数据上加上一段额外的信息
校验码原理
冗余附加技术
指为实现结构,信息和时间冗余技术所需的资源和技术,包括程序,指令数据,存放,和调动他们的空间和通道
屏蔽硬件错误的容错技术
关键数据和数据的冗余和调用,
检测,表决,切换,重构和复算的实现
屏蔽软件错误的容错技术
冗余备份程序的存储及调用
实现错误检测和错误恢复的程序
实现容错软件所需的固化程序
软件配置管理
基线
软件开发过程中特点的点,是项目生存期各开发阶段末尾的特定点,又称为里程碑,反应阶段性成果
软件配置项
是软件工程产生的信息项,是配置管理的基本单位
软件开发过程中所有文档代码,工具都可作为配置项
环境类
系统开发环境
定义类
需求分析与系统定义阶段
设计类
设计阶段
编程类
编程及单元测试阶段
测试类
系统测试完成后的工作
维护类
维护阶段
版本控制
既软件配置项的版本控制
配置项三个状态
草稿
正式
修改
版本号的命名规则
处于草稿状态的配置项的版本号格式
0.YZ,其中YZ数字范围为01~99.。随着草稿的不断完善,YZ的取值应递增,YZ的初值和增幅由开发者自己把握
处于正式发布状态的配置项版本号格式
X.Y。其中X为主版本号,取值范围为1~9,Y为次版本号,取值1~9,配置项第一次正式发布时,版本号1.0
变更控制
软件开发控制每一次修改都要纳入变更,以防版本混乱,需要用到基线和配置数据库的概念
开发库
专供开发人员使用,其中的信息可能频繁修改,对其控制相当宽松
受控库
与生存期某一阶段工作结束发布的阶段产品,这些是于软件开发工作相关的计算机可读信息和人工可读信息,软件配置管理正是对受控库中的各个软件进行管理,受控库也称软件配置库
产品库
在开发软件产品完成系统测试后,作为最终产品存入产品库,等待交付用户或现场安装
配置支持
过程支持
团队支持
变化报告
审计支持
软件度量
软件两种属性
外部属性指面向管理者和用户的属性,可直接策略,一般为性能指标
内部属性指软件产品本身的属性,如可靠性,只能间接策测量
McCabe度量法/环路复杂度
假设有向图有向边为m,节点树为n,则次有向图的环路复杂度m-n+2