软件工程学习笔记

软件工程学习笔记

1.1 软件

1.1.1 软件的概念及特点

(一)概念 :计算机软件是由专业人员开发长期维护软件产品完整的软件产品包括 了在各种不同容量和体系结构计算机上的可执行的程序 ,运行过程中产生的各种结果 ,以及以硬复制和电子表格等多种方式存在的软件文档

总结如下:完整软件产品由三部分组成

  1. 可执行程序能够在不同存储容量、不同硬件体系结构计算机上直接运行的指令集合,是软件实现功能的核心载体。
  2. 运行数据与结果程序执行过程中输入、处理、输出产生的各类数据、运算结果、中间缓存信息等。
  3. 配套软件文档以纸质硬拷贝、电子文档、电子表格、图文手册等多种形式留存的文字资料,包含需求说明书、设计文档、用户操作手册、维护日志、测试报告等,用于开发、使用、运维阶段查阅。

简单概括:软件 = 程序 + 运行数据 + 配套文档。

PS:为什么运行数据与运行结果属于软件的组成部分?

程序脱离数据无法完成工作,二者绑定不可分割。程序只是一套 "处理规则、指令步骤",本身是空的。举例子:

  • Excel 程序(程序)本身不能算报表,必须填入表格数据、计算出的数值(运行数据 / 结果)才能实现办公功能;
  • 游戏客户端(程序)只是画面逻辑,玩家存档、角色属性、关卡进度都是运行数据,没有这些数据游戏无法正常继续。程序只规定 "怎么算、怎么展示",数据是程序处理的对象、承载业务信息,没有数据,程序失去使用价值。

(二)特点:

  1. 具有抽象性 。 软件是逻辑指令、算法与信息的集合,没有物理实体 ,看不见摸不着。硬件是有形元器件,软件仅存在存储介质中,只能通过运行表现功能,无法直观触摸、观测实体形态。
  2. 无明显的制造过程。 硬件:设计完成后大批量生产、加工制造,有标准化生产流程;软件:开发完成后复制即可分发 ,不存在原材料加工、组装制造环节。复制一份软件几乎零成本,没有制造工序。
  3. 存在退化问题 。 硬件老化是物理磨损,软件不会自然磨损,但长期使用中:不断修改、打补丁、更新功能会引入新缺陷,结构逐渐混乱,可靠性持续下降,这种性能变差的现象称为软件退化,只能持续维护延缓退化。
  4. **对计算机系统有着不同程度的依赖性。**软件不能脱离硬件、操作系统、驱动、数据库等环境独立运行。不同 CPU 架构、系统版本会出现兼容问题,环境改变可能导致软件无法使用,移植需要额外适配开发。
  5. **尚未完全摆脱人工的开发方式。**现阶段无法全自动生成成熟软件,需求分析、编码、调试、测试、维护都高度依赖程序员、测试人员人工操作,自动化工具仅辅助,不能完全替代人力。
  6. **软件本身是复杂的。**一方面是业务逻辑复杂,大型软件需要处理海量业务规则;另一方面软件内部模块多、交互关系繁杂,隐藏大量隐性缺陷,逻辑复杂度远高于普通硬件。
  7. **成本相当昂贵。**软件主要成本集中在前期人力开发、测试、长期维护。大型系统需要大量技术人员投入数月甚至数年,研发、运维人力成本高昂;对比硬件,复制成本极低,但前期投入巨大。
  8. **相当多的软件工作涉及社会因素。**软件服务各行各业,需求来源于社会业务、法律法规、行业规范、用户习惯。开发时必须考虑政策、安全、伦理、行业标准、用户使用习惯等社会相关约束,不只是单纯技术问题。

左图:硬件失效曲线(浴盆曲线)

横轴:时间;纵轴:失效率曲线分为三个阶段:

  1. **初期失效阶段(早期故障)**刚出厂硬件存在生产瑕疵、装配缺陷,失效率很高;随时间运行,故障设备被筛选淘汰,失效率快速下降。
  2. **偶然失效阶段(平稳期)**硬件缺陷基本暴露完毕,进入稳定使用期,失效率维持在很低、近乎恒定的水平,故障为随机偶然发生。
  3. **磨损失效阶段(老化期)**元器件物理老化、磨损、损耗加剧,失效率持续快速上升,硬件接近使用寿命终点,故障频发。

核心特点:硬件失效根源是物理磨损、材质老化,时间越长损耗越严重。


右图:软件失效曲线

理想曲线

软件无物理磨损,初期修复隐藏 bug 后,失效率会持续平缓下降,时间越久故障越少,不存在硬件式的老化上升段。

实际曲线(软件退化)

  1. 初始阶段:同硬件,上线初期大量隐藏缺陷暴露,失效率快速降低;
  2. 变更(修改 / 升级 / 打补丁):每次对软件修改、新增功能、修复漏洞时,改动会引入新缺陷;
  3. 变更副作用:每次更新后失效率会突然冲高,形成一波波峰值;
  4. 长期趋势:多次迭代修改后,软件结构臃肿、逻辑耦合混乱,整体失效率缓慢抬升,也就是软件退化

核心特点:软件不会物理磨损,失效完全来自逻辑缺陷、修改引入新 bug,越维护修改,长期可靠性越差。

1.1.2 软件的分类

相关推荐
不甘先生1 天前
AI 当下 ,软件工程的全方位变革
人工智能·软件工程
疯狂打码的少年2 天前
【软件工程】结构化设计:模块独立性与耦合内聚
java·开发语言·笔记·软件工程
Summer-Bright2 天前
AI 软件简报 07.11-07.15:DeepSeek天价融资、Copilot用户叛逃、中国AI新规落地
人工智能·软件工程·copilot
keke.shengfengpolang2 天前
软件工程转数据分析,真的能行吗?过来人给你交个底
数据挖掘·数据分析·软件工程
疯狂打码的少年2 天前
【软件工程】结构化设计:结构化设计方法(SC图)
笔记·软件工程
琢磨先生David2 天前
软件工程行业未来核心发展趋势(2026–2035 全景)
软件工程
梁辰兴2 天前
软件工程:软件工程的目标与原则
软件工程·目标·实践应用·梁辰兴·目标体系·原则·基本原则
lisw053 天前
【计算机科学技术】算力是什么?为何用小时计?怎么使用?
人工智能·机器学习·软件工程
Dola_Zou3 天前
以CmASIC重塑AI+边缘设备的安全与商业复利
人工智能·安全·软件工程·软件加密