根因早期软件是作坊式开发想到哪里写到哪里缺少规范。项目常常出现需求频繁变更、工期失控、BUG堆积、代码难以维护、交付延期、上线即崩溃项目失败率极高。软件工程就是把工程化思维引入软件研发用一套标准化流程、方法论、角色、规范、工具控制软件从需求到下线全生命周期的复杂度在成本、时间、质量三者之间做平衡产出稳定、可维护、可交付的软件产品。它不只是写代码是一套完整的“造软件”工程体系。核心术语分层拆解一、生命周期相关术语软件生命周期软件从想法提出、需求分析、设计、编码、测试、发布、运维直到最后下线退役的完整全过程。瀑布模型线性顺序模型阶段串行上一个阶段全部完成才进入下一阶段。适合需求固定、很少变更的项目缺点是后期才能看到成果变更成本极高。迭代模型把整体功能切分成多个小版本一轮一轮迭代开发每轮都产出可运行版本逐步叠加能力。增量模型先开发核心基础版本交付后续不断增量追加新功能用户可以尽早拿到可用产品。敏捷开发Agile以快速响应需求变化为核心的开发思想重视人与人协作、可运行软件弱化厚重文档价值观个体和交互 流程和工具可工作软件 完备文档客户协作 合同谈判响应变化 遵循计划。Scrum敏捷最常用落地框架。包含产品负责人、Scrum Master、开发团队以Sprint短迭代周期一般2~4周为单元包含产品待办、Sprint待办、每日站会、评审会、复盘会。看板Kanban可视化工作流把任务拆成卡片流转于不同状态待办、开发中、测试、上线限制在制品数量避免任务堆积。V模型测试和开发阶段一一对应需求阶段就规划验收测试概要设计对应系统测试详细设计对应集成测试编码对应单元测试强调测试尽早介入。二、需求工程术语需求用户对软件想要实现的功能、约束、期望。分为业务需求、用户需求、软件需求。业务需求组织层面目标为什么要做这个软件业务价值是什么。用户需求用户视角用户要使用系统完成什么事情。功能需求软件必须具备的能力例如用户登录、订单查询。非功能需求NFR不直接是业务功能是系统质量属性性能、安全性、可用性、可扩展性、可靠性、可维护性。需求规格说明书 SRS书面文档完整、清晰描述软件全部需求作为开发、测试、验收基准。需求评审产品、开发、测试一起评审需求文档提前发现需求模糊、矛盾、遗漏。需求蔓延范围蔓延项目进行过程中不断新增不在原始规划内的需求不加控制会导致工期、成本失控。用户故事 User Story敏捷描述需求的简短句式模板作为XX角色我希望XX功能以便获得XX价值。验收标准AC用户故事配套的判定条件定义功能做到什么程度才算完成是测试用例的依据。三、设计阶段术语概要设计总体设计划分系统模块、模块之间接口、整体架构不深入内部细节。详细设计下沉到模块内部函数、类、数据库表结构、算法逻辑设计。架构设计定义系统整体结构组件如何拆分、组件通信方式、技术选型支撑非功能需求。模块独立的功能单元高内聚低耦合可以单独开发测试。高内聚一个模块内部的元素紧密相关只负责一类事情。低耦合模块和模块之间依赖尽量少改动一个模块尽量不影响其他模块。接口 Interface模块之间约定的交互契约定义入参、出参、异常隐藏内部实现。原型产品的简易模拟页面用来和用户确认交互、页面布局提前验证需求。数据库设计概念模型ER图、逻辑表结构、字段、主键、外键、索引。ER图实体关系图描述业务实体、实体属性、实体之间一对多/多对多关系。四、编码与配置管理术语版本控制SCM管理代码变更记录每一次修改支持回滚、分支并行开发代表工具Git。主干分支 main/master存放稳定可上线代码的主分支。分支Branch从主干拉出独立开发线路新功能、bug修复在分支开发完成后合并回主干。合并Merge把一个分支代码改动并入另一个分支。冲突Conflict同一处代码在两个分支被同时修改合并时需要人工解决冲突。提交Commit一次代码变更快照附带备注描述本次改动。代码评审Code Review其他开发人员审查你的代码检查BUG、规范、逻辑缺陷、安全问题。编码规范命名、注释、文件组织、语法写法统一规则保证团队代码可读性。技术债务为短期快速上线写出不规范、设计有缺陷的代码。当下省事后续维护、改功能要付出更高代价如同欠债越积累越沉重。静态代码扫描不运行程序直接分析源码自动找出语法漏洞、安全风险、不规范代码。五、测试相关术语单元测试 UT最小代码单元函数、方法单独测试验证逻辑正确性开发者编写。集成测试 IT多个模块组装在一起测试模块之间接口交互是否正常。系统测试 ST完整整套软件在模拟环境对照需求做全面功能、非功能测试。验收测试 UAT最终用户/业务方参与测试判断系统是否满足业务需求确认能否上线。回归测试修改BUG、新增功能后重新测试原有功能防止改动把旧功能弄坏。冒烟测试版本部署完成后执行少量核心主流程用例快速验证系统能不能正常跑用来判断是否可以进入详细测试。测试用例预设的测试步骤、输入、预期结果用来验证功能。缺陷/Bug软件行为和需求预期不一致的问题。缺陷生命周期bug从提交、确认、修复、复测、关闭的完整状态流转。性能测试包含负载测试、压力测试、容量测试验证并发、响应时间、吞吐量。安全测试探测SQL注入、XSS、越权等安全漏洞。六、部署、运维与交付术语CI 持续集成代码提交后自动拉取代码、编译、执行单元测试尽早发现合并问题。CD持续交付CI基础上自动打包、环境部署随时可以手动触发上线。CD持续部署持续交付更进一步验证通过自动上线生产环境。环境开发环境、测试环境、预发环境、生产环境。预发环境和生产配置、数据最接近的环境上线前最后一轮验证。灰度发布新版本先面向一小部分用户上线观察指标无异常再逐步全量放量降低上线风险。回滚Rollback新版本上线出现故障快速切回上一个稳定版本。监控采集系统日志、CPU、内存、接口响应、报错率实时观测系统运行状态。告警指标超出阈值触发通知通知研发及时处理故障。七、项目管理与质量术语范围项目要做哪些、不做哪些功能边界。进度项目任务的时间计划、里程碑。成本人力、服务器、第三方服务等资源投入。质量软件满足需求、稳定、低缺陷的程度。三重约束铁三角范围、时间、成本三者互相制约固定其中两个第三个必然变化。里程碑Milestone项目关键节点阶段性交付成果。风险未来可能发生、会损害项目进度/质量的事件风险识别、评估、应对预案。基线Baseline需求、计划、文档冻结版本后续变更必须走变更流程不能随意修改。变更控制需求、方案变更提交评审评估影响批准之后才实施管控无序改动。缺陷密度单位代码量内BUG数量衡量代码质量指标。可用性系统正常对外提供服务时间占总时间的比例常说几个999.9%。可靠性长时间运行系统不出故障的能力。可扩展性业务增长、流量上涨系统可以简单扩容支撑更多负载。可维护性后续阅读代码、修改bug、新增功能的难易程度。八、角色术语产品经理PM挖掘业务整理需求定义产品功能和价值。开发工程师Dev编码实现系统功能。测试工程师QA验证软件发现缺陷保障交付质量。架构师负责系统整体架构、技术选型、重大技术方案。Scrum Master敏捷团队的服务者移除团队阻碍保障敏捷流程落地。产品负责人POScrum角色维护产品待办列表定义需求优先级。运维工程师Ops负责服务器、部署、环境、监控、故障处理。DBA数据库管理员负责数据库设计、优化、备份、故障。核心误区澄清软件工程 ≠ 写文档。文档只是手段目标是控制复杂度、保障交付。过度堆砌厚重文档反而拖累敏捷项目。软件工程不是只有敏捷。瀑布、敏捷只是不同场景的方法论没有绝对好坏看项目需求稳定性、团队规模选择。软件工程不能消灭BUG只能系统性降低缺陷概率控制风险。一句话总结软件工程就是把软件研发从随性手工作业升级为可控工程用流程、规范、角色、工具平衡范围、时间、成本持续交付满足业务需求、具备合格质量的软件。
