软件工程基础
一、软件的变革
-
30年代:数字计算机的建立
-
40年代:软件是硬件的一部分
-
50年代:软件工程与硬件工程一致
-
60年代:软件不是硬件
软件的特性:
1、软件与显示世界关系更加密切,对需求的规格化更加困难
2、软件与现实世界关系更加密切,对需求的规格化更加困难 , 软件⽐硬件容易修改的多,并且不需要昂贵的⽣产线复制产品
3、软件没有损耗
4、软件不可⻅
-
70~80年代:程序=算法+数据结构
-
90年代~2010s:软件发展比编程更加复杂
二、软件
软件的应用
- 云
- 众
- 大数据
- AI
- 短视频、Web3.0
云原生
serverless架构:只有当需要使用服务的时候才开启服务器
软件的类型
- 系统软件:操作系统/数据库/数据仓库/嵌入式设备/安全
- 编程软件:IDE/测试/持续集成/建模/度量
- 应用软件:商业/政府/休闲/医疗/教育/国防/个人/专业/科学
应用软件基于现实又高于现实
什么是软件?总结
- 独立于硬件
- 是一个工具
- 软件=程序+文档+数据+知识
- 软件发展比编程更复杂
- 应用软件从现实中诞生,反作用于现实
三、软件工程
软件工程的定义:
1、对系统化、被约束、可量化的方法的应用,来开发、操作、维护软件,也就是将工程运用到软件中
2、对1中方法的研究
工程师
• ⼯程师通过⼀系列的讨论决策,仔细评估项⽬的可选活动,并在每个决策点选择⼀种在当前环境中适合 当前任务的⽅法进⾏⼯作。可以通过对成本和收益进⾏折衷分析调整相应策略。
• ⼯程师需要对某些对象进⾏度量,有时需要定量的⼯作;他们要校准和确认度量⽅法,并根据经验和实 验数据进⾏估算。
• 软件⼯程师强调项⽬设计过程的纪律性,这是团队⾼效⼯作的条件。
• ⼯程师可胜任研究、开发、设计、⽣产、测试、构造、操作、管理,以及销售、咨询和培训等多种⻆⾊。
• ⼯程师们需要在某些过程中使⽤⼯具,选择和使⽤合适的⼯具是⼯程的关键要素。
• ⼯程师们通过专业协会发展和确认原理、标准和最佳实践⽅法,并提⾼个⼈能⼒。
• ⼯程师们能够重⽤设计和设计制品。
工程学科的发展
关于工程的因素
- 问题(现实世界与期望不符)
- 科学知识(工程=科学+原则+艺术)
- 解决方法/机器(虚拟计算机=通用计算机+特殊的解决方案)
- 成本效益
对软件工程的理解
• 软件⼯程是⼀种⼯程活动
• 软件⼯程的动机是解决实际问题
• 软件⼯程是科学性、实践性和⼯艺性并重的
• 软件⼯程追求⾜够好,不是最好
• 软件⼯程真正的产品是基于虚拟计算机的软件⽅案
• 软件⼯程的最终⽬的是要促进整个社会的进步
四、知识领域
软件开发活动:
需要经历的阶段:需求开发-软件设计-软件构造-软件测试-软件移交与演化-软件维护
角色分工
- 需求工程师(需求开发工作)
- 软件体系结构师(软件体系结构设计)
- 软件设计师(软件体系结构设计完毕后分配部件,对这一部件进行详细设计)
- 程序员(软件构造,通常与软件设计师是同一批人)
- 人机交互设计师(可以与软件设计师是同一批人,也可不同)
- 软件测试人员(独立于其他开发人员角色)
- 项目管理人员(计划、领导、协调和控制软件开发的各项工作,一个团队只有一个)
- 软件配置管理人员(管理软件开发中产生的各种制品,对重要制品进行标识、变更控制、状态报告等,一个团队只有一个)
- 质量保障人员(生产过程中监督和控制软件产品质量)
- 培训和支持人员(软件移交与维护)
- 文档编写人员(专门负责写文档,解放软件体系结构师和需求工程师等人力资源)