一、软件工程产生背景
1.1 软件危机的产生
- 案例:IBM360、Ariane 5
- 1960年代,软件开发和维护遇到一系列问题
二、软件工程基本内涵
2.1 软件工程的诞生
1968年,NATO科技委出资召开会议,提出软件工程概念
2.2 何为软件工程
1)将系统的、规范的、可量化的方法应用于软件的开发运行和维护的过程;以及上述方法的研究
2)软件工程对软件开发的新认识
- 软件是产品
- 软件开发是一项工程
- 要按工程化方法来组织软件生产
3)软件开发方式的改变
个体作坊行为——基于团队的协同开发
2.3 软件工程的三要素
1)过程:从管理的视角,回答软件开发、运行和维护需要开展哪些工作、按照什么样的步骤和次序来开展工作
2)方法学:从技术的视角,回答软件开发、运行和维护如何做的问题
3)工具:从工具辅助的视角,主要回答如何借助工具来辅助软件开发、运行和维护的问题
2.4 软件工程原则
1)抽象和建模
- 抽象:将要素提取,不关心的要素扔掉,形成软件要素
- 建模:基于特定的抽象,借助于建模语言,建立起软件模型
2)模块化
- 将软件系统的功能分解和实现为若干模块,每个模块具有独立的功能,模块之间通过接口进行调用和访问
- 模块内部高内聚模块间松耦合
3)软件重用
- 在开发过程中尽量利用已有的软件资源和财产
- 努力开发出可被再次重用的软件资源
4)信息隐藏
- 模块内部信息对外不可见或不可访问
- 模块设计时只对外提供接口
5)关注点分离
- 将若干性质不同的关注点分离开来,以便在以后的开发活动中进行针对
- 软件系统具有多面性的特点(如软件要完成的动作,既有高层的需求模型,也有底层的实现模型)
- 使每一项开发活动聚焦于某个关注点,便于整合观点
6)分而治之
- 对复杂软件进行分解
- 整合子系统问题
7)双向追踪
- 当某个软件制品发生变化时,追踪这种变化对那些软件制品产生影响,进而指导开发和维护,(正向追踪);追踪产生这种变化的来源,明确变化的原因(反向追踪)。
8)工具辅助
- 利用软件工具来辅助软件开发和维护
- 借助计算机工具来辅助软件开发和维护
三、软件工程发展历程
(软件工程发展历程图)
1)1950—1960年代:
- 软件系统简单,计算机软件于硬件结合紧密
- 程序代码“精雕细琢”
- 出现黑客文化
- 出现高级程序语言
- 软件危机
2)1970年代
- 主机计算能力得到提升
- 程序设计语言和程序设计方法学成为研究热点
- 产生了软件工程新技术
3)1980年代
- 产生了面向对象程序设计技术
- 提出了SW-CMM(软件能力成熟度模型)
- 软件重用被视为是解决软件危机的一条现实可行途径
- CASE工具和环境的研制和使用成为热点
- 软件工程标准化工作活跃
4)1990年代
- OOP技术趋于成熟,面向对象分析和设计方法学的研究非常活跃(制定了UML)
- 软构件技术快速发展,萌生了软件体系结构和软件设计模式的研究与实践
- 开源软件以及技术出现
5)2000年代
- 产生了网构软件技术、自适应软件工程、可信软件技术等
- 群体化软件开发技术广泛应用
- 敏捷开发方法在软件开发中的应用
- 软件可信技术的研究
6)2010年代
- 信息系统的人机物融合趋势日趋突出
- 越来越多人参与开源软件实践,形成庞大的开源软件生态
- DevOps方法广泛应用
- 智能化软件开发技术活跃
7)发展的技术特点:
- 软件抽象层次越来越高
- 软件重用粒度越来越大
- 软件开发理念不断变化
四、软件工程教育
4.1 软件工程道德规范
八项原则:
- 公众:公众利益一致
- 客户和雇主:满足客户最大利益
- 产品:达到行业高标准
- 判断:具有独立职业判断
- 管理:符合道德标准
- 专业:弘扬职业正义
- 同行:平等对待同行
- 自身:终身不断学习