- 一个比较公认的软件工程定义:将系统化的、严格约束的、可量化的方法应用于软件开发、运行和维护,即将工程化应用于软件,并研究这个过程中的方法
- 软件及其特性
- 第一个写软件的人:阿达
- 什么是软件?
- 软件是计算机中与硬件相互依存的一部分
- 软件=程序+相关数据+说明文档
- 程序:按照事先设计的功能和性能要求执行的指令序列
- 数据:程序能正常操纵信息的数据结构
- 文档:与程序开发维护和使用有关的各种图文资料
- 软件的特性
- 复杂性
- Complex 而不是Complicated
- 软件是人类有史以来生产的复杂度最高的工业产品
- 一致性
- 软件不能独立存在,需要依附于一定的环境(如硬件、网络以及其他软件)
- 必须遵循人为的惯例并适应已有的技术和系统,随着接口的不同而改变,随时间推移而变化,而这些变化是不同人设计的结果
- 可变性
- 成功的软件都是会发生演化的
- 既带开发来了难题又给软件本身带来生命力
- 不可见性
- 软件是一种逻辑产品
- 客观存在不具有空间的形成特征
- 缺少合适的几何表达方式
- 限制软件的设计过程,严重阻碍了人与人之间的交流 对开发管理造成很大的困难
- 复杂性
- 软件具有复杂性、一致性、可变性和不可见性等固有的内在特性,这是造成软件开发困难的根本原因。
- 软件所具有的复杂性、一致性、可变性、不可见性等特性,使得软件开发过程变得难以控制,开发团队如同在焦油坑中挣扎的巨兽。
- 软件工程的产生与发展
- 软件危机
- 出现与概念提出
- 软件危机几乎从计算机诞生的那一天起就出现了
- 1968年第一次提出了“软件危机”这个名词
- 软件开发面对的挑战
- 客户不满意:软件交付的质量难以保证,许多功能不是客户需要的
- 项目过程失控:由于客户需求的不确定性和持续的变化,给整个过程的开发带来了不可控性
- 风险与成本问题:开发团队专注于技术,忽视对风险的管理,进而造成整个成本开发的超支
- 无力管理团队:无法评估开发人员的能力以及工作进度
- 出现原因
- 软件本身的特点
- 与软件开发和维护的方法不正确有关(大多数是软件开发过程管理上的原因)
- 忽视软件开发前期的需求分析
- 开发过程没有统一、规范的方法论指导,文档资料不齐全,忽视人与人之间的交流
- 忽视测试阶段的工作,提交给用户的软件质量差
- 轻视软件的维护
- 出现与概念提出
- 软件工程的产生和发展
- 发展大致经历了4个阶段
- 1968年前:软件工程史前阶段,没有什么工程化的方法可循,更多是个人作坊式的开发
- 1968年至20世纪80年代末:新的时期,划分了软件开发的过程,瀑布模型
- 1983年至1995年:意识到过程质量对产品质量的重大影响,面向对象的软件和方法
- 20世纪90年代至今:敏捷开发方法广泛应用于企业
- 一个图示
- 软件危机
- 软件工程的基本概念
- 什么是软件工程
- 什么是工程?
- 工程是将理论和知识应用于实践的科学,以便经济有效地解决问题。
- 软件工程的定义
- 软件工程是为了经济地获得可靠的和能在实际机器上高效运行的软件,而建立和使用完善的工程原理
- 将系统化的、严格约束的、可量化的方法应用于软件开发、运行和维护,即将工程化应用于软件,并研究这个过程中的方法
- 软件工程有什么?
- 软件开发技术
- 软件开发方法学
- 软件工具
- 软件工程环境
- 软件开发技术
- 什么是工程?
- 软件项目管理
- 软件度量
- 项目估算
- 进度控制
- 人员组织
- 配置管理
- 项目计划
- 软件工程的基本要素
- 方法 methodologies 完成软件开发任务的技术手段
- 软件开发方法提供如何构造软件的技术,包括与项目有关的计算和各种估算、系统和软件需求分析、数据结构设计、程序体系设计、程序体系设计、算法过程、编码、测试以及维护等内容 。
- 软件开发方法规定了明确的工作步骤与技术、具体的文档格式、明确的评价标准
- 软件开发方法经历了面向过程,面向对象,面向构件,面向服务的4个阶段
- 面向过程
- 以算法作为基本的构造单元,强调自顶向下的功能分解,将数据与功能进行一定程度的分离
- 强调任务分解(功能分解)从上而下,顺序执行
- 面向对象
- 以类作为基本程序单位,对象时类的实例化,对象之间以消息传递为基本手段
- 尽量模拟人类习惯的思维方式、
- 描述问题的问题空间与实现解法的解空间在结构上尽可能一致
- 面向构件:寻求比类的粒度更大的且易于复用的构件,期望实现软件的再工程
- 面向服务:在应用表现上将软件构件化,即应用业务由服务组成,而服务由构件组装而成
- 面向过程
- 工具 tools 为软件开发方法提供自动或半自动的软件支撑环境
- 软件工具是人类在开发软件的活动中智力和体力的拓展和延伸,为方法和语言提供自动或半自动化的支持
- 集成化计算机辅助软件工程系统CASE:将开发软件的软、硬件工具和软件工程数据库集成在一起
- 过程 procedures 支持软件开发各个环节的控制和管理
- 软件开发过程贯穿了软件开发的各个环节,它定义了方法的使用顺序,可交付产品(文档、报告以及格式)的要求,为保证质量协调变化所需要的管理以及软件开发过程各个阶段完成的标志
- 一般过程
- 研究和定义用户问题
- 确定和分析用户的实际需求
- 设计整个系统的总体结构
- 编程实现系统的各个部分
- 将各个部分集成起来进行测试
- 还包括开发过程管理等支持性活动
- 软件工程可分为理论、结构、方法、工具,管理,规范
- 理论和结构是软件开发的基础
- 方法、工具、环境构成软件开发技术
- 好的工具促进方法的研制,好的方法能改进工具
- 工具的集合构成软件开发环境
- 管理是技术实现和开发的保证
- 规范是开发遵循的技术标准
- 软件开发的四个基本策略
- 软件复用
- 分而治之
- 逐步演进
- 优化折中
- 对软件工程发展有重大影响的若干技术
- 抽象:降低复杂性的处理方法
- 软件建模方法
- 用户界面原型化
- 软件体系结构
- 软件过程
- 软件复用
- 度量
- 工具
- 集成环境
- 软件的可靠性
- 软件在所给条件下和规定时间内,能完成所要求的功能的性质(是贯穿整个阶段要考虑的问题)
- 方法 methodologies 完成软件开发任务的技术手段
- 什么是软件工程
- 软件工程的基本原理
- 用分阶段生命周期计划严格管理(六类计划)
- 项目概要计划
- 里程碑计划
- 项目控制计划
- 产品控制计划
- 验证计划
- 运行维护计划
- 坚持阶段评审
- 大部分错误时设计错误
- 软件质量保证工作不能等到编码结束后进行
- 实行严格的产品控制(与改动需求有关)
- 采用科学的产品控制技术 变动控制 基准配置管理
- 结果应能清楚地审查
- 开发小组人员应少而精
- 承认不断改进软件工程实践的必要性
- 用分阶段生命周期计划严格管理(六类计划)
- 什么是好的软件(没在书上找到 From PPT)
- 结构质量(开发人员)
- 代码可测试性
- 代码可维护性
- 代码可读性
- 代码效率:高效管理资源
- 代码安全:可预防常见威胁
- 功能质量(投资商)
- 软件按时交付
- 软件满足预算
- 可复用的开发过程,确保交付质量
- 过程质量(用户)
- 软件符合指定需求
- 软件几乎没有缺陷
- 软件性能正常
- 软件容易上手,操作方便
- 正确的软件:一个软件要能够满足用户的需求,为用户创造价值
- 正确运行的的软件:软件没有或者有很少缺陷,具有很强的扩展性、良好的性能以及较高的易用性等。
- 高质量的软件产品
- 做了用户想要它做的事情
- 正确有效地使用计算机资源
- 易于用户学习和使用
- 设计良好、代码良好且易于测试和维护
- 结构质量(开发人员)
幕布文档链接:软件工程概述 - 幕布