当前课程知识点:软件工程 > 第1章 初识软件工程 > 1.3 软件工程的产生与发展 > 讲授视频
前面讲过
软件具有复杂性
一致性 可变性和不可见性
这些特性使软件开发
其管理变得很难控制
最终的产品质量也难以保证
美国Standish集团
是一个专门跟踪调查
软件项目的研究机构
这幅图显示了该机构
在1994-2010年期间
对软件开发项目的调查统计结果
研究数据表明
软件项目的平均成功率
大概在30%左右
这里成功的含义是指
在计划的时间和预算内
实现项目的目标
大概有一半左右的项目
超出预算和最后期限
或者存在这样那样的缺陷
另外还有20%左右的项目
彻底失败了
即使投入了极大努力
最终完成的软件项目
所开发的软件也总是存在着
错误多 性能低 不可靠
不安全等质量问题
有的甚至造成了严重的后果
下面我们看几个
软件失败的典型事例
1996年6月4日
欧洲航天局Ariane 5火箭
在发射37秒之后
偏离了它的飞行路径
突然发生爆炸
火箭上载有
价值数亿美元的通信卫星
事后的调查显示
导致事故的原因
是程序中试图将64位浮点数
转化成16位整数的时候
产生了溢出
而系统又缺乏
对数据溢出的错误处理程序
这段程序是开发人员
复用Ariane 4火箭的一段程序
那Ariane 4火箭
为什么没有出现问题呢
主要原因在于
Ariane 5火箭
比Ariane 4的速度高出近5倍
这样在计算时
超出了一个16位数的范围
发生了溢出
显然开发人员
在设计Ariane 5火箭的时候
只是简单地重用了这部分程序
并没有检查它所基于的假设
Windows Vista系统
是曾经被微软
寄予厚望的一个桌面操作系统
也是微软历史上最艰难 最曲折
开发时间最长的一个项目
这个系统从2001年开始研发
整个过程历时5年
耗资数十亿美元
代码规模超过5000万行
由于系统过于庞杂
给整个开发带来了很大的困难
很多的时间都用在了
互相沟通和重新决策上
应该在2003年面世的Vista系统
一再地推迟
最后在取消了一些高级功能之后
于2006年11月正式发布
即使这样
Vista系统在面世之后
仍然暴露出
运行效率低 兼容性差
频繁死机等严重缺陷
可以说这是一款失败的软件产品
那么国内开发的软件系统
情况又如何呢
我们大家可能都在
12306网站上买过火车票
这个系统历时两年研发成功
耗资3亿元人民币
于2011年6月投入使用
在2012年春运期间
一天网站点击量超过14亿次
系统出现了网站崩溃
登录缓慢 无法支付
扣钱不出票等严重的问题
当年在中秋和“十一”黄金周
网站的日点击量又创新高
发售客票超过当年的春运
系统继续出现网络拥堵
重复排队等现象
另外在2014年春运期间
由于网站对身份证信息缺乏审核
出现了用虚假身份证
可以直接购票的现象
同时网站还曝出大规模串号
购票日期穿越等漏洞
显然 软件开发一直面临着诸多的挑战
主要表现在以下方面
软件产品的交付质量难以保证
许多功能不是用户需要的
用户使用的时候
出现很多Bug
由于客户需求的不确定性
和持续的变化
给整个开发过程带来了不可控
开发团队专注于技术
忽视对风险的管理
从而造成了整个开发成本的超支
另外
如何提升团队的能力和效率
一直是一个难题
古人云 诸事有道
软件之道何在
软件工程就是致力于
探索软件开发问题的解决之道
1968年北大西洋公约组织
在德国的一个小镇召开国际会议
首次提出了
“软件工程”这个术语
这也标志着一个新学科的开始
当时的会议报告中这样写道
我们特意选择‘软件工程’
这个颇具争议性的词
是为了暗示这样一种意见
软件的生产
有必要建立在某些理论基础
和实践指导之上
在工程学的
某些成效卓著的分支中
这些理论基础和实践指导
早已成为了一种传统
软件工程的发展
大概经历了四个阶段
在1968年以前
都是属于软件工程的史前阶段
在这个时期
没有什么工程化的开发方法可循
更多的是个人作坊式的开发
于是20世纪60年代末
爆发了软件危机
从1968年开始
软件工程开始了一个新的时期
一直到20世纪80年代末
瀑布模型
成为软件开发的经典模型
整个软件开发过程
被划分成需求 设计 编码
测试等不同阶段
这些阶段
也是按照线性的方式执行的
从1983-1995年
人们开始意识到过程质量
对产品质量的重大影响
这个时期面向对象的方法
和过程改进运动逐渐盛行
提出了
CMM/ISO9000/SPICE等
质量标准体系
从20世纪90年代至今
互联网技术和应用迅速发展
为了应对需求变化
和快速交付的需要
人们开始尝试一种新型的
敏捷开发方法
这种方法采用迭代
和增量的开发过程
强调更紧密的团队协作
目前 敏捷开发方法
已经广泛地应用于软件企业之中
给软件行业带来了巨大的变化
今天
软件工程已经成为
现代软件产业一个关键的技术
并且正在向成熟发展
在未来对网络时代的软件开发
将有更大的推动力
-1.1 软件无处不在
--讲课视频
-1.2 软件的本质特性
--讲授视频
-1.3 软件工程的产生与发展
--讲授视频
-1.4 软件工程的基本概念
--讲授视频
-1.5 软件质量实现
--讲授视频
-1.6 业界人士谈软件工程
-测验题--作业
-讨论题
--讨论题
-作业题
--第一张 作业题
-2.1 编程过程与规范
--讲课视频
-2.2 良好的编程实践
--讲课视频
-2.3 Python集成开发环境
--讲课视频
-2.4 代码静态检查
--讲课视频
-2.5 代码性能分析
--讲课视频
-2.6 结对编程实践
--讲课视频
-2.7 刘贺谈软件工程
--讲课视频
--讨论
-测验题--作业
-作业题
--第二章 作业题
-3.1 单元测试概述
--讲课视频
-3.2 黑盒测试方法
--黑盒测试方法
-3.3 白盒测试方法
--基本概念
--代码覆盖标准
--基本路径测试
-3.4 单元测试工具
--单元测试工具
--html
-测验题--作业
-作业题
--第三章 作业题
--作业题附件
-4.1 软件过程
--讲课视频
-4.2 软件过程模型
--讲课视频
-4.3 敏捷开发过程
--讲课视频
-4.4 微软公司开发过程
--邹欣经理自我介绍
--微软开发过程之一
--微软开发过程之二
-测验题--作业
-5.1 团队组织与管理
--讲课视频
-5.2 项目沟通管理
--讲课视频
-5.3 软件项目计划
--讲课视频
-5.4 软件项目估算
--讲课视频
-测验题--作业
-讨论题
--讨论
-6.1 敏捷开发之Scrum
-- 敏捷开发之Scrum
--html
-6.2 用户故事与估算
--讲课视频
-6.3 团队协作工具Tower
-6.4 配置管理
--讲课视频
-6.5 配置管理工具Git
--讲课视频
-测验题--作业
-作业题--作业
-7.1 需求工程师
--讲课视频
-7.2 需求定义
--讲课视频
-7.3 需求的类型
--讲课视频
--讲课视频(2)
-7.4 需求工程过程
--讲课视频
-7.5 需求的主要来源
--讲课视频
-7.6 需求获取技术
--讲课视频
--讲课视频二
--讲课视频三
-7.7 撰写需求文档
--讲课视频
-测验题--作业
-讨论题
--讨论
-8.1 用例建模概念
--讲课视频
-8.2 用例建模过程
--讲课视频
-8.3 用例建模精讲
--讲课视频
-8.4 建模工具介绍
--讲课视频
-8.5 微信抢票应用案例
--讲课视频
-测验题--作业
-讨论题
--讨论
-9.1 面向对象分析
--讲课视频
-9.2 CRC卡片分拣法
--讲课视频-1
--讲课视频-2
-9.3 面向对象设计
--讲课视频-1
--讲课视频-2
-9.4 类图建模
--讲课视频-1
--讲课视频-2
-第9章 面向对象分析与设计--测验题
-讨论题
--讨论
-10.1 顺序图概念
--讲课视频
-10.2 顺序图建模
--讲课视频
-10.3 顺序图风格
--讲义视频
-10.4 状态建模
--讲课视频
-10.5 状态图
--讲课视频
-10.6 状态图精讲
--讲义视频
-测验题--作业
-讨论题
--讨论
-11.1 软件体系结构概念
--讲授视频
-11.2 软件设计原则
--讲授视频
-11.3 软件体系结构风格(一)
--讲授视频
-11.4 软件体系结构风格(二)
--讲授视频
-11.5 软件体系结构风格(三)
--讲授视频
-11.6 软件设计过程
--讲授视频
-11.7 Web系统架构设计
--讲授视频
-11.8 数据库选择策略
--讲授视频
-测验题--作业
-作业题
--html
--html
--html
-作业题--作业
-12.1 交互设计概述
--讲授视频
-12.2 交互设计目标
--讲授视频
-12.3 GUI设计原则
--讲课视频
-12.4 KLM效率模型
--Video
-12.5 Fitts定律
--讲授视频
-12.6 交互设计过程
--讲授视频
-测验题--作业
-13.1 软件测试概念
--讲课视频
-13.2 软件测试类型
--讲课视频
-13.3 软件功能测试
--讲课视频
-13.4 软件性能测试
--讲课视频
-测验题--作业
-14.1 软件部署与交付
--讲课视频
-14.2 软件演化与维护
--讲课视频
-测验题--作业
-第一部分:基础知识
-第二部分:编程与测试(选做)