软件工程学习心得及体会(1)
软工复习及心得体会
更详细请戳软件工程心得体会
1. 软件工程的产生和发展
1.1. 软件工程的产生与发展
-
程序:指令集合
-
软件:程序(program)+文档(documents)+数据(data)
-
软件的本质特性:复杂性、一致性、可变性、不可见性
-
软件开发面临的挑战:
-
客户不满意:调研、用户画像不到位
-
项目过程失控:需求多变、用户画像不到位
-
风险成本:没有评估好项目的风险及成本
-
无力管理团队:领导层不作为、架构搭建不行
Why:
客观上:软件越来越复杂;
主观上:开发者没有系统的知识就直接上手开发,写出屎山;
-
-
需要理解的工程化思想
-
分而治之:划分模块,最后拼接
-
折中:不同需求的折中,例如时间和任务上的分配
-
复用:不要重复造轮子
-
良好的架构:可修改性、可维护性、可拓展性
-
1.2. 软件工程的基本概念
-
软件工程基本要素
-
方法:设计方法:OOD、UML等
-
工具:例如测试工具、开发工具等
-
过程:一般为问题定义、需求开发、软件设计、软件实现、软件测试
-
范型:开发范式,可以理解为架构,例如MVVM
-
-
软件工程关注的目标
- 功能性需求(FR Functional-Requirement):即完成基本功能,要求健壮性等;
- 非功能性需求(NFR Non-Functional-Requirement):追求性能、可拓展性等;
2. 软件项目开发过程与项目管理
2.1. 软件项目开发过程
-
生命周期:孕育、诞生、成长、成熟、衰亡
-
软件过程模型:为软件提供了一份特定的路线图
-
瀑布模型:
- 线性模型:需求分析->软件设计->软件实现->软件验证->软件维护
-
特点:每一阶段都需要确认和验证,产生大量文档和提交物;简单、移动;项目易管理
-
缺点:文档过多,效率相对较低;难以响应需求;可能会造成重大损失
-
适合:项目小、需求变化小、外部不可控因素少、需求在开发前就已被良定义
增量过程模型(需求不带变化的)
-
增量模型
- 本质:迭代运用瀑布模型,每一个增量都能给用户使用,避免了造成重大损失
-
缺点:附加的增量应该保证不破坏已有的结构;增加增量应该简便
-
适合:需求明确,用户期望尽快看到成效,项目可拆分为独立的可交付软件
-
RAD
- 本质:并行运用瀑布模型,一般有多个Team同时开发
-
优点:开发迅速、充分利用资源
-
缺点:系统需要被合理地模块化;需要大量人力;PM能力要强;不适合技术风险高的项目;
演化过程模型(需求要变化呀)
-
快速原型开发模型
-
原型分析:分析者和用户快速确定基本要求
-
原型构造:忽略细节,快速构造一个可运行系统
-
原型运行与评价:开发者和用户频繁通信,发现问题,消除误解
-
原型修正:根据修改意见修改系统
-
结束:得到参与者一致认可
-
优点:开发迅速、逐步明确用户需求
-
缺点:软件质量、系统结构、用户会混淆最终结果与原型系统
-
-
螺旋模型
- 描述:规划阶段、风险评估、开发阶段、评估验证阶段形成螺旋结构,不断迭代
-
优点:结合了原型迭代以及瀑布模型的系统性及可控性
-
缺点:周期长、成本高、项目难以管理等
2.2. 软件项目开发管理
-
项目管理概念
-
4P:Project、People、Process、Product
-
People-软件开发团队组织方式:主程序员式(一个主程序员,其他都来给他打下手)、矩阵式(技术管技术、管理管管理)
-
Product-软件产品:需求分析、软件设计、软件实现、软件测试、软件维护+文档
-
Process-软件过程:过程模型、项目计划等,过程分解是难点!!!
-
Project-项目:W5HH原则
- Why:为什么做这个项目?
- What:这个项目是什么?
- Where:在哪里做这个项目?
- Who:由谁来做这个项目?
- When:什么时候开始做?
- How:怎么做?
- How much:需要多少成本?
- 基本要素:工作、进度表、资源(成本)、结果
-
-
软件项目估算
-
基本内容:规模估算、成本估算、进度估算、工作量估算
-
基本估算方法
-
分段估算:先给一个宏观估算,再对每一个阶段进行分段估算
-
专家判断
-
参数估算:根据项目历史数据建立模型,从而估算参数
-
LOC(Lines of Code)估算:
L = (a + 4m + b)/6
C = u * L
PM = L / v
其中,L为代码总行数,a为乐观代码量,b为悲观代码量,m为可能代码量;
C为总成本,u为每行代码的单位成本;
PM(pm)为总工作量,v(LOC/pm)为平均生产率; -
COCOMO估算
PM = A * (Size)^B
其中,PM为总工作量,A为工作量调整因子,B为规模调整因子,Size代表规模,单位是千行代码或功能点数 -
功能点FP:评估包括:
- 外部输入
- 外部输出
- 外部查询
- 内部逻辑文件
- 外部接口文件
FP = UFC (0.65 + 0.01 sum(fi))
其中,UFC为未调整功能点,由信息域加权因子计算得到,fi为不同需求的复杂度值,位于0~1之间
-
用例点估算
标准用例 = (基本流+扩展流+2业务规则)/10
生产率 = 6 / 单位用例
工作量 = 6 标准用例之和 -
故事点估算
- 给定用户故事及其故事点数即可
-
机器学习方法
-
-
-
项目进度安排
- 工作量分配:40-20-40法则,40前期工作,20给编码开发,40给测试
- 定义任务
- 时间分配
- 标出任务最早开始时间与结束时间
- 标出任务最晚开始时间与结束时间
- 计算关键路径
- 确定任务开始/结束时间
- 甘特图
- 确认任务资源(确认每个任务资源需求)
- 确定责任(确定角色)
- 明确结果(每个任务输出结果)
- 确定里程碑(milestone)
-
项目风险管理
- 风险识别:商业风险、环境、技术、规模风险等,钱够不够?
- 风险评估:建立风险表,对每个风险出现的概率进行评估
- 应对计划:风险已经发生,需要对症下药
- 风险控制:确定风险来源,制定风险环节方案,监督、检查风险措施的落实情况,确保风险措施有效