软件工程笔记
一. 概述
-
软件
-
软件工程学
-
软件工程中的常见问题
-
软件生存周期
-
职业和道德上责任
1. 软件
1.1 组成
由计算机程序,数据,文档组成
1.2 特点:
-
抽象性:就像某些分层模型,各层都是抽象出来进行描述,而不是真的实在存在。
-
无磨损性:导致利润不错
-
对计算机硬件依赖性:会有硬件成本
-
软件的手工开发方式
-
软件本身复杂性
-
软件的高成本
1.3 分类:
- 系统软件:操作系统、数据库管理系统、设备驱动程序等。
- 支撑软件:文本编辑程序、文件格式化程序、磁盘向磁带数据传输的程序、支持需求分析、设计、实现、测试和支持管理的软件。
- 应用软件:商业数据处理软件、工程与科学计算软件、计算机辅助设计/制造软件、系统仿真软件、智能产品嵌入软件、医疗、制药软件、办公自动化软件。
1.4 发展
- 程序设计阶段 — 50至60年代
- 程序系统阶段 — 60至70年代:开发模型,支持工具,开发方法的研究
- 软件工程阶段 — 80年代以后:面向对象,软件生产,软件复用,软件生产管理
1.5 软件危机
- 计算机更加强大
- 问题更复杂,工程更大
2. 软件工程
软件工程致力于专业化软件开发的理论、方法和工具研究。
- 方法Methods
- 工具Tools
- 过程Process
3. 软件工程中的常见问题
3.1 软工与计算机的区别:
- 计科:提供理论方法
- 软工:解决实际问题
- 两者有重叠有不同。计科提供理论基础,软工赋予实际意义。
3.2 软件过程
- 软件描述
- 软件开发
- 软件有效性验证
- 软件进化
3.3 软件过程模型
是从一特定的角度提出的软件过程的简化描述,如瀑布模型。
3.4 软件工程是系统工程的一部分
3.5 软件工程成本
-
60%的成本是开发成本, 40% 是测试成本. 对于定制软件, 软件进化成本会超过开发成本
-
软件开发成本是依赖于系统的开发方法、系统特性的要求
-
软件成本的分布依赖于所采用的开发模型
3.6 CASE是计算机辅助软件工程
3.7 属性
- 可维护性
- 可依赖性
- 有效性
- 可用性
4. 软件生存周期
-
制定计划(Planning):问题定义与可行性研究
-
需求分析和定义(Requirement Analysis and Definition)
-
软件设计( Software Design)
-
程序编写(Coding, Programming)
-
软件测试(Testing)
-
运行/维护(Running/Maintenance)
二. 基于计算机的系统工程
要点:
-
系统工程是一个复杂而又困难的过程,系统工程学包括很多学科的内容
-
系统总体特性是系统作为总体表现出来的特性,而不是任何部分所能表现出来的特性
- 系统体系结构模型一般都用方块图来表示,主要说明子系统极其之间的关系。
- 系统工程过程通常包括描述、设计、开发和集成
目录:
- 系统、系统工程
- 系统总体特性
- 系统及其环境
- 系统模型
- 系统工程过程
- 系统需求定义
- 系统设计
- 子系统开发
- 系统整合
- 系统安装
- 系统操作
- 系统进化
- 系统退役
- 系统获得
敏捷软件开发
- 敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
- 注重过程,just enough。
- 常见的敏捷开发:XP,scrum