软件工程入门笔记

文章目录

  • 0. 软件生命周期模型
    • 瀑布模型
    • (快速)原型模型
    • 增量模型
    • 迭代模型
    • 敏捷开发思想
      • 敏捷软件开发宣言(2001)
      • 敏捷 VS. 瀑布
      • 敏捷实践
  • 1. 需求分析
  • 2. 架构设计
    • 1)基本步骤
    • 2)技术选型
  • 3. 开发编码
    • 1)持续集成、持续交付和持续部署
      • 发展
      • 如何搭建持续交付环境/li>
    • 2)源码管理工具
      • 简介
      • 基于源码管理的开发流程
    • 3)自动化测试
      • 什么是自动化测试/li>
      • 如何在项目中应用/li>
  • 4. 测试
    • 软件测试工具
  • 5. 运行维护
    • 版本发布
    • 线上监控和 警
    • 故障处理
  • 附录

学习笔记摘录于:宝玉.《软件工程之美》

软件工程 = 过程 + 方法 + 工具
**
软件开发过程(软件项目周期)可以分为需求定义与分析、设计、实现、测试、交付和维护。
基于此衍生出最基础的过程模型——瀑布模型。但是由于周期较长等缺点,又在瀑布模型基础上提出了V模型原型设计增量模型螺旋模型等,已改善前者的一些缺陷。到90年代,各种轻量级开发方法不断被提出,又形成了敏捷开发
**
好的实践流程化,好的流程工具化。

0. 软件生命周期模型

瀑布模型

阶段 内容 产出
问题的定义和规划 需求方和开发方明确开发目标。研究可行性。 需求文档,可行性研究 告
需求分析 对需求进行分析和反复沟通确认。 需求分析文档
软件设计 对软件系统进行抽象和设计,如系统框架、数据库等。 架构设计文档
程序编码 将架构设计和界面设计的结果转换成代码。 代码文件
软件测试 依据需求分析文档对程序进行严密测试。 测试 告
运行维护 修复错误,增加功能等。 使用说明文档

优点:简单易行;分工协作;质量相对有保证。
缺点:难以响应需求变更;工作量分布不均。

(快速)原型模型

原型模型用于解决客户需求不明确和需求多变的问题。主要方法是快速造一个可以运行的软件原型*,再反复修改确认,直至符合用户需求。如果客户对质量要求较高,则原型只应用于需求分析阶段,后续重新开发(抛弃策略);或者将原型应用于整个开发过程,完善原型(附加策略)。
*:原型制作不一定需要设计编码,有时通过原型工具也可以完成。

原型模型能快速响应需求变更,但往往是以牺牲质量为代价。

增量模型

增量模型适用于能模块化、可以按批次交付的软件系统。主要方法是把待开发软件系统模块化,然后对每个模块应用瀑布模型。将软件产品分批次交付。

增量模型可以多模块并行开发。但是要求系统可模块化,以及人员有较高的系统架构水平。

迭代模型

迭代模型每次只设计和实现产品的一部分(一次迭代),然后逐步完成更多的功能。与增量模型的区别在于前者是按模块划分,而迭代模型则是按时间划分。

迭代模型同样依据分治原理缩短每次的交付周期。难点在于对每次迭代内容的把握。

敏捷开发思想

敏捷软件开发宣言(2001)

个体和互动 高于 流程和工具
工作的软件 高于 详尽的文档
客户合作 高于 合同谈判
响应变化 高于 遵循变化

敏捷 VS. 瀑布

阶段 敏捷 瀑布
需求分析 用户故事 严谨的需求分析和详尽的需求文档
架构设计 渐进式 一步到位
项目质量保证 自动化测试为主 有专门的阶段测试
发布部署 持续集成 测试环境->验收通过->生产环境

敏捷实践

  • Ticket

  • 基于Git 和 CI 的开发流程
    针对代码不稳定和部署繁琐问题,基于Git的开发流程结合CI的自动测试、部署提供了良好的解决方案。
    (1)从当前master克隆一个branch用于开发。开发完成后提交一个PR(Pull Request)。PR提交后,其他人就可以对代码进行评阅,确认没问题后通过代码审查。提交PR到源码服务器,CI会创建一个干净的运行环境,先把提交的代码下载下来,然后安装依赖项,接着运行自动化测试代码,并将测试结果反馈。当代码审查和自动化测试通过后,就可以合并到master了。
    (2)自动部署:当代码合并到master时,再次运行自动化测试代码,测试通过后直接运行自动部署脚本(构建镜像等),把master代码部署到开发或测试环境上。

  • 部署线上流程

  • 每日站会

  • 极限编程(eXtreme Programming, XP)
    目前敏捷开发主流的工程实践方法。极限的意思是如果某个实践好,就将其做到极致。基于极限理念,产生了很多优秀的实践方法,如持续集成、自动化测试、重构等。

1. 需求分析

需求分析:对用户需求进行提炼分析,形成产品需求的过程。

  • 挖掘真实需求
  • 提出解决方案
  • 筛选和验证方案

2. 架构设计

良好的架构设计可以降低因需求变动、人员组织、技术组织、软件稳定运行等带来的技术复杂度。

1)基本步骤

分析需求 选择相似且成熟的方案 层层细化 验证和优化

2)技术选型

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

相关推荐