主题切换
软件危机
1.1 引言
软件工程诞生背景 软件行业发展迅速,但软件开发仍停留在手工制作模式,开发人员对软件开发认知存在偏差,制约软件行业发展。 行业学者将其他成熟工程领域的标准化方法引入软件开发,由此诞生软件工程。
软件开发完整流程 以教员学生成绩管理系统为例,完整开发流程:
确定系统各模块功能;
模块详细设计:功能、性能、数据结构、交互界面;
程序编码、软件测试;
交付用户投入使用;
持续迭代完善、修改程序,适配用户实际需求。
示例业务流程(教员成绩系统)
- 教员三类操作:查询要求、编辑数据、统计数据
- 查询要求 → 查询学生成绩 → 输出查询结果
- 编辑数据 → 编辑学生成绩
- 统计数据 → 统计学生成绩 → 生成统计报表 所有操作均依赖「学生成绩表」底层数据。
1.2 软件与软件危机
1.2.1 软件的定义
软件是和硬件相互依存的计算机组成部分,完整公式:
- 程序:按照预设功能、性能编写的指令序列;
- 数据:程序运行、处理业务所需的数据与数据结构;
- 文档:支撑程序运行、后期维护的图文配套资料。
考点提示:该定义常出现在选择题、填空题。
1.2.2 软件五大核心特点
- 抽象特征:无实体物理形态;
- 无明显制造过程:复制无生产加工流程;
- 无备件特征:不存在零件替换概念;
- 手工制作特征:早期开发高度依赖人工;
- 成本昂贵特征:人力、时间成本高。
1.2.3 软件的两种分类方式
按功能划分
- 系统软件
- 支撑软件
- 应用软件
按开发规模划分
依据参与人数、开发周期、源代码行数分为6类:
| 类别 | 参加人员数 | 研制期限 | 产品规模(源程序行数) |
|---|---|---|---|
| 微型 | 1 | 1~4周 | 0.5k |
| 小型 | 1 | 1~6月 | 1k~2k |
| 中型 | 2~5 | 1~2年 | 5k~50k |
| 大型 | 5~20 | 2~3年 | 50k~100k |
| 甚大型 | 100~1000 | 4~5年 | 1M(1000k) |
| 极大型 | 2000~5000 | 5~10年 | 1M~10M |
1.2.4 软件危机
1. 软件危机起源
20世纪60年代中期,大型软件系统开发需求爆发,但软件技术跟不上业务需求,大型项目普遍存在复杂度高、周期长、正确性难保障三大难题,问题持续堆积无法解决,最终形成软件危机。
经典事故案例:1963年火星探测器,软件中逗号符号书写错误,探测器升空后爆炸,造成数亿美元经济损失。
2. 软件危机定义与表现形式
软件危机指软件开发、维护阶段出现的一系列严重问题,核心两大痛点:如何高效开发满足用户需求的软件;如何维护存量大量旧软件。 主要表现:
- 用户需求模糊、需求频繁变更;
- 软件开发成本持续上涨;
- 项目开发进度无法管控;
- 交付软件质量差,缺陷多;
- 后期软件维护难度极大。
3. 软件危机产生原因
- 开发过程缺乏完整规划;
- 前期需求调研不充分、不完整;
- 全开发流程无标准化规范约束;
- 缺少成熟、标准化的软件评测手段。
4. 解决软件危机三大途径
- 强化软件开发全流程规范化管理;
- 普及经过验证、成熟高效的软件开发技术与方法论;
- 研发、落地标准化、自动化软件开发工具。