软件工程学习心得及体会(1)

软件工程学习心得及体会(1)

  • 软工复习及心得体会
    • 1. 软件工程的产生和发展
      • 1.1. 软件工程的产生与发展
      • 1.2. 软件工程的基本概念
    • 2. 软件项目开发过程与项目管理
      • 2.1. 软件项目开发过程
        • 增量过程模型(需求不带变化的)
        • 演化过程模型(需求要变化呀)
      • 2.2. 软件项目开发管理

软工复习及心得体会

更详细请戳软件工程心得体会


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)
  • 项目风险管理

    • 风险识别:商业风险、环境、技术、规模风险等,钱够不够?
    • 风险评估:建立风险表,对每个风险出现的概率进行评估
    • 应对计划:风险已经发生,需要对症下药
    • 风险控制:确定风险来源,制定风险环节方案,监督、检查风险措施的落实情况,确保风险措施有效

你可能感兴趣的:(软件工程,经验分享,程序人生,运维)