软件从需求到上线的流程|青训营笔记

166 阅读5分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第三篇笔

软件的生命周期

  • 软件计划与可行性研究阶段(问题定义、可行性研究):此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性。
  • 需求分析阶段:在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。需求分析阶段是一个很重要的阶段,也是在整个软件开发过程中不断变化和深入的阶段,能够为整个软件开发项目的成功打下良好的基础。
  • 软件设计阶段(概要设计和详细设计):主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等等。
  • 软件编码阶段:是将软件设计的结果转换成计算机可运行的程序代码。在程序编码中必须要制定统一,符合标准的编写规范。以保证程序的可读性,易维护性,提高程序的运行效率。
  • 软件测试阶段:在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。
  • 软件运行和维护阶段:是软件生命周期中持续时间最长的阶段,包括纠错性维护和改进性维护两个方面。

常用开发方法

瀑布模型

瀑布模型是将软件项目划分为不同阶段,从一个阶段流动到下一阶段,每个阶段输出一个或多个评审通过的文档,后续阶段在上一阶段结束前不应该开始,每一个阶段的输出是下一个阶段工作的输入,典型的计划驱动软件过程。

敏捷开发

敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。

它不是一门技术,它是一种开发方法,也就是一种软件开发的流程,它会指导我们用规定的环节去一步一步完成项目的开发;而这种开发方式的主要驱动核心是人;它采用的是迭代式开发; 敏捷软件开发方法是从多种久经验证的软件开发最佳实践演变而来的,这些最佳实践在组织管理团队和开发工作方面非常有效。敏捷软件开发过程可以进行裁剪,以适用于大型组织、分布式团队,以及其他复杂组织情况。 敏捷软件开发专注于高度的协作、互动、增量开发,以及高质量的软件开发方式。相比传统软件项目管理方式,已经有众多的敏捷软件开发团队证实,敏捷软件开发可以带来极高的投资回报(ROI),可以产生更好质量的软件, 可以更快地交付软件,并令利益相关者获得更高的满意度。

云原生

Cloud表示应用程序位于云中,而不是传统的数据中心;Native表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,充分利用和发挥云平台的弹性+分布式优势。 更多服务部署到云上,容器是在操作系统中虚拟处理,实实现了容器之间的相互隔离, 且只有很低的开销, 应用和其依赖成为一个整体, 可以打包成镜像

微服务架构

  • 各个功能在不同的服务中
  • 不同的模块需要进行PRC通信
  • 不同模块可以独立扩缩容
  • 每个服务的代码仓库仅由少部分人维护

软件编码

  • 使用分支 团队需要知道何时合并分支, 使用哪个分支

  • 代码规范:

注意注释, 定义某些数字或者字符串为某个常量, 不要copy代码, 抽象为公共方法即可, 正确使用IDE重构功能

  • 单元测试 单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。测试某一的程序段的正确性。

  • 集成测试 在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试

软件开发环境和测试环境

功能环境:

需要一个能模拟线上的环境进行开发合测试, 环境与环境隔离, 不影响其他功能开发合测试

集成环境:

  • 不同人开发的功能合并在一起测试, 相互之间的影响可能产生缺陷
  • 迭代发布的所有功能合并在一起测试, 确保发布的功能不会相互影响

回归环境

确保新功能不对老功能产生影响

发布阶段

发布模式: 蛮力发布, 金丝雀发布(发布过程服务中断, 少量用户验证新版本), 滚动发布(仅在新旧版本兼容的前提, 用户影响小, 成本高), 蓝绿发布(将服务分成两组, 发布速度快, 但新旧版本不兼容的话得一次升级)