软件安全-软件工程基础知识
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在整个软件维护阶段的全部工作量中,预防性维护只占很小的比例,而 完善性维护占了几乎一半的工作量
小结:软件开发活动的特点
需要多人参与的分阶段进行的工作量很大的智力活动 不仅是编程序,比编程更重要的是需求分析和软件设计 编程不但要熟悉程序语言,还需要熟悉运行平台,掌握编程
和开发工具 编程需要熟悉应用领域的业务知识 测试和编程同样重要 投入运行后仍需要提供大量的支持和服务 整个开发活动需要精心组织与管理
1.2 软件工程
1.2.1 软件开发活动 1.2.2 软件工程 1.2.3 软件工程的知识域
1.2.1 软件开发活动
14
软件开发活动的主要内容
问题 需求分析
设计 构造 测试 维护
用户需求
规格说明,可行性报告, 初步用户手册
结构设计,各模块的详 细设计说明,测试计划
需 求 分 析
软 件 设 计
1.0
3
1.0
0
0.25
4
2.0
1.0
0
5
0
2.0
1.0
6
0
2.0
0
7
2.0
0
0
8
0
0
2.0
9
0
0
0
测试用例的覆盖面要 大,但又要少而精, 防治遗漏!
软件产品测试的重要性
微软产品开发组的人员构成:
项目经理
开发人员
测试人员 开发人员/ 测试人员
Exchange 2000 25人 140人 350人
2: 5
1.2.2 软件工程
Quiz:
1 开发一个典型的软件项目大约需要多少个月?
2-Βιβλιοθήκη Baidu月
4-6月
8-12月
12-24月
2 包含多少行可执行语句的软件被认为是大型软件?
1000行
5000行
10000行
50000行
3 每年上千亿美元销售额的软件市场中,Office、IE之类的PC常用软件占 多少份额?
10%
例 Windows 2003
50 M
3000
Windows XP
50M
Windows Vista
70M
9000 x 6
18000
软件危机
软件产业滞后于应用 的需求和硬件的发展
硬件成本与软件开发、维护费用比例的变化
软件开发效率低、成 本高,进度和成本难 以控制
软件质量得不到保证
1955年
60%左右的软件项目不能按期完成 50%左右软件项目的费用超过预算 45%左右软件项目最终无法投入使用 29%左右软件项目没有交付软件 19%左右的软件项目必须返工才能使用
人员的合作、组织和管理
好的软件有哪些特点?
软件发展史
软件危机
软件需求的增长得不到满足; 软件开发的成本和进度无法控制; 软件质量难以保证; 软件不可维护或维护成度非常低; 软件成本不断提高; 软件开发生产率的提高赶不上硬件的发展和应用需求的增长。
为了消除软件危机,形成了软件工程的概念,开辟了 工程学的新兴领域——软件工程学。软件工程就是试 图用工程、科学和数学的原理与方法研制、维护计算 机软件的有关技术及管理方法。
软
产品
代码行 工作量(人年) 成本(百万)
件 Lotus1-2-3 Version 3.0
400k
263
22
产 品
Space Shuttle
25.6M
City Bank Teller machine 780k
Windows NT (beta)
3.8M
150
12 13.2
举 MS Word 2003
3.0M
设计错误
软件规模、工作量与成本
软
类别
件
微型 小型
规 中型
模 大型
甚大型
极大型
参加人数
1 1 2-5 5-20 100-1000 2000-5000
研制期限
1-4周 1-6周 1-2年 2-3年 4-5年 5-10年
产品规模(源代码行数)
约500行 约2000行 5000-50000行 5万-10万行 100万行 1000万行
概要设计说明书 详细设计说明书
从实现角度出发 自顶向下逐步细化 (stepwise refinement)
软件模块划分 算法设计 数据结构设计 用户界面设计
软件详细设计说明书的内容
Ⅰ. 引言 A. 目的 B. 背景 C. 定义 D. 参考资料
Ⅱ. 软件的体系结构 列出软件中的每个程序(包括每个模块和子程序) 的名称、标识符和它们之间的层次结构关系
适应性维护 为适应变化了的软硬件环境,需对软件做适当变更
完善(改进)性维护 为了满足用户新的业务需求、增强软件功能而需 要修改、扩充软件
预防性维护 为增强系统可靠性和安全性所采取的预防性措施
软件维护的重要性
在整个软件开发活动中,软件维护的工作量最大,其费用大约是软件开 发总成本的2/3左右
1 使用语言才能掌握语言 2 编程是计算机科学的“实验”手段 3 通过编程才能把计算机系统方方面面的概念联系在一起,理解
计算机的行为和特性。编程是理解抽象概念的有效途径 4 编程和软件开发仍然是大部分计算机专业及相关专业毕业生就
业岗位的主要工作; 5 在开发系统软件和数据处理类大型应用软件方面,计算机专业
务。一般通过API(应用程序接口)提供,如Windows系 统的API:Win32 SDK 和 MFC类库等) 编程和开发工具(集成开发环境;Delphi 、C++ Builder、 Visual Studio; Visual Studio.NET)
关于程序设计语言和编程训练
必须学好:C/C++ 、Java、… 等程序设计语言 一定要大量编写程序和开发软件,这是因为:
测试过程
软件配置
测试用例 测试数据
测试工具
测试
结果 找出错误 分析
排错
预期结果
出错率 可靠性
数据
分析
改正的 软件
预测的 可靠性
测试(Testing)是找出程序和设 计中的错误,其要求是:
有效数据结果正确 无效数据有预防措施
排错(Debugging)也叫调试,用 于消除程序中缺陷(bug):
找出出错的位置(定位) 分析出错原因并改正
Ⅲ. 程序1设计说明
A. 程序描述 B. 功能
E. 输出项
F. 算法
J. 存储分配 K. 注释设计
N. 尚未解决的问题
C. 性能
D. 输入项
H. 流程逻辑 I. 接口
L. 限制条件 M. 测试计划
Ⅳ. 程序2设计说明
A. 程序描述 B. 功能 C. 性能
D. 输入项
E. 输出项
F. 算法
H. 流程逻辑 I. 接口
第一章 软件工程基础知识
1.1 软件的定义 1.2 软件工程 1.3 软件生命周期
FAQ(关于软件工程)
什么是软件? 好的软件有那些特点? 什么是软件工程? 什么是软件过程? 什么是软件过程模型? 什么是软件工程方法? 什么是CASE(Computer Aided Software Engineering)? 软件工程和系统工程有什么区别? 软件工程面临的关键挑战是什么?
在循环的边界和运行边 界限内执行循环体
测试内部数据结构的有 效性。
测试方法:黑盒测试技术
黑盒测试(Black Box Testing) 也称功能测试:只关心程序运 行结果是否符合要求,不考虑程序内部的执行过程
例:求方程式ax2+bx+c=0的根
测试用例:
a
b
c
1
1.0
-2.0
-3.0
2
1.0
1.0
软 件 构 造
软 件 测
试
各模块代码和单元测试 报告,测试设计
各种测试报告
发布计划、培训计划及 教材、维护档案等
软件维护 软件开发费用的比例
1 需求分析
用户的需要 (needs)
使用用户的语言 (行业内的术语)
功能要求 性能要求 环境要求 可靠性要求 安全性要求 用户界面需求 资源使用需求 软件成本消耗 开发进度需求等
需求分析
全准 面确 理表 解达
对软件的需求 (requirements)
使用计算机术语, 比较严格的语言
需求规格说明 (specification)
初步用户手册 项目开发计划 可行性(风险)分析
软件需求说明书的内容
Ⅰ. 引言 A.背景 B.定义 C.参考资料 Ⅱ. 任务概述 A.目标 B.用户的特点 C.假定和约束
Windows 2000
约 250人 约 1700人 约 3200人
1:1. 9
项目经理
开发 工程师
测试工程师
嫦娥一号 卫星:100万行软件,测试软件达160万行!
5 软件维护
交付的 软件产品
软件维护
经过修改的 软件产品
软件维护内容:
使用中发现的问题 修改后的需求规格说明书
改正性维护 运行中发现了软件中的错误需要修正
……}
什么是程序(2/2)
程序设计语言具有良好、严格语法和语义 目前程序设计语言主要有以下几种类型
面向机器: 如汇编语言、机器语言等 面向过程: 如Fortran, Pascal, C等等 面向对象: 如Java等等 面向问题: 如结构化查询语言SQL等等
什么是文档
文档: 记录软件开发活动和阶段性成果、理解软件所 必需的阐述性资料
及相关专业毕业生应该也必须具有明显的优势。
4 软件测试
可执行的软件模块 集成后的软件成品
软件测试
经过测试和修 改的软件产品
测试说明书 测试工具 测试用例和测试数据
软件测试是分阶段进行的,它贯穿于软件开发的全过程:
单元测试(模块测试)
集成测试 确认测试
用户定制软件: 验收测试和安装测试 商品软件: 阿尔法测试和贝塔测试
测试方法:白盒测试技术
白盒测试也叫路径测试:
程序中所有语句必须执行一次以上,程序中每条路径都要
走到
N A>1 AND B=0
白盒测试 的内容
对程序模块的所有独立 执行路径至少测试一次
Y X=X/A
对所有的逻辑判定,取 “真”与取“假”的两种情况
都能至少测试一次。
N A=2 OR X>1
Y X=X+1
J. 存储分配 K. 注释设计 L. 限制条件 M. 测试计划
N. 尚未解决的问题
其他程序的设计说明····
3 软件构造
算法
设
计
数据结构 说
用户界面
明 书
软件构造
(程序设计)
可执行的软件模块, 集成后的软件成品
程序设计语言(如C,C++, JAVA, VB等) 软件运行平台(使用何种操作系统,向应用程序提供哪些服
1970年
1985年
Average cost overrun: 189% Time overrun: 222%
Projects re-started: 94%
Functionality delivered on average: 61%
1. 1 软件的定义
什么是软件 软件的特点 软件发展史 软件危机
什么是软件? (1/2)
书本上的定义 – Software is a set of items or objects that forms a
“configuration” that includes programs, documents, data, …… IEEE的定义
与计算机系统操作有关的程序和数据以及任何与之 相关的文档的集合。
可执行部分
不可执行部分
程序
文档2 数据 文档1
什么是程序(1/2)
程序: 由程序设计语言所描述的、能为计算机所识别、 理解和处理的语句序列
程序例子
Main( )
{ int i, j;
// 变量定义
char Str[10];
i = i + j ; // 语句说明
需求分析文档 软件设计文挡等
编写文档目的
促进对软件的开发,管理和维护; 便于各种人员(用户,开发人员)的交流
软件特点
不会老化 逻辑产品 (智力, 无形) 维护困难和复杂(完善, 纠错,…...) 生产只需复制 软件开发性质如成本、进度等难以估计 软件的开发更加依赖于开发人员的业务素质、智力、
25%
50%
75%
4 中等规模软件的开发期中每人每天平均开发多少行可执行语句?
<10行
10-50行
50-100行
>100行
5 开发过程中,平均每1000行可执行代码中大约会发现多少个错误?
5-10
10-20
50-60
100-150
6 由用户发现的软件错误大部分是什么原因引起的?
编程错误
需求理解有误
软件集成
Ⅲ. 需求规定
A.对功能的规定 B.对性能的规定 (ⅰ精度 ⅱ时间特性要求 ⅲ 灵活性) C. 输入输出要求 D.数据管理能力要求 E.故障处理要求 F.其它专门要求
Ⅳ. 运行环境规定 A.设备 B. 支撑软件 C. 接口 D. 控制
2 软件设计
需求规格说明 (specification)
软件设计
– Software is computer programs, procedures, and possibly associated documentation and data pertaining to the operation of a computer system.
什么是软件? (2/2)
小结:软件开发活动的特点
需要多人参与的分阶段进行的工作量很大的智力活动 不仅是编程序,比编程更重要的是需求分析和软件设计 编程不但要熟悉程序语言,还需要熟悉运行平台,掌握编程
和开发工具 编程需要熟悉应用领域的业务知识 测试和编程同样重要 投入运行后仍需要提供大量的支持和服务 整个开发活动需要精心组织与管理
1.2 软件工程
1.2.1 软件开发活动 1.2.2 软件工程 1.2.3 软件工程的知识域
1.2.1 软件开发活动
14
软件开发活动的主要内容
问题 需求分析
设计 构造 测试 维护
用户需求
规格说明,可行性报告, 初步用户手册
结构设计,各模块的详 细设计说明,测试计划
需 求 分 析
软 件 设 计
1.0
3
1.0
0
0.25
4
2.0
1.0
0
5
0
2.0
1.0
6
0
2.0
0
7
2.0
0
0
8
0
0
2.0
9
0
0
0
测试用例的覆盖面要 大,但又要少而精, 防治遗漏!
软件产品测试的重要性
微软产品开发组的人员构成:
项目经理
开发人员
测试人员 开发人员/ 测试人员
Exchange 2000 25人 140人 350人
2: 5
1.2.2 软件工程
Quiz:
1 开发一个典型的软件项目大约需要多少个月?
2-Βιβλιοθήκη Baidu月
4-6月
8-12月
12-24月
2 包含多少行可执行语句的软件被认为是大型软件?
1000行
5000行
10000行
50000行
3 每年上千亿美元销售额的软件市场中,Office、IE之类的PC常用软件占 多少份额?
10%
例 Windows 2003
50 M
3000
Windows XP
50M
Windows Vista
70M
9000 x 6
18000
软件危机
软件产业滞后于应用 的需求和硬件的发展
硬件成本与软件开发、维护费用比例的变化
软件开发效率低、成 本高,进度和成本难 以控制
软件质量得不到保证
1955年
60%左右的软件项目不能按期完成 50%左右软件项目的费用超过预算 45%左右软件项目最终无法投入使用 29%左右软件项目没有交付软件 19%左右的软件项目必须返工才能使用
人员的合作、组织和管理
好的软件有哪些特点?
软件发展史
软件危机
软件需求的增长得不到满足; 软件开发的成本和进度无法控制; 软件质量难以保证; 软件不可维护或维护成度非常低; 软件成本不断提高; 软件开发生产率的提高赶不上硬件的发展和应用需求的增长。
为了消除软件危机,形成了软件工程的概念,开辟了 工程学的新兴领域——软件工程学。软件工程就是试 图用工程、科学和数学的原理与方法研制、维护计算 机软件的有关技术及管理方法。
软
产品
代码行 工作量(人年) 成本(百万)
件 Lotus1-2-3 Version 3.0
400k
263
22
产 品
Space Shuttle
25.6M
City Bank Teller machine 780k
Windows NT (beta)
3.8M
150
12 13.2
举 MS Word 2003
3.0M
设计错误
软件规模、工作量与成本
软
类别
件
微型 小型
规 中型
模 大型
甚大型
极大型
参加人数
1 1 2-5 5-20 100-1000 2000-5000
研制期限
1-4周 1-6周 1-2年 2-3年 4-5年 5-10年
产品规模(源代码行数)
约500行 约2000行 5000-50000行 5万-10万行 100万行 1000万行
概要设计说明书 详细设计说明书
从实现角度出发 自顶向下逐步细化 (stepwise refinement)
软件模块划分 算法设计 数据结构设计 用户界面设计
软件详细设计说明书的内容
Ⅰ. 引言 A. 目的 B. 背景 C. 定义 D. 参考资料
Ⅱ. 软件的体系结构 列出软件中的每个程序(包括每个模块和子程序) 的名称、标识符和它们之间的层次结构关系
适应性维护 为适应变化了的软硬件环境,需对软件做适当变更
完善(改进)性维护 为了满足用户新的业务需求、增强软件功能而需 要修改、扩充软件
预防性维护 为增强系统可靠性和安全性所采取的预防性措施
软件维护的重要性
在整个软件开发活动中,软件维护的工作量最大,其费用大约是软件开 发总成本的2/3左右
1 使用语言才能掌握语言 2 编程是计算机科学的“实验”手段 3 通过编程才能把计算机系统方方面面的概念联系在一起,理解
计算机的行为和特性。编程是理解抽象概念的有效途径 4 编程和软件开发仍然是大部分计算机专业及相关专业毕业生就
业岗位的主要工作; 5 在开发系统软件和数据处理类大型应用软件方面,计算机专业
务。一般通过API(应用程序接口)提供,如Windows系 统的API:Win32 SDK 和 MFC类库等) 编程和开发工具(集成开发环境;Delphi 、C++ Builder、 Visual Studio; Visual Studio.NET)
关于程序设计语言和编程训练
必须学好:C/C++ 、Java、… 等程序设计语言 一定要大量编写程序和开发软件,这是因为:
测试过程
软件配置
测试用例 测试数据
测试工具
测试
结果 找出错误 分析
排错
预期结果
出错率 可靠性
数据
分析
改正的 软件
预测的 可靠性
测试(Testing)是找出程序和设 计中的错误,其要求是:
有效数据结果正确 无效数据有预防措施
排错(Debugging)也叫调试,用 于消除程序中缺陷(bug):
找出出错的位置(定位) 分析出错原因并改正
Ⅲ. 程序1设计说明
A. 程序描述 B. 功能
E. 输出项
F. 算法
J. 存储分配 K. 注释设计
N. 尚未解决的问题
C. 性能
D. 输入项
H. 流程逻辑 I. 接口
L. 限制条件 M. 测试计划
Ⅳ. 程序2设计说明
A. 程序描述 B. 功能 C. 性能
D. 输入项
E. 输出项
F. 算法
H. 流程逻辑 I. 接口
第一章 软件工程基础知识
1.1 软件的定义 1.2 软件工程 1.3 软件生命周期
FAQ(关于软件工程)
什么是软件? 好的软件有那些特点? 什么是软件工程? 什么是软件过程? 什么是软件过程模型? 什么是软件工程方法? 什么是CASE(Computer Aided Software Engineering)? 软件工程和系统工程有什么区别? 软件工程面临的关键挑战是什么?
在循环的边界和运行边 界限内执行循环体
测试内部数据结构的有 效性。
测试方法:黑盒测试技术
黑盒测试(Black Box Testing) 也称功能测试:只关心程序运 行结果是否符合要求,不考虑程序内部的执行过程
例:求方程式ax2+bx+c=0的根
测试用例:
a
b
c
1
1.0
-2.0
-3.0
2
1.0
1.0
软 件 构 造
软 件 测
试
各模块代码和单元测试 报告,测试设计
各种测试报告
发布计划、培训计划及 教材、维护档案等
软件维护 软件开发费用的比例
1 需求分析
用户的需要 (needs)
使用用户的语言 (行业内的术语)
功能要求 性能要求 环境要求 可靠性要求 安全性要求 用户界面需求 资源使用需求 软件成本消耗 开发进度需求等
需求分析
全准 面确 理表 解达
对软件的需求 (requirements)
使用计算机术语, 比较严格的语言
需求规格说明 (specification)
初步用户手册 项目开发计划 可行性(风险)分析
软件需求说明书的内容
Ⅰ. 引言 A.背景 B.定义 C.参考资料 Ⅱ. 任务概述 A.目标 B.用户的特点 C.假定和约束
Windows 2000
约 250人 约 1700人 约 3200人
1:1. 9
项目经理
开发 工程师
测试工程师
嫦娥一号 卫星:100万行软件,测试软件达160万行!
5 软件维护
交付的 软件产品
软件维护
经过修改的 软件产品
软件维护内容:
使用中发现的问题 修改后的需求规格说明书
改正性维护 运行中发现了软件中的错误需要修正
……}
什么是程序(2/2)
程序设计语言具有良好、严格语法和语义 目前程序设计语言主要有以下几种类型
面向机器: 如汇编语言、机器语言等 面向过程: 如Fortran, Pascal, C等等 面向对象: 如Java等等 面向问题: 如结构化查询语言SQL等等
什么是文档
文档: 记录软件开发活动和阶段性成果、理解软件所 必需的阐述性资料
及相关专业毕业生应该也必须具有明显的优势。
4 软件测试
可执行的软件模块 集成后的软件成品
软件测试
经过测试和修 改的软件产品
测试说明书 测试工具 测试用例和测试数据
软件测试是分阶段进行的,它贯穿于软件开发的全过程:
单元测试(模块测试)
集成测试 确认测试
用户定制软件: 验收测试和安装测试 商品软件: 阿尔法测试和贝塔测试
测试方法:白盒测试技术
白盒测试也叫路径测试:
程序中所有语句必须执行一次以上,程序中每条路径都要
走到
N A>1 AND B=0
白盒测试 的内容
对程序模块的所有独立 执行路径至少测试一次
Y X=X/A
对所有的逻辑判定,取 “真”与取“假”的两种情况
都能至少测试一次。
N A=2 OR X>1
Y X=X+1
J. 存储分配 K. 注释设计 L. 限制条件 M. 测试计划
N. 尚未解决的问题
其他程序的设计说明····
3 软件构造
算法
设
计
数据结构 说
用户界面
明 书
软件构造
(程序设计)
可执行的软件模块, 集成后的软件成品
程序设计语言(如C,C++, JAVA, VB等) 软件运行平台(使用何种操作系统,向应用程序提供哪些服
1970年
1985年
Average cost overrun: 189% Time overrun: 222%
Projects re-started: 94%
Functionality delivered on average: 61%
1. 1 软件的定义
什么是软件 软件的特点 软件发展史 软件危机
什么是软件? (1/2)
书本上的定义 – Software is a set of items or objects that forms a
“configuration” that includes programs, documents, data, …… IEEE的定义
与计算机系统操作有关的程序和数据以及任何与之 相关的文档的集合。
可执行部分
不可执行部分
程序
文档2 数据 文档1
什么是程序(1/2)
程序: 由程序设计语言所描述的、能为计算机所识别、 理解和处理的语句序列
程序例子
Main( )
{ int i, j;
// 变量定义
char Str[10];
i = i + j ; // 语句说明
需求分析文档 软件设计文挡等
编写文档目的
促进对软件的开发,管理和维护; 便于各种人员(用户,开发人员)的交流
软件特点
不会老化 逻辑产品 (智力, 无形) 维护困难和复杂(完善, 纠错,…...) 生产只需复制 软件开发性质如成本、进度等难以估计 软件的开发更加依赖于开发人员的业务素质、智力、
25%
50%
75%
4 中等规模软件的开发期中每人每天平均开发多少行可执行语句?
<10行
10-50行
50-100行
>100行
5 开发过程中,平均每1000行可执行代码中大约会发现多少个错误?
5-10
10-20
50-60
100-150
6 由用户发现的软件错误大部分是什么原因引起的?
编程错误
需求理解有误
软件集成
Ⅲ. 需求规定
A.对功能的规定 B.对性能的规定 (ⅰ精度 ⅱ时间特性要求 ⅲ 灵活性) C. 输入输出要求 D.数据管理能力要求 E.故障处理要求 F.其它专门要求
Ⅳ. 运行环境规定 A.设备 B. 支撑软件 C. 接口 D. 控制
2 软件设计
需求规格说明 (specification)
软件设计
– Software is computer programs, procedures, and possibly associated documentation and data pertaining to the operation of a computer system.
什么是软件? (2/2)