目录

tips:以下都是自己在网课学习整理的总结跟归纳~可能有自己偏向(就是详略啦~)ヾ(◍°∇°◍)ノ゙(嗯哼 因为大部分都是网课内容而已 主要是拿来自用而已~ 所以感兴趣可以自己去看同款希赛网课——
一、软件生命周期与开发模型
1、软件生命周期
软件生命周期:指软件从开始计划到最终被淘汰所经历的各个阶段
计划时期 | 问题定义 |
可行性研究 | |
开发时期 | 需求分析 |
总体设计 | |
详细设计 | |
编码 | |
测试 | |
运行时期 | 维护 |
计划时期+需求分析(开发时期):用户(甲方)、项目管理工程师、系统分析师参与
总体设计(开发时期):系统分析师、软件分析师参与
详细设计(开发时期):软件设计师参与
编码(开发时期):程序员参与
测试(开发时期):测试工程师参与
维护(运行时期):运行管理维护工程师参与
各个阶段主要任务描述
阶段 | 主要任务描述 |
---|---|
问题定义 | 确定要解决的问题是什么? |
可行性研究 | 是否有可行的解决方案,是否值得解决? |
需求分析 | 为解决这个问题,目标系统应具备哪些功能、性能要求等 |
总体设计 | 确定目标系统的主要功能如何完成,有哪些模块构成,以及模块之间的关系 |
详细设计 | 具体解决各个模块的实现细则 |
编码 | 编写程序代码 |
测试 | 通过各种测试,使软件达到预定的要求 |
维护 | 通过各种维护活动使系统持久地满足用户的需求 |
需求分析:明确整个软件应该具备哪些功能,哪些性能方面的需求
概要设计:把软件的功能按照模块去划分,明确模块与模块之间有什么样的关系
详细设计:针对单个模块,做内部控制结构
编码:把单个模块用程序代码的方式予以表达
考法
【考法1】软件生命周期各阶段任务
2、软件开发模型
常见的软件开发模型有:瀑布模型、V模型、原型化模型、螺旋模型、喷泉模型
①瀑布模型(软件生命周期法):各阶段工作室按固定顺序而连接的
每个活动只强调做一次
弊端:
a、需求分析不好把握,如果是对于没有开发过的项目,在乙方捕捉甲方的需求时可能会把握不准,导致最后做出来的产品与甲方想要的效果不同,这个是瀑布模型最大的风险
b、前期没有发现过的错误一旦传到后方,有可能导致整个软件项目开发失败
只适用于需求非常明确的项目
②V模型:通过开发和测试同时进行的方式来缩短开发周期,提高开发效率
刚好对应
详细设计(单个模块)->单元测试:针对单个模块正确性的检查
概要设计->集成测试:把通过单元测试的模块集成在一起,测试模块之间的协作性
需求分析->系统测试:在实际运行的环境下来看软件是否正常
用户需求->验收测试:站在用户的角度/站在需求分析合同的角度来看看有没有满足合同方面的要求
③原型化模型:指在软件开发者获取用户基本需求后,快速地建立一个目标系统的最初版本(可运行的系统),并把它交给用户试用、补充和修改,再进行新版本的开发(多轮迭代)。包括演化模型、增量模型
演化模型:经过多轮的迭代
增量模型:也经过多轮迭代,但强调每一次迭代均发布一个可操作的产品出来
但无论哪个模型,最早期是不用投入过多的人员进行参与的
适用于需求不够明确的项目
④螺旋模型:瀑布模型与原型模型的结果,同时引入其他模型所不具备的风险分析
⑤喷泉模型:典型的面向对象生命周期模型。“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性
在设计阶段之间可以形成这种迭代和无缝的特性(如 需求分析在没有完全完成的情况下 实际上是可以做部分的软件设计的 之间会有重叠 这样可以加快软件开发的效率 但不利于项目管理)
优点:可以加快软件开发的效率
缺点:但不利于项目管理
考法
【考法1】开发模型使用项目的总结
适用项目 | |
---|---|
瀑布模型 | 需求非常明确的项目 有成功开发模板的项目 |
原型化模型 | 需求可能会发生变化的项目 |
螺旋模型 | 对风险敏感的项目 |
喷泉模型 | 面向对象的项目 |
二、软件开发与测试
1、软件设计
软件设计的标准:划分软件系统模块时应做到高内聚、低耦合
高内聚:指单个模块内各个元素之间的联系,一个好的内聚模块应当恰好只做一件事(即一个功能尽量在一个模块中去完成)
低耦合:指模块与模块之间的直接依赖关系。模块与模块之间的调用关系由概要设计阶段完成(低耦合性是指 模块与模块之间的联系是约松散越好)
考法
【考法1】软件设计的标准
软件设计的标准:应做到高内聚、低耦合
2、程序编码
程序设计语言(编程):用以书写计算机程序,即指计算任务的处理对象和处理规则的描述
语言的基础是一组记号和一组规则,在程序设计语言中,这些记号串就是程序。包括三个方面的因素:语法、语义、语用
语法指的是在编写程序的时候,这些符号之间呈现什么样的规则
语义指的是程序起什么样的作用
语用指的是这个程序使用之间是什么关系
程序设计语言的分类:
第一代:机器语言
(指的是二进制代码来编写程序,可读性比较差,但计算机能够唯一识别的语言为机器语言,用户很难识别)
第二代:汇编语言
(属于符号化的机器语言,用了一些助记词,但也属于比较低级的语言)
第三代:高级语言,面向用户的,分为面向过度语言和面向对象的语言
(高级语言是用英文语法加上数学函数所构成的语言,面向于普通程序员,友好性会比较好,一致性也比较好;如果用高级语言来编写程序,计算机是不能够直接识别和执行的,需要通过编译或者说解释程序的处理)
高级语言编写的程序要能在计算机中运行,需要经过编译或解释程序的处理
解释程序(翻译):逐句翻译并执行,中间没有目标程序的生成
编译型:中间有目标程序的生成
(编译会形成等价的机器语言目标程序,而解释为逐句翻译并执行,输入一条翻译一条执行一条,中间没有目标程序,所以解释的交互性会比较好一点,但效率会更低)
考法
【考法1】解释程序(翻译)和编译程序的区别
解释程序(翻译)和编译程序的最大区别:是否有目标代码的生成
3、软件测试
软件测试的目标:尽可能多的发现错误
软件测试方法:
测试策略
回归测试(退化测试):用于发现一些错误在被修正之后可能引起的其他代码出错
考法
【考法1】白盒和黑盒测试的区别
白盒和黑盒测试的最大区别:是否关注程序实现的内部逻辑
【考法2】各测试策略的特点
特点描述 | |
---|---|
单元测试 | 测试单个模块 |
集成测试 | 测试模块间的接口和通信 |
验收测试 | 有效性测试、达标测试 |
回归测试 | 发现纠正错误所引起的其他错误 |
三、项目管理基础
1、时间管理(进度管理)
进度管理的常用图形描述方法有:Gantt(甘特)图和PERT(计划评审)图
①Ganntt图:可以清楚地表示任务的持续时间和任务之间的并行,但是不能清晰地描述各个任务之间的依赖关系
②PERT图(计划评审图):PERT图是一种网络模型,描述一个项目任务之间的依赖关系
PERT图相关概念
描述 | |
---|---|
关键路径 | PERT图中最长的一条路径;也反映了完成计划中完成此项目的最短时间 |
最早时刻 | 表示在此时刻之前从该事件出发的任务不可能开始 |
最晚时刻 | 表示从该事件出发的任务必须在此时刻之前开始 |
松弛时间 | 表示在不影响整个工期的前提下(关键路径),完成任务有多少弹性时间(最晚-最早) |
关键路径:如何判断一个项目的工期是由关键路径来判断,关键路径决定的事整个项目的最短工期;关键路径是最长的一条路径,指的是从开始的顶点到结束的顶点
松弛时间:松弛时间不仅可以等于“最晚-最早”的时间,还可以等于“关键路径时间-包含某活动最长路径时间”(两种算法结果一样)
特点:能清晰地反映出各任务的依赖关系,但不能反映各任务之间的并行关系
考法
【考法1】Gantt图和PERT图的特点
优点 | 缺点 | |
---|---|---|
甘特图 | 能清晰的描述每个任务从何时开始,到何时结束,以及任务之间的并行关系 | 不能反映出各任务间的依赖关系 |
PERT图 | 能清晰的反映出各任务的依赖关系 | 不能反映出任务之间的并行关系 |
【考法2】PERT图中相关时间的计算
描述 | |
---|---|
关键路径 | PERT图中最长的一条路径;也反映了完成计划中完成此项目的最短时间 |
最早时刻 | 表示在此时刻之前从该事件出发的任务不可能开始 |
最晚时刻 | 表示从该事件出发的任务必须在此时刻之前开始 |
松弛时间 | 表示在不影响整个工期的前提下(关键路径),完成任务有多少弹性时间(最晚-最早) |