少女祈祷中...

软件工程基础

一、软件的变革

  • 30年代:数字计算机的建立

  • 40年代:软件是硬件的一部分

  • 50年代:软件工程与硬件工程一致

  • 60年代:软件不是硬件

    软件的特性:

    1、软件与显示世界关系更加密切,对需求的规格化更加困难

    2、软件与现实世界关系更加密切,对需求的规格化更加困难 , 软件⽐硬件容易修改的多,并且不需要昂贵的⽣产线复制产品

    3、软件没有损耗

    4、软件不可⻅

  • 70~80年代:程序=算法+数据结构

  • 90年代~2010s:软件发展比编程更加复杂

二、软件

软件的应用

  • 大数据
  • AI
  • 短视频、Web3.0

云原生

云原生

serverless架构:只有当需要使用服务的时候才开启服务器

软件的类型

  • 系统软件:操作系统/数据库/数据仓库/嵌入式设备/安全
  • 编程软件:IDE/测试/持续集成/建模/度量
  • 应用软件:商业/政府/休闲/医疗/教育/国防/个人/专业/科学

应用软件基于现实又高于现实

什么是软件?总结

  • 独立于硬件
  • 是一个工具
  • 软件=程序+文档+数据+知识
  • 软件发展比编程更复杂
  • 应用软件从现实中诞生,反作用于现实

三、软件工程

软件工程的定义:

1、对系统化、被约束、可量化的方法的应用,来开发、操作、维护软件,也就是将工程运用到软件中

2、对1中方法的研究

工程师

• ⼯程师通过⼀系列的讨论决策,仔细评估项⽬的可选活动,并在每个决策点选择⼀种在当前环境中适合 当前任务的⽅法进⾏⼯作。可以通过对成本和收益进⾏折衷分析调整相应策略。

• ⼯程师需要对某些对象进⾏度量,有时需要定量的⼯作;他们要校准和确认度量⽅法,并根据经验和实 验数据进⾏估算。

• 软件⼯程师强调项⽬设计过程的纪律性,这是团队⾼效⼯作的条件。

• ⼯程师可胜任研究、开发、设计、⽣产、测试、构造、操作、管理,以及销售、咨询和培训等多种⻆⾊。

• ⼯程师们需要在某些过程中使⽤⼯具,选择和使⽤合适的⼯具是⼯程的关键要素。

• ⼯程师们通过专业协会发展和确认原理、标准和最佳实践⽅法,并提⾼个⼈能⼒。

• ⼯程师们能够重⽤设计和设计制品。

工程学科的发展

关于工程的因素

  • 问题(现实世界与期望不符)
  • 科学知识(工程=科学+原则+艺术)
  • 解决方法/机器(虚拟计算机=通用计算机+特殊的解决方案)
  • 成本效益

对软件工程的理解

• 软件⼯程是⼀种⼯程活动

• 软件⼯程的动机是解决实际问题

• 软件⼯程是科学性、实践性和⼯艺性并重的

• 软件⼯程追求⾜够好,不是最好

• 软件⼯程真正的产品是基于虚拟计算机的软件⽅案

• 软件⼯程的最终⽬的是要促进整个社会的进步

四、知识领域

软件开发活动:

需要经历的阶段:需求开发-软件设计-软件构造-软件测试-软件移交与演化-软件维护

角色分工

  • 需求工程师(需求开发工作)
  • 软件体系结构师(软件体系结构设计)
  • 软件设计师(软件体系结构设计完毕后分配部件,对这一部件进行详细设计)
  • 程序员(软件构造,通常与软件设计师是同一批人)
  • 人机交互设计师(可以与软件设计师是同一批人,也可不同)
  • 软件测试人员(独立于其他开发人员角色)
  • 项目管理人员(计划、领导、协调和控制软件开发的各项工作,一个团队只有一个)
  • 软件配置管理人员(管理软件开发中产生的各种制品,对重要制品进行标识、变更控制、状态报告等,一个团队只有一个)
  • 质量保障人员(生产过程中监督和控制软件产品质量)
  • 培训和支持人员(软件移交与维护)
  • 文档编写人员(专门负责写文档,解放软件体系结构师和需求工程师等人力资源)