当前课程知识点:软件工程 >  第1章 初识软件工程  >  1.2 软件的本质特性 >  讲授视频

返回《软件工程》慕课在线视频课程列表

讲授视频在线视频

下一节:讲授视频

返回《软件工程》慕课在线视频列表

讲授视频课程教案、知识点、字幕

现在的世界正在进入一个

“软件无处不在”的时代

我们每天的生活

时刻都离不开这样那样的软件

那么什么是软件呢

这是一个大学生开发的微信应用

在这个应用中

学生可以查看演出的相关信息

订票并且选择座位

最后系统会自动生成一个

带有二维码的电子票

在用户来看

这个软件就是一系列

实现各种功能的图形化界面

但是在计算机内部

是如何执行的呢

首先 计算机内部

实际运行着一些程序代码

这些代码负责

向计算机发出动作指令

实现查看活动 订票选座

以及生成电子票等不同的功能

其次

在计算机运行这些程序的过程中

还需要操作诸如学生 活动

和电子票等数据

另外

为了后续的维护和开发

以及方便用户使用

可能还需要一些描述技术

实现细节的开发文档

和系统使用的用户文档

可以说

软件是由程序

数据和文档构成的

其中程序是

计算机可以接受的一系列指令

运行的时候

可以提供所要求的功能和性能

数据是使程序

能够适当地操作信息的

一些数据结构

文档则是描述程序的研制过程

方法和使用的图文资料

现在思考一个问题

程序 数据和文档

是否代表了软件的真正含义呢

我们从前面的微信应用可以看出

软件的行为

只有通过运行才能呈现出来

也就是说

在程序运行的过程中

才能观察到软件的功能和性能

而软件提供的信息和服务

又融合了买票

这个业务的领域知识

从这个方面来看

软件更像是嵌入式的数字化知识

那么这种知识载体的特征

会对软件开发带来什么影响呢

飞机和软件都是人类的创造物

飞机是有形的物体

一架大型客机

由数百万个单独的部件组成

需要上千人组装

但是通常

都能够按时按预算交付使用

软件是人类思维的创造物

微软于1989年11月

发布的Word1.0版本

这个软件大概有

25万行的源代码

但是开发软件

却花费了整整55个人年

一再地推迟交付

比原计划晚了4年

直观上来看

建造大型的飞机

似乎要比开发一个

简单地Word软件要复杂得多

但实际情况却大相径庭

我们不禁要问

开发软件和建造客机

到底有什么本质性的区别

Fred Brooks教授

是软件工程领域

非常有影响力的人物

他曾经担任

IBM OS360系统的项目经理

由于在计算机体系结构

操作系统和软件工程方面的

杰出贡献

于1999年获得了图灵奖

Brooks教授在1987年

发表了一篇题为

“没有银弹”的文章

在这篇文章中指出

软件具有复杂性 一致性 可变性

和不可见性等固有的内在特性

这是造成软件

开发困难的根本原因

软件是人类思维

和智能的一种延伸

它比任何以往人类的创造物

都要复杂得多

这是一个Linux内核的

复杂网络图

它的节点代表函数

它的边代表函数的调用

但是这个图形

也仅仅表示的是

函数之间的静态调用

而在动态运行过程中

系统会呈现出更为复杂的状态

很难用图形进行描述

今天

我们已经进入云计算时代

在互联网的集群环境下

系统规模更大更复杂

像Google的搜索引擎

亚马逊的云计算中心

以及阿里云等

其规模都超过了百万台服务器

可以这样说

软件是人类创造的最复杂的物体

这种复杂性

会给软件开发管理和质量保证

带来很多困难

软件开发的另一个特点

是人为设计带来的复杂性

软件必须遵从人为的惯例

并适应已有的技术和系统

随着接口的不同而改变

但是这些变化

都是人为设计的结果

可以用 随心所欲 毫无规则来形容

就拿刚才的微信应用来说

用户使用不同的终端

发出服务请求

微信服务器接收请求

并把它们转发给主服务器

主服务器

处理响应要求很高的抢票请求

把其他的请求

转发给辅助服务器

当然在整个的过程里

系统还有可能和一些身份认证等

其他系统进行交互

从这个应用来看

它需要通过与微信系统

身份验证系统等打交道

因此

就必须遵从这些系统定义的接口

而这些接口

都是软件工程师人为设计的

任何接口的变化

都会带来微信应用的修改

所以说

要保持与其他系统的接口一致性

也会造成软件设计的复杂性

我们经常听到这样一句话

这个世界在变

唯一不变的是一直在变

我们通过微信的演化历史

来看一下软件的可变性

微信开发

是在2010年11月正式立项

2011年1月和3月

分别发布了1.0和1.2版本

实现文字短信和图片分享功能

但是当时市场反应冷淡

2011年5月

推出语音通信功能

发布了2.0版本

微信开始快速地流行和传播

2011年10月

提供了“查看附近人”的功能

这个功能

也成为微信用户增长的

一个爆发点

2012年4月

微信发布4.0版本

先后推出了“朋友圈”

视频通话以及微信公众平台

开始建立手机上的熟人社交圈

2013年8月以后

微信5.0及其后续版本

提供了如支付 表情 游戏等

一系列贴近用户生活的服务

并且专门开辟了服务号

打造了一种更具体验效果的

移动互联网的生活方式

这些事例告诉我们

软件只要是使用

就会一直在变

而这个改变是随需而变

相对于建筑和飞机等

工程制品来说

软件的变更似乎更加频繁

这也许是因为建筑和飞机

修改成本太高所致

人们总是以为软件很容易修改

但是却忽视了修改带来的副作用

理想的情况下

随着软件的使用

其故障率会逐渐降低

逐渐达到一个稳定地质量

但是软件在不断变化的

每一次的修改

都会造成故障率的升高

同时也可能给软件的结构

带来破坏

不断的修改

最终可能导致软件发生退化

从而结束其生命周期

尽管如此

成功的软件都是会发生演化的

没有任何变化的软件

一定是没有用的

虽然软件的可变性

给开发带来了很多难题

但是

也给软件本身带来了生命力

所以

我们要用积极地态度

和有效地方法

来控制变更

使软件在演化过程中保证高质量

软件还有一个特性

就是“看不见”“摸不着”

像建筑 飞机这些有形的物体

我们可以用平面的图形

抽象出其结构形态

但是软件是逻辑的

没有空间的形体特征

因此缺少合适的几何表达方式

开发人员

在接收到用户需求的时候

整个开发的过程

只能看到源代码

而代码并不是软件本身

因此在开发完成之前

很难看到软件是如何执行的

这种不可见性

不仅限制了软件的设计过程

同时严重地阻碍了

相互之间的人与人的交流

从而对开发过程的管理

造成很大困难

Brooks教授

在著名的《人月神话》一书中

把软件人员形容成

“皇帝的新衣”故事里的裁缝

开发人员一直在编织

却看不到编织的织物

最后也许是编织出来

一堆无用的废物

或者什么也没有做出来

通过前面的分析我们可以看到

复杂性 一致性 可变性

和不可见性

是软件的本质特性

这些特性使软件开发的过程

变得难以控制

开发团队

如同在焦油坑里挣扎的巨兽

挣扎得越猛烈

焦油纠缠得越紧

最后有可能沉没到坑底

因此

我们需要寻找解决问题的

有效方法

从而保证软件开发过程的

高效 有序和可控

软件工程课程列表:

第1章 初识软件工程

-1.1 软件无处不在

--讲课视频

-1.2 软件的本质特性

--讲授视频

-1.3 软件工程的产生与发展

--讲授视频

-1.4 软件工程的基本概念

--讲授视频

-1.5 软件质量实现

--讲授视频

-1.6 业界人士谈软件工程

--海芯科技创始人施侃乐访谈

-测验题--作业

-讨论题

--讨论题

-作业题

--第一张 作业题

第2章 编写高质量代码

-2.1 编程过程与规范

--讲课视频

-2.2 良好的编程实践

--讲课视频

-2.3 Python集成开发环境

--讲课视频

-2.4 代码静态检查

--讲课视频

-2.5 代码性能分析

--讲课视频

-2.6 结对编程实践

--讲课视频

-2.7 刘贺谈软件工程

--讲课视频

--讨论

-测验题--作业

-作业题

--第二章 作业题

第3章 单元测试

-3.1 单元测试概述

--讲课视频

-3.2 黑盒测试方法

--黑盒测试方法

-3.3 白盒测试方法

--基本概念

--代码覆盖标准

--基本路径测试

-3.4 单元测试工具

--单元测试工具

--html

-测验题--作业

-作业题

--第三章 作业题

--作业题附件

第4章 软件开发过程

-4.1 软件过程

--讲课视频

-4.2 软件过程模型

--讲课视频

-4.3 敏捷开发过程

--讲课视频

-4.4 微软公司开发过程

--邹欣经理自我介绍

--微软开发过程之一

--微软开发过程之二

-测验题--作业

第5章 团队开发管理

-5.1 团队组织与管理

--讲课视频

-5.2 项目沟通管理

--讲课视频

-5.3 软件项目计划

--讲课视频

-5.4 软件项目估算

--讲课视频

-测验题--作业

-讨论题

--讨论

第6章 敏捷开发与配置管理

-6.1 敏捷开发之Scrum

-- 敏捷开发之Scrum

--html

-6.2 用户故事与估算

--讲课视频

-6.3 团队协作工具Tower

--Tower工具介绍(1)

--Tower工具介绍(2)

-6.4 配置管理

--讲课视频

-6.5 配置管理工具Git

--讲课视频

-测验题--作业

-作业题--作业

第7章 需求获取

-7.1 需求工程师

--讲课视频

-7.2 需求定义

--讲课视频

-7.3 需求的类型

--讲课视频

--讲课视频(2)

-7.4 需求工程过程

--讲课视频

-7.5 需求的主要来源

--讲课视频

-7.6 需求获取技术

--讲课视频

--讲课视频二

--讲课视频三

-7.7 撰写需求文档

--讲课视频

-测验题--作业

-讨论题

--讨论

第8章 用例建模

-8.1 用例建模概念

--讲课视频

-8.2 用例建模过程

--讲课视频

-8.3 用例建模精讲

--讲课视频

-8.4 建模工具介绍

--讲课视频

-8.5 微信抢票应用案例

--讲课视频

-测验题--作业

-讨论题

--讨论

第9章 面向对象分析与设计

-9.1 面向对象分析

--讲课视频

-9.2 CRC卡片分拣法

--讲课视频-1

--讲课视频-2

-9.3 面向对象设计

--讲课视频-1

--讲课视频-2

-9.4 类图建模

--讲课视频-1

--讲课视频-2

-第9章 面向对象分析与设计--测验题

-讨论题

--讨论

第10章 行为建模

-10.1 顺序图概念

--讲课视频

-10.2 顺序图建模

--讲课视频

-10.3 顺序图风格

--讲义视频

-10.4 状态建模

--讲课视频

-10.5 状态图

--讲课视频

-10.6 状态图精讲

--讲义视频

-测验题--作业

-讨论题

--讨论

第11章 软件系统设计

-11.1 软件体系结构概念

--讲授视频

-11.2 软件设计原则

--讲授视频

-11.3 软件体系结构风格(一)

--讲授视频

-11.4 软件体系结构风格(二)

--讲授视频

-11.5 软件体系结构风格(三)

--讲授视频

-11.6 软件设计过程

--讲授视频

-11.7 Web系统架构设计

--讲授视频

-11.8 数据库选择策略

--讲授视频

-测验题--作业

-作业题

--html

--html

--html

-作业题--作业

第12章 软件交互设计

-12.1 交互设计概述

--讲授视频

-12.2 交互设计目标

--讲授视频

-12.3 GUI设计原则

--讲课视频

-12.4 KLM效率模型

--Video

-12.5 Fitts定律

--讲授视频

-12.6 交互设计过程

--讲授视频

-测验题--作业

第13章 软件系统测试

-13.1 软件测试概念

--讲课视频

-13.2 软件测试类型

--讲课视频

-13.3 软件功能测试

--讲课视频

-13.4 软件性能测试

--讲课视频

-测验题--作业

第14章 软件交付与维护

-14.1 软件部署与交付

--讲课视频

-14.2 软件演化与维护

--讲课视频

-测验题--作业

第15章 期末考试与总结

-第一部分:基础知识

-第二部分:编程与测试(选做)

--编程与测试(选做)

讲授视频笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。