定义:
软件:软件是逻辑和物理的系统,由程序、文档、数据和其他相关元素构成。软件是一个过程的抽象表示
软件工程:应用系统化、学科化、定量的方法,来开发、运行和维护软件,即将工程应用到软件。以及对以上过程中各种方法的研究
软件 = 程序 + 数据 + 文档
- 程序:按事先设计的功能和性能需求执行的指令序列
- 数据:是出现能正常操纵信息的数据结构
- 文档:与程序开发、维护和使用有关的图文材料
软件的性质:
- 复杂性
- 难以描述性
- 不可见性
- 变化性
软件是逻辑的,而不是物理的
- 开发或工程化,不是制造的
- 开发环境对产品影响大
- 开发时间和工作量难以估计
- 会多次修改
- 开发进度几乎没有客观标准
- 测试困难
- 不会磨损和老化
- 维护易产生新的问题
- 生产是简单的拷贝
- 系统软件(操作系统)
- 应用软件
- 工程/科学软件(MATLAB,Maple)
- 嵌入式软件
- 产品线软件
- Web应用
- 普适计算——无线网络
- 网络资源——网络作为一个计算引擎
- 开发源码
- 云计算/边缘计算
计算需求:软件必须适应新的软件环境或技术
业务需求:软件必须改善,以实现新的业务需求
嵌入式需求:软件必须扩展,以满足和新一代系统或数据库之间的互操作性
架构需求:软件必须重新设计,使其在新的网络环境是可用的
- 现实需求
- 规模,复杂性,生产效率
- 软件固有特性之间矛盾
- 不可视性对于主观性
- 软件规模有复杂性
- 易变性与不确定性
- 精确新与模糊性
软件危机:计算机软件开发和维护过程中遇到一系列严重问题
严重问题:效率低,质量差
周期长、成本高、质量差、维护难
软件危机的具体表现:
- 开发成本和进度估计不准,开发进度难以控制
- 用户对“已完成的”软件系统不满意
- 软件质量和可靠性差强人意
- 软件常常是不可维护的
- 软件通常没有适当的文档资料
- 软件成本逐年上升
- 软件开发生产率滞后于硬件和计算机应用普及
硬件/软件成本变化趋势
软件成本占比逐步上升
技术的进步跟不上需求的增长
- 客观:软件本身特点
- 逻辑思维产物
- 规模庞大
- 主观:不正确的开发方法
- 需求设计
面对问题
- 手工化 标准化
- 查错
- 需求获取
- 支持维护
- 开发速度 市场需求
- 开发周期过长 开发成本过高
- 研发风险
- 软件开发复杂协作
- 不同角色的软件神话
定义
- 将系统化的、科学化的、可量化的方法应用于软件的开发、运行和维护,即针对软件的工程应用
- 对上述应用方法的研究
目标
软件工程的目标是在给定的时间和预算内,按照用户的需求,开发易修改、高效、可靠、可维护、适应力强、可移动、可重用的软件
软件工程——一种层次化技术
- 工具
- 方法
- 过程
- 质量焦点
三要素:方法、工具、过程
- 方法:结构化程序设计方法
- 瀑布模型、螺旋模型等
- 编程语言
- Fortran语言、Pascal语言、C语言
- 系统
- =算法+数据结构(1960’s)
- =子程序/函数+函数调用(1980’s)
- 软件系统效果
- 相当于建筑行业的平房
- 方法:面向对象方法
- 面向对象模型、建模工具等
- 编程语言
- C++(1983)、Java (1995) 、Visual系列语言(1990’s)
- 系统
- 对象=算法+数据
- 系统=对象+消息
- 软件系统效果
- 相当于建筑行业的高楼
- 方法:软构件方法
- Web Services、软件复用方法等
- 编程语言
- Visual系列语言、Windows操作系统等
- 系统
- 构件=对象+消息
- 构件=实体+接口
- 系统=构件+连接件
- 软件系统效果
- 如堆积木、造预制件
- 可批量快速构造复杂建筑
当前软件工程方法
方法:
- 面向服务的体系结构SOA方法:服务+服务总线
- 基于Internet与云计算的软件开发方法
软件系统效果
- 快速构建城市建筑群
- 阶段性生命周期计划的管理
- 连续验证
- 产品控制
- 编程工具和工程实践
- 责任分配
- 更好更少的人
- 过程改进
-
什么是软件?
软件是物理和逻辑的系统,由程序、文档、数据和其他相关元素构成。软件是一个过程的抽象表示
-
什么是软件工程?
应用系统化、学科化、定量的方法,来开发、运行和维护软件,即将工程应用到软件。以及对以上过程中各种方法的研究
-
软件工程具有哪些特点?
- 使用阶段性生命周期计划的管理
- 进行连续的验证
- 保证严格的产品控制
- 使用现代编程工具和工程实践
- 保持清晰的责任分配
- 用更好更少的人
- 保持过程改进
-
什么是导致软件危机的主要原因?
- 客观:软件本身特点
- 逻辑思维产物
- 规模庞大
- 主观:不正确的开发方法
- 需求设计
- 客观:软件本身特点
-
为什么职业道德和责任十分重要?