第二章 – 软件开发过程

软件生命周期与开发过程

  • 软件开发过程(software development process)又叫做软件开发生命周期(software development life cycle, SDLC),是软件产品开发的任务框架和规范,又可以简单的称为软件生命周期及软件过程。
  • 可重复的、可预测的过程能够提升软件生产的效率和质量。(过程改进)
  • 生命周期是软件开发的宏观上的框架,软件过程则涉及到软件开发的流程等管理细节,在框架稳定的前提下允许对软件过程进行裁剪。
  • 4种不同类型的生命周期:顺序式、迭代式、增量式以及敏捷式。

软件生命周期

  • 过程管理主要采用的是一种“分而治之”的思想,即将整个软件的生命周期划分成软件定义、软件开发和运行维护三个主要的时期,每个时期再细分为具体的阶段,分别对应明确的任务。
  1. 可行性分析与开发计划:是否值得开发(较高层次的需求分析和设计),技术可行性、经济可行性和社会可行性,描述所提出的解决方案和方案的可行性,并拟定开发计划。
  2. 需求分析:软件开发后续阶段的基础,应对需求进行变更管理,除功能需求外还要对系统设计有影响的非功能性需求加以识别和分析,输出是一份“需求规格(Specification)说明书”的文档
  3. 软件设计:设计可分为概要设计和详细设计,此阶段的输出分别为“概要设计说明书”和“详细设计说明书”,尽可能保证系统设计结构在整体上的稳定性。
  4. 程序编码:翻译成某种计算机语言实现的程序代码。(要忠于设计)
  5. 软件测试:环节可分为单元测试、集成测试及系统测试。方法主要包括黑盒和白盒方法
  6. 软件维护:
    • 改正性维护:诊断和改正在使用过程中发现的软件错误;
    • 适应性维护:修改软件以适应环境的变化;
    • 完善性维护:根据用户的要求改进或扩充软件使它更完善;
    • 预防性维护:修改软件为将来的维护活动预先做准备。
    • 软件维护是软件生命周期的最后一个阶段,也是持续时间最长,花费最多的一个阶段,软件工程学的一个目的就是提高软件的可维护性,降低维护的代价。

传统生命周期模型

  • 顺序的将生命周期阶段组织起来,严格按照需求、分析、设计、编码和测试的阶段进行。
  • 瀑布模型、原型模型、增量模型。
  • 最基本和有效的可供选择的软件开发模型。

瀑布模型(*)

  • 最广泛
  • 阶段间具有顺序性和依赖性,文档驱动,前一阶段输出的文档为下一阶段的输入文档
  • 推迟实现,不急于编写代码:尽可能的理解和掌握系统需求,清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现。
  • 质量保证的观点:
    • 每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。
    • 每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。
  • 传统瀑布模型图示:
    第二章 - 软件开发过程
    • 计划驱动,在对系统整体的把控和协调上,具有优势,因此适合规模较大的系统或分布式开发模式。

快速原型模型(*)

  • 快速原型模型(Rapid Prototype)的主要作用是在用户和开发者之间起到“桥梁”的作用。

第二章 - 软件开发过程
  • 对比瀑布模型:
    • 瀑布模型: 力求一次性给用户完整的系统。
    • 增量模型:逐步增加系统功能。
    • 需要开放的架构设计。
  • 螺旋模型

    • 螺旋模型的基本思想是使用原型及其它方法尽量降低风险 : 在每个阶段之前都增加了风险分析过程的快速原型模型。
    • 特别适合于大型复杂的系统。螺旋模型沿着螺线进行若干次迭代,四个象限代表了不同的活动。
      • 原型模型可以在一定程度上降低风险,但对有些风险也无能为力。
      • 需要专业的风险评估人员。

    第二章 - 软件开发过程
  • 迭代:逐步求精
  • 阶段间没有明显的界限-面向对象的思想保证了各个阶段开发的一致性。
  • 敏捷宣言(*)

    • 迭代式开发
    • 增量交付
    • 开发团队和用户反馈推动产品开发
    • 持续集成
    • 开发团队自我管理

    敏捷宣言:

    • 个体和互动胜过流程和工具;
    • 工作的软件胜过详尽的文档;
    • 客户合作胜过合同谈判;
    • 响应变化胜过遵循计划。
    • 增量开发的方式即分批分期的交付用户产品,通过增量开发来应对软件产品之外的不确定因素(风险)。
    • 敏捷方法建议先实现必要性的用户案(用)例(用户故事),体现出软件的价值,然后在后续版本中对功能进行细化,使得我们的软件产品的所有功能都能够达到相同的用户体验水平。
      • “用例”是指一件用户通过系统完成的有价值的目标,它不是一个具体的功能。
        第二章 - 软件开发过程
      • SCRUM角色:
        • 产品拥有者(Product Owner):产品远景规划,平衡利益相关者利益,确定产品积压的优先级等。它是开发团队和客户间的联络点。
        • 利益相关者(Stakeholder):客户或最终用户代表,收集编写产品需求,审查项目成果等。
        • 专家(Scrum Master):指导进行Scrum开发与实践,是开发团队与产品拥有者间的联络点。
        • 团队成员(Team Member):项目开发人员。

      DevOps过程

      • DevOps:开发(Development)和运维(Operations),源于敏捷开发过程,遵从基本的敏捷宣言,强调了“个体和交互胜过流程和工具”的作用,但却不受限于某一种软件过程,甚至是在瀑布模型中也会发挥作用。
      • DevOps是一组过程、方法与系统的统称,用于促进开发、技术运营和质量保证部门之间的沟通、协作与整合。
      • 强调开发和运维必须紧密合作
      • DevOps的核心目标是自动化和可持续交付
      • 实现全生命周期的工具全链路打通与自动化、跨团队的线上协作能力,从而全面提高生产环境的可靠性、稳定性、弹性和安全性。
      • 纵向集成打通了应用全生命周期
      • 横向集成打通了架构、开发、管理、运维等部门墙
        第二章 - 软件开发过程

      来源:StuG_III

      声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2021年2月8日
    下一篇 2021年2月8日

    相关推荐