当前课程知识点:软件理论与工程 >  第1章 软件与软件工程 >  1.1 软件的本质 >  1.1 软件的本质

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

1.1 软件的本质在线视频

下一节:1.2 软件工程

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

1.1 软件的本质课程教案、知识点、字幕

大家好 我是北京理工大学

计算机学院 车海莺

今天我们来分享一下软件的本质

什么是软件呢

软件是指令的集合

是一些计算机程序

通过执行这些指令

可以满足预期的

特征 功能和性能的需求

软件还是一些数据结构

使得我们的程序

可以利用这些数据

利用这些信息

得以运行

软件还包括

对软件的一些描述信息

它以硬拷贝和虚拟的形式存在

用来描述程序操作

和使用方面的一些内容

所以我们说软件包括三个部分

包括指令的集合

数据结构和软件的描述信息

软件是设计开发的

而不是传统意义上

生产制造的产品

所以我们说软件不会磨损

比如我们购买一件衣服

或者是购买一个鞋子

在我们使用之后

它会随着时间的流逝

而慢慢的被磨损 变旧

而我们的软件

不会有这样的现象发生

虽然整个工业

向着基于构建的

构造模式发展

然而 大多数的软件

仍然是根据实际客户的需求

而有针对性的制造的

软件不会磨损

但是它可能会失效

可能会退化

这张图显示了

软件失效的曲线

在软件开始的阶段

未知的缺陷

将在软件生命周期的前期

造成很高的失效率

随着缺陷的被修复

随着时间的流逝

那么这个失效率呢

会逐渐的降低

那么理想情况下

当所有的缺陷被修改了之后

我们的软件失效率

是停留在一个既定的水平上

像图中的这个黑色的实线

所展示的那样

在软件生命周期的初期

它的失效率很高

随着时间的流逝

失效率逐步降低

然后在理想的情况下

停留在一个既定的值

但是 真实的软件失效曲线

却不是这样的

因为我们的软件随着时间的流逝

会有一些更新

会有一些变更

那么更新和变更

又会带来新的位置的缺陷

在新的位置缺陷被引入之后

我们的软件失效率

又有一个突增

然后随着这些缺陷的修复

失效率又逐步的下降

在下一次变更的时候

又产生了一个失效率的突增

然后再逐步的下降

所以 真实的软件失效的曲线

是在图中比较细的黑色的实线

所展示的样子

会逐步下降

然后失效率再有一个突增

再逐步下降

失效率再有一次突增

每次失效率的突增

都是因为有新的功能

或者是新的变更的引入

带来了未知缺陷

使得失效率突增

那我们的软件虽然不会磨损

但是它的退化现象

是的确存在的

因为我们的软件的环境和软件本身

随着使用

会有一些需求的变化

或者是周围环境的变化

使得软件有一点点不再适应

所以产生了退化的现象

在软件的应用领域

我们通常可以把软件分为这样几类

首先是系统软件

像操作系统

或者是硬件的驱动程序

这些都属于系统软件

第二类是应用软件

应用软件是针对一类应用问题

而开发的

比如我们的office软件

就是应用软件

第三种是工程科学软件

工程科学软件通常是

数值计算类的程序

它可以从天文学到动力学等等

解决工程计算问题

第四类是嵌入式软件

嵌入式软件通常会

工作在一定的硬件的基础上

比如我们的汽车有

测速软件

嵌入到汽车的内部的

这样的一个测速的嵌入式软件

还有温度控制这样的软件

嵌入到温度控制的硬件当中的

一些嵌入式软件

那么第五类就是产品线软件

产品线软件是

针对某一个问题

来解决这个问题

而生成的软件产品

第六类是Web和移动应用软件

现在随着互联网的普及

我们的Web软件也越来越多

随着我们的手机和平板等

移动设备的普及

我们移动端的软件也在日益的增多

第七种是人工智能软件

包括机器人

人工神经网络和博弈等等

比如我们以前听说过的

下棋的AlphaGo

就是人工智能软件的一个代表

还有一类是遗留软件

那么 软件在不断的演化 升级

因为我们需要对软件进行一些

适应性的调整

从而满足新的计算环境

或者是新的技术的要求

而且软件必须升级

来实现新的商业需求

因为我们的商业需求也在不断的变更

所以为了应对变更的商业需求

我们的软件也必须要不断的升级

而且 我们的软件还必须被扩展

使之具有更多的新的系统

和数据库的互操作能力

还有 我们的软件架构

必须要进行改建

使之能适应不断演化的计算环境

比如我们的cpu在不断的演化

比如我们的内存等等

我们的硬件都在不断的演化

我们的网络也在不断的演化

所以 我们的软件架构

为了适应不断演化的计算环境

也需要不断的进行改建

那么有一些软件

是在很久以前开发下来的

还不能够适应新的

外部的硬件环境和需求的变化

这样的软件

我们称之为遗留软件

现在随着软件的不断的演化

其中有四大类软件

逐渐在行业中

开始占据了主导地位

虽然这四类软件在十几年前

还处于相当初级的阶段

甚至可能还没有

但是现在这四类软件

已经占据了主导的地位

包括我们的WebApp系统

我们的WebApp系统

比如我们很多的政府网站

我们很多的

网上的一些填报系统

那么第二类的软件是移动App

我们现在的移动设备

越来越普及

每个人都有好几个移动设备

那么在每个移动设备上

都会有一些移动App

使得我们可以完成这样

或者那样的功能

比如我们的微信程序

就是一个典型的移动App

第三个是云计算

云计算就是

我们用一个终端的设备

去访问云里面存储的各种的资源

我们利用云里边存储的

存储资源

计算资源

应用资源

程序资源

软件资源等等

这样我们可以充分的共享

云提供我们的便利

第四类占主导地位的软件

就是产品线软件

那么下面我们分别看一下

首先 我们来看一下Web应用系统

Web应用系统是指

基于Web的系统

和基于Web的应用软件

现代的WebApp

远远不止于少量的图片的

超文本文件

一些开发工具

比如说XML

或者是Java

扩展了WebApp的能力

使得Web工程师

在向客户提供信息的同时

还可以向客户提供一些计算能力

WebApp不仅可以为最终用户

提供独立的功能

而且已经和公司的数据库

业务应用系统集成在一起

在为用户提供独立的功能的同时

可以采集一些用户的行为的数据

存储到公司的数据库

或者业务系统当中

以便后期进行分析

另外 应用的内容的精美程度

对一个Web应用程序来讲

是非常重要的

Web应用程序的内容的精美程度

仍然是决定WebApp质量的

一个很重要的一个因素

我们都会愿意去访问

一个设计精美的

令人感觉很愉快的一个网站

所以对于外部App来说

内容的精美程度还是非常重要的

另外 我们的WebApp

有以下一些特性

比如说它是数据驱动的

许多的WebApp的主要功能

是使用超媒体

向最终用户提供

文本 图片 音频以及视频的内容

那么用户是因为对这个网站上

或者是这个WebApp上提供的

文本 图片 音频

或者视频的内容感兴趣

才来访问这个网站

所以我们的WebApp的核心

还是它提供的数据

WebApp的第二个特性

就是内容敏感性

WebApp的内容的质量

和它的艺术性

在很大程度上决定了

WebApp的质量

比如说

同样是一个提供视频的网站

一个设计美观

和使用友好的

这样一个WebApp的网站

就会比一个设计一般

使用起来不是那么顺畅的

WebApp网站

更容易被大家所使用和喜爱

第三个WebApp的特性

就是它持续演化

传统的应用软件

是随着一系列规划好的时间间隔发布

而演化的

而Web应用软件

则是在持续的 不断的演化

首先它的内容就在不断的演化

我们很多个WebApp是

由用户提供一些数据

比如我们的youtube

是用户上传一些视频

然后大家来共享这些视频

那么 随着用户不断上传新的视频

那么这个WebApp的应用程序

就会不断的进行演化

无论从结构上

从内容上

都在持续的进行演化

这个是WebApp的第三个特性

另外 WebApp还有即时性

尽管即时性

也就是说软件要尽快的推向市场

来满足一些迫切的需求

是很多应用领域的特点

但是将WebApp投入市场

可能是几天

或者几周内的事情

所以WebApp的即时性

是非常重要的

另外 我们还要关注它的安全性

由于WebApp是通过网络访问

来使用的

因此 要限制访问的

最终用户的数量

即使可能限制数量是非常困难的

我们要限制用户的数量

和限制用户的操作数据的权限

来保证我们网站

WebApp的安全和持续的使用

最后就是美观性

我们不可否认

WebApp的用户界面的外观

是否美观

是否有吸引力

对使用WebApp的用户来讲

是非常重要的一个影响因素

那么在WebApp之后

我们再看一下移动应用程序

术语app已经演化为在移动平台

例如在ios 安卓

或者是Windows Mobile上

专门设计的软件

我们提到app的时候

我们可能首先想到的是

在移动平台上的app程序

那我们的移动平台的app程序呢

有基于安卓的

有基于苹果的 ios的

还有基于Windows的

window Moile上的app程序

移动应用系统

包括用户接口

和用户接口利用移动平台

所提供的独特的交互机制

基于Web资源的互操作性

提供了与App相关的

大量的信息的访问

同时 我们的移动应用系统

提供了本地处理能力

使得我们可以用移动的设备

就能够完成这些数据的加工

上传 下载等相关的功能

而且我们的移动应用系统

提供了平台中的持久存储的能力

比如我们在微信上发布的消息

它存储在我们的手机里面

那么在你不删除的情况下

它可以持久的存储

移动Web应用系统

允许移动设备

通过针对移动平台的优点和缺点

专门设计的浏览器

来获取基于Web的内容

移动App可以直接访问

设备的硬件特性

比如可以访问加速器

或者它可以访问GPS的位置

然后提供前面所述的

本地处理和存储的能力

随着时间的推移

移动Web应用系统与移动apps

之间的区别

会变得模糊

都是通过移动端

去访问一些数据

访问一些网站

然后进行数据的加工和处理

第三类占据主导的软件就是云计算

云计算包括基础设施或生态系统

它是可以让任何用户

在任何地点

都可以使用计算设备

来共享广泛的计算资源

这种计算资源

包括我们的存储

包括我们的处理

包括我们的软件等等

在这张图上显示了

云计算里面通过外部的终端

可以访问的云计算里边的内容

它包括一些应用程序Application

包括一些Platform

可以访问的一些平台

还包括我们

可以访问的一些infrastructure

基础设施等等

还可以访问一些content的内容

几乎所有的计算能力和内容

都可以通过云来提供

所以云计算

也是现在占据主流地位的

一大类重要的软件

云计算提供分布式的

数据存储和处理能力

它能使得任何用户

无论在任何地点

都可以使用计算设备

来共享广泛的计算资源

计算设备位于云的外部

可以访问云内的各种资源

云计算的实现需要开发

包括前端和后端服务的体系结构

前端包括用户的设备或应用软件

比如浏览器用于访问后端

后端包括服务器

或相关的计算资源

数据存储系统

比如数据库

还有服务器驻留的应用程序

和管理服务器

我们可以对云体系结构

进行一下分段

提供不同级别的访问

从公共访问

到只针对授权用户提供访问的

私有云体系结构

最后就是软件产品线

软件产品线实质上

是一系列软件密集型的系统

可以共享一组公共的可管理的特性

这些特性可以满足特定的市场

或任务的特定需求

软件产品线

都使用相同的底层应用软件

和数据体系结构来开发

并使用可在整个产品线中

进行复用的一组软件构件来实现

软件产品线共享一组资源

包括需求

体系结构

设计模式

可重用的构件

还有测试用力

及其他软件工程的工作产品

软件产品线在对这些产品

进行工程设计时

利用了产品线中

所有产品的公共特性

所以 软件产品线

是基于一些公共特性

开发的一系列软件产品

今天 我们关于软件的本质

就分享这些内容

谢谢大家

软件理论与工程课程列表:

课程概述

-课程概述

第1章 软件与软件工程

-1.1 软件的本质

--1.1 软件的本质

-1.2 软件工程

--1.2 软件工程

-1.3 软件过程结构

--1.3 软件过程结构

-1.4 过程模型

--1.4 过程模型

-1.5 敏捷开发方法

--1.5 敏捷开发方法

-第1章 习题

--第1章 习题

第2章 需求分析

-2.1 需求工程过程

--2.1 需求工程过程

-2.2 需求获取

--2.2 需求获取

-2.3 需求分析

--2.3 需求分析

-2.4 过程建模

--2.4 过程建模

-2.5 面向对象建模

--2.5 面向对象建模

-第2章 习题

--第2章 习题

第3章 软件设计

-3.1 设计概述

--3.1 设计概述

-3.2 设计的概念

--3.2 设计的概念

-3.3 设计模型元素

--3.3 设计模型元素

-3.4 体系结构概述

--3.4 体系结构概述

-3.5 体系结构风格

--3.5 体系结构风格

-3.6 构件级设计

--3.6 构件级设计

-3.7 UI设计

--3.7 UI设计

-3.8 基于模式的设计

--3.8 基于模式的设计

-第3章 习题

--第3章 习题

第4章 UML方法

-4.1 UML概述

--4.1 UML概述

-4.2 UML 及UML中的事物

--4.2 UML 及UML中的事物

-4.3 UML关系和图

--4.3 UML关系和图

-4.4 UML 图细节(上)

--4.4 UML 图细节(上)

-4.4 UML 图细节(下)

--4.4 UML 图细节(下)

-第4章 习题

--第4章 习题

第5章 软件测试

-5.1 软件测试策略

--5.1 软件测试策略(上)

--5.1 软件测试策略(下)

-5.2 测试传统的应用系统

--5.2 测试传统的应用系统

-5.3 测试面向对象的应用系统

--5.3 测试面向对象的应用系统

-5.4 测试web应用系统

--5.4 测试web应用系统

-5.5 测试移动应用系统

--5.5 测试移动应用系统

-第5章 习题

--第5章 习题

第6章 项目管理

-6.1 软件项目估算

--6.1 软件项目估算

-6.2 软件过程管理

--6.2 软件过程管理

-6.3 软件配置管理

--6.3 软件配置管理

-6.4 项目版本控制及调试

--6.4 项目版本控制及调试

-第6章 习题

--第6章 习题

1.1 软件的本质笔记与讨论

也许你还感兴趣的课程:

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