特别提醒:此篇文章仅针对砂砖的软工考试!
再特别提醒!!!考试中的题目来自老师上课讲的,并无出入。
如果考试内容不符
,哥们也不知道说啥了。
写在前面:完整pdf版见Github
Github-Trae1ounG
示例:
如果对你有用麻烦点赞收藏加关注,并给我的仓库点一个Star!
谢谢!
Github-Trae1ounG
软工考题:
阅读题5分 1-3章
阅读题5分 4-6章
阅读5分 7-9章
编程20 4-7章
三道简答5分
简答一:软件工程概述
简答二:软件过程
简答三:项目管理(18章)
五道分析题(10分)
分析题一:用例图
分析题二:活动图
分析题三:顺序图
分析题四:类图
分析题五:白盒/黑盒?
概念题:
软件工程概述
软件的概念和特点
软件危机的概念和产生的原因
软件工程的定义、三要素、应用软件工程的原因
-
软件的概念和特点
- 软件=程序+文档+数据
- 程序是按事先设计的功能和性能需求执行的指令序列
- 数据:是程序能正常操作信息的数据结构
- 文档:与程序开发、维护和使用有关的图文材料
-
特征
- 软件是开发的或者是工程化的,并不是制造的
- 软件生产是简单的拷贝
- 软件会多次修改
- 软件开发环境对产品影响较大
- 软件开发时间和工作量难以估计
- 软件的开发进度几乎没有客观衡量标准
- 软件测试非常困难
- 软件不会磨损和老化
- 软件维护易产生新的问题
-
软件危机
:在计算机软件的开发和维护过程中所遇到的一系列严重问题。 -
项目超出预算
v 项目超过计划完成时间
v 软件运行效率很低
v 软件质量差
v 软件通常不符合要求
v 项目难以管理并且代码难以维护
v 软件不能交付
-
产生软件危机的原因
-
客观:软件本身特点
- 逻辑部件
- 规模庞大
-
主观:不正确的开发方法
- 忽视需求分析
- 错误认为:软件开发=程序编写
- 轻视软件维护
-
客观:软件本身特点
-
软件工程是一门指导计算机软件开发和维护的工程学科。软件工程是一门交叉性学科
。 -
应用软件工程的原因:
- 软件工程概念的提出:其目的是倡导以工程的原理、原则和方法进行软件开发,以解决软件危机
-
软件工程可定义为三元组: <目标,原则,活动>
(1)给出了软件所涉及软件工程的工程要素
(2)给出了各要素之间的关系
(3)给出了软件工程学科所研究的主要内容
-
软件工程目标
目标:
生产具有正确性、可用性以及开销合宜的产品。
-正确性:
• 意指软件产品达到预期功能的程度。
-可用性:
• 意指软件基本结构、实现及文档为用户可用的程度。
-开销合宜:
• 指软件开发、运行的整个开销满足用户要求的程度
-
软件工程的活动
活动:-生产一个最终满足需求且达到工程目标的软件产品所需要的步骤。主要包括
需求、设计、实现、确认和支持
等活动
(a)需求:
定义问题,即建立系统模型
(b)设计:
-在需求分析的基础上,给出系统的软件设计方案。
-设计包括总体设计(也称为概要设计)和详细设计:
-
总体设计建立整个软件体系结构
- 包括子系统、模块(或构件)以及相关层次的说明、每一模块(或构件)的接口定义
- 体系结构类型可分为:层次模块体系结构、C/S体系结构、以数据库为中心的体系结构、管道结构和面向对象的结构等
- 详细设计针对总体设计结果,给出体系结构中每一模块或构件的详细描述
©实现:
把设计结果转换为可执行的程序代码
(d)确认
-确认活动贯穿于整个开发过程.
-实现完成后的确认,保证最终产品满足用户的需求。
(e)支持活动:
-支持活动包括修改和完善。
-它为系统的运行提供完善性维护、纠错性维护和适应性维护。
-
软件工程的发展已经历了四个重要阶段
- 传统的软件工程
- 对象工程
- 过程工程
-
构件工程
软件过程
软件生命周期概念、软件过程概念、常见的几种软件过程模型:瀑布、增量、原型、螺旋、敏捷等,比较各自优缺点
软件生命周期
-
软件生命周期
软件产品或软件系统从设计、投入使用到被淘汰的全过程
包括
问题定义、可行性研究、需求分析、总体设计、详细设计、编码、测试、维护
软件过程
软件过程
是在工作产品构建过程中,所需完成的工作活动、动作和任务的集合。
活动
主要实现宽泛的目标,与应用领域、项目大小、结果复杂性或者实施软件工程的重要程度没有直接关系
动作
包含了主要工作产品生产过程中的一系列任务。
任务
关注小而明确的目标,能够产生实际产品
软件过程模型
软件过程模型
是软件开发全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。
①瀑布模型
1、按照软件生命周期的各个阶段,依次向下,逐步求精的方式完成软件项目;
2、每一阶段都有每一阶段明确的任务,每一阶段的完成都有相应的文档生成,
3、为下一阶段提供依据。
优点: 能够逐步稳定的使项目向前发展。
缺点: 无法解决软件需求不明确或者变动的问题。
1、在项目生命周期的后期才能看到最终的成果,用户不能提前了解到软件产品的实际效果。
2、当需求发生变化时,整个软件项目需要从头再来,增加了软件的周期成本。
3、通过很多的强制完成日期和里程碑,来跟踪各个项目阶段,容易使软件项目质量收到影响。
②增量模型
- 增量:满足用户需求的一个子集,能够完成一定功能、小而可用的软件。
通过对用户的需求,建立一个满足用户核心功能的产品,并投入使用,在使用的过程中,用户
根据实际需求,提出新的需求(增量)
。开发人员再将新的需求逐步增加到现有的系统中。
-
增量模型结合了
原型模型的基本要素和迭代的特征
,采用了
基于时间的线性序列
,每个线性序列都会输出该软件的一个“增量” - 每个增量的开发可用瀑布或快速原型模型
优点:
1、用户可以很快的体验到软件产品,并且投入使用创造价值。
2、可以针对实际的使用情况增加新的比较明确的需求,也减少了用户学习使用的时间
3、减少软件项目的开发风险。
缺点:
1、每个增量必须提供一些系统功能,这使得开发者很难根据客户需求给出大小适合的增量
2、软件必须具备开放式体系结构(困难)
3、 易退化成边做边改的方式,使软件过程控制失去整体性
3、 快速原型模型:
原型:一个部分开发的产品,使客户和开发人员能够对计划开发系统的相关方面进行检查
原型化的目的:
- 明确并完善需求,如演示原型
- 研究技术选择方案,如技术验证原型
1、根据用户的需求快速建立一个原型系统,该原型能够满足用户的部分需求,用户根据原型,提出新的需求或者原需求的修改,一旦需求建立,原型系统将被丢弃。
优点:
1、通过快速 原型的建立,让用户试用,使用户的需求更加明确,降低了用户需求确定的难度。
2、通过原型,可以很快的让用户体验到产品的功能,并激发用户产生新的需求。
减少需求不明带来的风险
缺点:
1、注重需求的确定和功能的实现,而容易忽略产品的质量
2、一旦用户对原需求发生较大改变,需要产生新的模型
3、要求技术人员在短时间内制造原型模型,技术要求比较高
适用于目标客户不懂计算机
4 螺旋模型
把开发活动和风险管理结合起来控制风险
1、是快速原型模型和瀑布模型的结合,并且加入了风险分析;
适用于需求不明确或者需求可能发生变化的大型复杂的软件系统。
支持面向过程、面向对象等多种软件开发方法,是一种具有广阔前景的模型。
喷泉模型
基于构件的开发模型
考虑的焦点是集成,而非实现
构件/组件(Component)
- 系统中模块化的、可更换的部分
- 实现特定的功能
-
对实现进行封装,暴露一组接口
统一过程模型
基于面向对象方法学
• 使用统一建模语言UML(Unified Modeling Language)
敏捷开发
选择过程模型
项目管理
项目管理四要素:人员、产品、项目、过程(概念)
软件度量有哪些方法
软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对人员(People)、产品(Product)、过程(Process)和项目(Project)进行分析和管理的活动。
软件项目管理的4P要素
人员、产品、项目、过程
过程(Process)
根据项目特征选择合适的过程模型
根据过程模型进行项目分解
项目(Project)
软件度量概念及面向规模的度量
软件项目管理的成熟化也需要度量与数字化,目的是持续改进软件过程,并用于项目估算、质量控制、生产率评估等。
软件项目度量的内容
▪ 生产率度量
▪ 质量度量
行业及组织的历史数据是软件项目度量的基础
软件项目度量的方法
▪
面向规模的度量
▪
通过对质量和(或)生产率的测量进行规范化而得到的,这些测
量是根据开发过的软件的规模得到的。
▪
千行代码( KLOC )
: 这些代码指的是源代码,通过源代码的行数来直观度量一个软件程序有多大规模
▪
生产率(PM)
:PM = L / E, L表示代码总量(单位:KLOC),E表示软件工作量(单位:人月)
▪
每千行代码的平均成本( CKL )
:CKL = S / L,S为软件项目总开销 , L表示代码总量(单位:KLOC)
▪
代码出错率(EQRl)
:EQRl = Ne / L,Ne表示代码出错的行数,L表示代码总量(单位:KLOC)
▪
文档与代码比(Dl)
:Dl = Pd / L,Pd表示文档页数, L表示代码总量(单位:KLOC)
▪
优点
▪ 简单易行,自然直观
▪
缺点
▪ 依赖于程序设计语言的表达能力和功能
▪ 软件开发初期很难估算出最终软件的代码行数
▪ 对精巧的软件项目不合适
▪ 面向功能点的度量
▪ 用软件的功能表示软件的规模
▪ 应用最广泛的是功能点(Function Point, FP)法
▪ 项目开发初期就可估算出
▪ 功能点计算目前主要基于经验公式
▪ 优点
▪ 与程序设计语言无关,
在开发前就可以估算出软件项目的规模
▪ 不足
▪
没有直接涉及算法的复杂度,不适合算法比较复杂的软件系统;
▪ 功能点计算主要靠
经验公式,主观因素比较多
▪
面向对象的度量
▪
面向用例的度量
软件项目估算
概念
项目启动之前,软件团队应该估算将要做的工作、所需要的资源、成
本、从开始到完成的时间,也即是对这些内容进行预测
策略
项目度量方法为项目估算提供了依据与有效输入
尽量把估算推迟到项目的后期进行
根据已经完成的项目进行估算
基于经验的软件估算
COCOMO经验估算模型——概述
项目进度计划
定义:对项目进行任务划分,定义任务之间的依赖关系,并进行时间
估算和资源分配,确保以最佳的时间与成本输出满足质量要求的产品
关键路径
关键路径(critical path) :
在任务网络图中,从项目开始到项目完成有许多条路径,
路径上所有
弧权重之和最大的路径(路径最长)叫关键路径。
非关键路径(noncritical path):
在整个任务网络图中非最长的路径都叫非关键路径。