当前课程知识点:软件理论与工程 > 第1章 软件与软件工程 > 1.1 软件的本质 > 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.2 软件工程
--1.2 软件工程
-1.3 软件过程结构
-1.4 过程模型
--1.4 过程模型
-1.5 敏捷开发方法
-第1章 习题
--第1章 习题
-2.1 需求工程过程
-2.2 需求获取
--2.2 需求获取
-2.3 需求分析
--2.3 需求分析
-2.4 过程建模
--2.4 过程建模
-2.5 面向对象建模
-第2章 习题
--第2章 习题
-3.1 设计概述
--3.1 设计概述
-3.2 设计的概念
-3.3 设计模型元素
-3.4 体系结构概述
-3.5 体系结构风格
-3.6 构件级设计
-3.7 UI设计
--3.7 UI设计
-3.8 基于模式的设计
-第3章 习题
--第3章 习题
-4.1 UML概述
-4.2 UML 及UML中的事物
-4.3 UML关系和图
-4.4 UML 图细节(上)
-4.4 UML 图细节(下)
-第4章 习题
--第4章 习题
-5.1 软件测试策略
-5.2 测试传统的应用系统
-5.3 测试面向对象的应用系统
-5.4 测试web应用系统
-5.5 测试移动应用系统
-第5章 习题
--第5章 习题
-6.1 软件项目估算
-6.2 软件过程管理
-6.3 软件配置管理
-6.4 项目版本控制及调试
-第6章 习题
--第6章 习题