第一阶段术语和技术基础
本阶段讲解软件工程的主要概念,并建立一种组织和规范我们进行技术交流的方法。
同时,本学习阶段还介绍了软件架构和完整性的概念,以及它们与区块链的关系。到本阶段结束时,你将会了解区块链的用途及其潜力。
步骤1
用层和面进行思考
通过将系统分为层和面来分析系统
本步骤通过引入一种组织和规范我们进行技术交流的方法,来奠定了我们学习区块链的基础。本步骤解释了如何分析软件系统,以及为什么把软件系统理解为层的组合是很重要的。此外,本步骤说明了在系统中考虑不同的层,会有怎样的收获,以及这样的做法如何帮助我们理解区块链。最后,该步骤简要介绍了软件完整性的概念并强调了它的重要性。
一个比喻
你有手机吗?我猜是的,因为大多数人现在至少有一个。你对用于发送和接收数据的不同无线通信协议了解多少?你对于作为移动通信基础的电磁波了解多少?好吧,我们大多数人对这些细节都不太了解,因为对于使用手机来说,我们没有必要了解这些细节,而我们大多数人也没有时间去学习这些知识。主观精神上,我们把手机分拆为我们需要知道的部分,以及可以忽略的或认为是理所当然的部分。
这种了解技术的方式并不局限于手机。当我们学习如何使用一台新电视机、一台电脑、一台洗衣机等等时,我们一直都在使用这种方式。然而,这些主观分拆是高度个性化的,因为定义什么是重要的和什么不是重要的,取决于我们的个人偏好,特定的技术,以及我们的目标和经验。因此,对于同一部手机,你的主观分拆可能会与我的主观分拆不同。这通常会导致沟通上的问题,尤其是当我试图向你解释你应该知道的关于某款手机的信息时。所以,在教学和讨论技术的过程中,统一系统分拆的方法是关键。本步骤将讲解如何将一个系统分拆或分层,从而为我们关于区块链的沟通奠定基础。
软件系统的层
在本书中使用了以下两种分拆系统的方法:
应用与实现。
功能与非功能面。
应用与实现
将用户需求从系统内在技术分拆出来,会帮助到将应用层与实现层分离。应用层的所有内容都与用户的需求有关(例如,听音乐、拍照或预订酒店房间)。实现层的所有内容都与让事情发生有关(例如,将数字信息转换成声信号,识别数码相机中像素的颜色,或通过互联网发送消息到预订系统)。从本质上说,实现层的所有元素都是技术性的,并且被认为是达到目的的手段。
功能与非功能面
区分一个系统能做什么和怎么做,会帮助到将功能面和非功能面进行分离。功能面的例子如通过网络发送数据,播放音乐,拍照,以及处理图片中的单个像素。非功能面的例子如一个漂亮的图形用户界面,快速运行的软件,以及用户数据保护和保存的能力。一个系统其他重要的非功能面还有安全性和完整性。完整性意味着一个系统的表现和预期的一样,它涉及到许多方面如安全性和正确性。有一个很好的方法来记住系统的功能面和非功能面的区别,参考英语中的语法用法:动词描述动作或做了什么,而副词则描述了动作是如何完成的。例如,一个人可以走得快或慢。在这两种情况下,“行走”的动作是相同的,但动作的执行方式不同。一般来说,我们可以说功能面类似于动词,而非功能方面类似于副词。
同时考虑两层
识别功能面和非功能面以及分拆应用层和实现层,可以同时完成,并产生一个二维表。表1-1呈现了用这种方法将手机分层的结果。
表1-1:分层手机的例子
表1-1可以解释系统中特定元素对其用户的可见性(或不可见性)。应用层的功能面是系统中最明显的元素,因为它们满足了用户的明显需求。这些元素通常是用户所了解的。另一方面,实现层的非功能面很少被视为系统的主要元素,他们通常被认为是理所当然的。
完整性
完整性是所有软件系统的一个重要的非功能面,它有三个主要组成部分:
数据完整性:系统使用和维护的数据完整、正确、不矛盾。
行为完整性:系统的行为符合预期,并且没有逻辑错误。
安全性:系统有能力限制访问,并仅对授权用户提供数据和功能的访问支持。
我们大多数人可能认为软件系统的完整性是理所当然的,因为大多数时候我们都在幸运地与保持完整性的系统进行交互。这是因为程序员和软件工程师已经投入了大量的时间和精力来开发系统以实现和保持完整性。因此,在欣赏软件工程师完成的高度完整性系统的同时,我们可能也有些被宠坏了。当我们操作一个出问题的系统时,我们的感觉立刻会发生改变。当你面临数据丢失、软件行为不合理,或意识到陌生人能够访问你的私人数据时,这种场景就出现了。当你的手机、电脑、电子邮件软件、文字处理软件、电子表格计算让你生气,甚至于忘记你的行为举止,这种场景就会发生!在这些情况下,我们开始意识到软件完整性非常重要。因此,软件专业人员花大量的时间研究这个实现层看似微小的非功能面,也就不会那么让人感到意外了。
展望
步骤1介绍了软件工程的一些通用原则。具体来说,说明了完整性和功能与非功能面的概念,以及软件系统的应用与实现。了解这些将帮助你理解区块链所在领域的更多概念。步骤2将使用这些步骤1中介绍的概念来讲解更多的内容。
总结
系统可以通过以下分拆方法进行分析:
应用与实现层
功能与非功能面
应用层关注用户需求,而实现层则关注于实现。
功能面侧重于完成了什么工作,而非功能面则侧重于如何完成工作。
大多数用户关心的是系统应用层的功能面,而系统的非功能面,特别是实现层的非功能面,用户会更少关心。
完整性是任何软件系统的一个重要的非功能面,它有三个主要元素:
数据完整性
行为完整性
安全性
多数软件故障,如数据丢失,非逻辑行为,或陌生人访问私有数据,都是违反系统完整性导致的结果。
谢谢关注大卫徐的订阅号!
领取专属 10元无门槛券
私享最新 技术干货