软件工程学习笔记
软件工程学习笔记1.1 软件1.1.1 软件的概念及特点一概念计算机软件是由专业人员开发并长期维护的软件产品。完整的软件产品包括了在各种不同容量和体系结构计算机上的可执行的程序运行过程中产生的各种结果以及以硬复制和电子表格等多种方式存在的软件文档。总结如下完整软件产品由三部分组成可执行程序能够在不同存储容量、不同硬件体系结构计算机上直接运行的指令集合是软件实现功能的核心载体。运行数据与结果程序执行过程中输入、处理、输出产生的各类数据、运算结果、中间缓存信息等。配套软件文档以纸质硬拷贝、电子文档、电子表格、图文手册等多种形式留存的文字资料包含需求说明书、设计文档、用户操作手册、维护日志、测试报告等用于开发、使用、运维阶段查阅。简单概括软件 程序 运行数据 配套文档。PS:为什么运行数据与运行结果属于软件的组成部分?程序脱离数据无法完成工作二者绑定不可分割。程序只是一套 “处理规则、指令步骤”本身是空的。举例子Excel 程序程序本身不能算报表必须填入表格数据、计算出的数值运行数据 / 结果才能实现办公功能游戏客户端程序只是画面逻辑玩家存档、角色属性、关卡进度都是运行数据没有这些数据游戏无法正常继续。程序只规定 “怎么算、怎么展示”数据是程序处理的对象、承载业务信息没有数据程序失去使用价值。二特点具有抽象性。 软件是逻辑指令、算法与信息的集合没有物理实体看不见摸不着。硬件是有形元器件软件仅存在存储介质中只能通过运行表现功能无法直观触摸、观测实体形态。无明显的制造过程。硬件设计完成后大批量生产、加工制造有标准化生产流程软件开发完成后复制即可分发不存在原材料加工、组装制造环节。复制一份软件几乎零成本没有制造工序。存在退化问题。 硬件老化是物理磨损软件不会自然磨损但长期使用中不断修改、打补丁、更新功能会引入新缺陷结构逐渐混乱可靠性持续下降这种性能变差的现象称为软件退化只能持续维护延缓退化。对计算机系统有着不同程度的依赖性。软件不能脱离硬件、操作系统、驱动、数据库等环境独立运行。不同 CPU 架构、系统版本会出现兼容问题环境改变可能导致软件无法使用移植需要额外适配开发。尚未完全摆脱人工的开发方式。现阶段无法全自动生成成熟软件需求分析、编码、调试、测试、维护都高度依赖程序员、测试人员人工操作自动化工具仅辅助不能完全替代人力。软件本身是复杂的。一方面是业务逻辑复杂大型软件需要处理海量业务规则另一方面软件内部模块多、交互关系繁杂隐藏大量隐性缺陷逻辑复杂度远高于普通硬件。成本相当昂贵。软件主要成本集中在前期人力开发、测试、长期维护。大型系统需要大量技术人员投入数月甚至数年研发、运维人力成本高昂对比硬件复制成本极低但前期投入巨大。相当多的软件工作涉及社会因素。软件服务各行各业需求来源于社会业务、法律法规、行业规范、用户习惯。开发时必须考虑政策、安全、伦理、行业标准、用户使用习惯等社会相关约束不只是单纯技术问题。左图硬件失效曲线浴盆曲线横轴时间纵轴失效率曲线分为三个阶段初期失效阶段早期故障刚出厂硬件存在生产瑕疵、装配缺陷失效率很高随时间运行故障设备被筛选淘汰失效率快速下降。偶然失效阶段平稳期硬件缺陷基本暴露完毕进入稳定使用期失效率维持在很低、近乎恒定的水平故障为随机偶然发生。磨损失效阶段老化期元器件物理老化、磨损、损耗加剧失效率持续快速上升硬件接近使用寿命终点故障频发。核心特点硬件失效根源是物理磨损、材质老化时间越长损耗越严重。右图软件失效曲线理想曲线软件无物理磨损初期修复隐藏 bug 后失效率会持续平缓下降时间越久故障越少不存在硬件式的老化上升段。实际曲线软件退化初始阶段同硬件上线初期大量隐藏缺陷暴露失效率快速降低变更修改 / 升级 / 打补丁每次对软件修改、新增功能、修复漏洞时改动会引入新缺陷变更副作用每次更新后失效率会突然冲高形成一波波峰值长期趋势多次迭代修改后软件结构臃肿、逻辑耦合混乱整体失效率缓慢抬升也就是软件退化。核心特点软件不会物理磨损失效完全来自逻辑缺陷、修改引入新 bug越维护修改长期可靠性越差。1.1.2 软件的分类