半岛体育软件是计算机程序、规程以及运行计算机系统可能需要的相关文档和数据,从软件的内容来看,软件更像是一种嵌入式的数字化知识,其形成是一个通过交互对话和抽象理解而不断演化的过程,根据软件服务对象的范围,一般分为通用和定制两种。
通用软件(Generic Software):由软件开发组织开发、面向市场用户公开销售的独立运行系统(优点:一次开发,多次出售 缺点:有风险)
定制软件(Customized Software ):由某个特定用户委托、软件开发组织在合同的约束下开发的软件(优点:满足用户个性化需求 缺点:重复利用性差)
软件是复杂的,软件是人类思维和智能的一种延伸和在异体上的再现,远比任何以往人类的创造物都要复杂的多,软件的复杂性是软件的固有属性、本质特性。
软件是不可见的,软件是客观世界空间和计算机空间之间的一种逻辑实体,不具有物理的形体特征。
软件是不断变化的,它需要随着应用、硬件、用户和社会等各种因素的变化而不断的被修改和扩展。
软件必须遵从人为的惯例并适应已有的技术和系统,软件需要随接口的不同而改变,随时间的推移而变化,而这些变化是不同的人设计的结果,许多复杂性来自保持与其他接口的一致,对软件的任何再设计,都无法简化这些复杂特性。
可靠性:在指定条件下使用时,软件产品维持规定的性能级别的能力(在规定的条件下,在规定的时间内,软件不引起系统失效的概率);
易用性(可使用性):在指定条件下使用时,软件产品被理解、学习、使用及其吸引用户的能力;
效率(有效性):在规定条件下,相对于所用资源的数量,软件产品可提供适当性能的能力;
可维护性:软件产品可被修改的能力,修改可能包括修正、改进或者适应环境、需求和功能规约的变化;
软件生命周期内容:问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到报废等阶段。
问题的定义及规划:此阶段是软件开发方向与需求方共同讨论,主要确定软件的开发目标及其可行性。
需求分析:在确定软件开 发可行的情况下,对软件需要实现的各功能进行详细分析。
软件设计:此阶段主要根据需求分析的结果,把整个软件分为大大小小的不同模块,设计出每一个模块的具体结构。如系统框架设计、数据库设计等,软件设计一般分为总体设计和详细设计。
程序编码:此阶段是将软件设计的结果转化为计算机可执行的程序代码。在程序代码中必须制定统一、符合标准的编写规范。以保证程序的可读性、易维护性,提高程序的运行效率。
软件测试:在软件设计完成后要经过严密的测试。以发现软件在整个设计过程中的问题并加以纠正。整个测试过程分:单元测试(白盒)、集成测试(黑盒,功能测试,强度性能测试)、系统测试三个阶段。测试的方法主要有白盒测试和黑盒测试两种。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。
运行维护:安装部署软件系统,修复软件中存在的bug和升级系统。软件的为维护包括纠错性维护和改进性维护两个方面。
特性 1.软件质量特性,反映了软件的本质。讨论一个软件的质量,问题最终要归结到定义软件的质量特性。 2.定义一个软件的质量,就等价于为该软件定义一系列质量特性。 3.人们通常把影响软件质量的特性用软件质量模型来描述。 软件质量模型 1.软件质量特性定义成分层模型 2.最基本的叫做基本质量特性,它可以由一些子质量特性定义和度量。 3.1976年 Boehm质量模型 4.1979年 McCall质量模型 5.1985年 ISO质量模型 在这里插入图片描述
1.软件质量特性度量有两类:预测型和验收型 2.预测度量是利用定量或定性的方法,估算软件质量的评价值,以得到软件质量的比较精确的估算值 3.验收度量是在软件开发各阶段的检査点,对软件的要求质量进行确认性检查的具体评价值,它是对开发过程中的预测进行评价
1.什么是质量保证,它是为保证产品和服务充分满足消费者要求的质量而进行的有计划、有组织的活动。 2.质量保证是面向消费者的活动,是为了使产品实现用户要求的功能,站在用户立场上来掌握产品质量的 3.软件的质量保证就是向用户及社会提供满意的高质量的产品。
1.用户要求的是产品所具有的功能,这是“真质量”。靠质量检验,一般检查的是“线.能靠质量检验的质量特性,即使全检验,也只是代表产品的部分质量特性。
1、规定在项目的哪个阶段进行评审及如何评审。 2、规定在项目的哪个阶段应当产生哪些报告和计划 3、规定产品各方面测试应达到的水平 4、在每次评审和测试中发现的错误如何修正
1、为了开发高质量的软件,需要明确软件的功能,明确软件应达到什么样的质量标准,即质量目标。 2、为了达到这个目标,在开发过程中的各个阶段进行检查和评价。 3、在做质量评价时,需要有对质量进行度量的准则和方法。
由于工作的关系,经常会被各种相近的词语搞得很乱,比如:软件、应用程序、程序、系统、基础软件、中间件、硬件抽象层、API、架构、软件架构、电子电气架构、接口、固件、库、内核···· 算了我写不下去了,你能理解这种心情吗?加上所有人对基础概念的理解都不一样,说的时候还会加上各种似是而非的包装词!!!!
所以,我一气之下,花了近1个星期时间将他们成系统的梳理了一下,其中我用到最多的搜索网站是:CSDN、。太好用了,推荐给大家,都是专业度比较高的,我都是先查,如果理解不了,就回到国内用CSDN查。废话不多说,进入正题:什么是软件。
软件包括所有可以在计算机上运行的程序,同时,与这些计算机程序相关的文档、库、脚本语言一般也被认为是软件的一部分;软件是计算机中的无形部分,与其相对的有形部分称为“硬件”。
(这样的总结描述估计全网就我一家,我看了:软件、、论坛、公众号,都觉得不太容易理解,甚至有的不准确,于是自己消化后做了如上解释。但是这样的解释也相当于什么都没说,所以请往下看)
你叫计算机干活,得发个计算机可以理解的“消息”给它,程序就是这个“消息”。
计算机程序(Computer Program)是程序员为了实现特定目标、解决特定问题,而用计算机语言编写的计算机指令的集合。计算机接收指令以后,通过编译器转译为机器语言(机器语言是一个以二进制数字:0和1构成的语言),然后直接运行。
程序就像一个“菜谱”,上面写着:把1个鸡蛋放到煮沸的热水里,盖上盖,小火煮6分钟。
我们把这个“菜谱”丢给男朋友,就可以得到一枚香喷喷的水煮蛋,解决了早上肚子饿的问题。
为了使得计算机能够理解人的意图,然后解决某个特定问题,程序员用键盘编写计算机代码,将解决问题的思路、方法、手段通过计算机能够理解的形式告诉计算机,使得计算机能够听从人的指令一步一步去工作,得到相应结果或者完成某种特定任务,这种过程就是编程。
需要注意的是,编程不一定是仅仅针对计算机(或者电脑)而言的,可以针对所有具备逻辑计算能力的硬件设备,是广义上的“计算机”
应用软件是为了终端用户服务的。它是为了某种特定的用途而被开发的应用程序。
也可以是一组功能联系紧密,可以互相协作的程序的集合,比如影像处理软件:Photoshop。
中间件(英语:Middleware),它是一类软件统称,是一套软件框架,它是构建“分布式架构”的基础,通过软件系统的分层、模块化,降低应用软件和平台之间的耦合度(软硬件解耦),他为应用程序提供了运行与开发环境(Run-time Environment,简称RTE),让应用程序只需要专注于实现业务逻辑,帮助开发者灵活、高效地开发和集成复杂的应用软件。
需要注意的是:它不仅在应用软件和操作系统之间起到支撑和连接的作用,还能实现不同应用之间的通讯及资源共享。
我们需要取钱,走到ATM跟前,ATM首先得确认你的身份保证安全(应用程序也需要被验明身份);
你不可以直接走到银行存钱的地方直接去拿(不是所有应用程序都可以直接调用底层的系统软件和硬件,没这个权利也没这个能力)然后等待系统给你操作。你不需要管银行把钱放到了哪一个柜子,不需要管银行派谁给你去拿;
上面的例子只是其中一个细分场景,中间件的功能还有很多,想要深入交流的朋友可以关注+私信交流。英文比较好的朋友可以翻出去看下这个外网对于中间件的解释,我觉得说得挺全的。
操作系统向下负责管理计算机系统中各种独立的硬件(如CPU、内存、硬盘),使得它们可以协调工作;向上,则为上层的软件提供方便编程的接口,使得应用程序不需要操心底层的每个硬件是如何工作的,而各个硬件工作的细节则由驱动程序去处理。
(这里其实也可以举例说明,但是概念太多了,就不一一举例了,相信能够来查这个问题的朋友,都是具有一定的“搜商”的。)
它们职责在于把系统所提供的基本服务包装成应用程序所能够使用的编程接口(API),是最靠近应用程序的部分
内核建立起了计算机软件与硬件之间通讯的平台,内核提供系统服务,比如文件管理、内存管理、设备I/O等,它是操作系统中最核心的部分,通常运行在最高特权级,有点中央指挥部的意思。
最底层的、直接控制和监视各类硬件的部分,它们的职责是隐藏硬件的具体细节,并向其他部分提供一个抽象的、通用的接口。
操作系统的分类方式有很多,没有一个统一标准,但通常都会以内核结构来区分不同的操作系统。内核在设计上可以概分为宏内核、微内核两大架构:
Linux、Unix就是典型的宏内核,宏内核是一种最传统的内核结构,它大包大揽,几乎把所有的系统服务都放在在同一个内核空间上运行,有一个共同的地址空间,这个空间叫做核心空间。
即使有的宏内核将其运作从整体性运作拆分成几个服务模块,并让各模块各自运作,其操作系统的代码依然是高度紧密的,很难修改成其他类型的操作系统架构。此外,所有的模块也都在同一块寻址空间内运行,倘若某个模块有错误、瑕疵(Bug),就会导致整个系统挂掉,可见开发之难。
反过来,如果宏内核架构的操作系统在开发设计时相当完善,并经测试验证后具有高度可靠性,那么因祸得福,由于操作系统内的各软件组件因具有高度紧密性,因此整个系统的运作格外有效率。
缺点:占用更多存储空间、兼容扩展性差、稳定性差、对算力要求高、功耗高、代码极其复杂,UNIX、Linux操作系统的宏内核代码就有上亿行;即使是基于Linux内核开发的安卓系统内核代码同样高达2000万行以上。
而微内核则是尽可能简化内核,由一个非常简单的硬件抽象层和一组最底层的服务组成:线程管理、进程间通信、地址空间等。
它将更多的系统服务放置在内核之外,当运行一个应用程序的时候,按需调用选定的系统服务来完成工作。内核仅仅放置最核心以及经常性需要使用到的程序代码。
比如驱动的错误只会导致相应进程死掉,不会导致整个系统都崩溃,做驱动开发时,发现错误,只需要kill掉进程,修正后重启进程就行了,比较方便。
而且微内核结构占更少的存储空间,模块化程度高扩展性更好,进程间互联(IPC)互通兼容多处理器、多操作系统,可简化应用程序开发,代码少,未来通过OTA方式对系统进行升级,只要用新模块替换旧模块,不需要改变整个操作系统。
Linux,单内核 OS ,常用于支持更多应用和接口的信息娱乐系统(IVI)中。协会和联盟致力于将开源 Linux 操作系统推广至汽车领域中,典型代表如 AGL、GENIVI。例如,特斯拉在Linux基础上开发出了完全适配旗下车辆的操作系统;阿里的AliOS也是基于Linux开发,目前已经应用在上汽荣威、上汽名爵等多款车型上。2016年,由Linux基金会赞助的开源车载系统AGL(Automotive Grade Linux)项目发布2.0版本,致力于为汽车软件行业提供全新的智能座舱系统支持。
是基于Linux的自由及开放源代码的操作系统,由Google公司和开放手机联盟领导及开发。安卓被认为是基于Linux内核开发的最成功的产品,应用生态最为丰富,主要使用于移动设备。
安卓也推出了车规级版本,目前在国内汽车信息娱乐系统中占据主流。作为开源OS,安卓对中低端OS开发商具有很大的吸引力,但给后期版本升级和系统漏洞等带来了巨大风险和技术维护成本。作为汽车操作系统,的稳定性和安全性较差,但由于车载信息娱乐系统对安全性要求相对较低,仍然凭借其上述优点在国内车载信息娱乐系统领域占据主流地位。尤其是各大互联网巨头、自主品牌、造车新势力纷纷基于进行定制化改造,推出了自己的汽车操作系统,如阿里AliOS、百度小度车载OS、比亚迪DiLink、蔚来NIO OS、小鹏Xmart OS 等。
黑莓的 QNX Neutrino-RTOS 系统,和 Linux 一样脱胎于 Unix,QNX是全球第一款通过ISO 26262 ASIL D 安全认证的嵌入式微内核OS。目前占据汽车嵌入式操作系统市场第一名,采用其系统的汽车数量达 1.7 亿台以上。目前基本主流主机厂例如奥迪,宝马,福特,通用,本田,现代,捷豹路虎,起亚,玛莎拉蒂,奔驰,保时捷,丰田和大众都在采用。
固件(英语:firmware),是一种嵌入在硬件设备中的软件。顾名思义,固件的所在是位于软件和硬件之间的。像软件一样,他是一个被电脑所执行的程序。通过固件,操作系统才能按照标准的设备驱动实现特定机器的运行动作。
固件是担任着一个系统最基础最底层工作的软件。而在硬件设备中,固件就是硬件设备的灵魂,因为一些硬件设备除了固件以外没有其它软件组成,因此固件也就决定着硬件设备的功能及性能。
通常它是位于特殊应用集成电路(ASIC)或可编程逻辑器件(PLD)之中的闪存或EEPROM或PROM里,有的可以让用户更新。可以应用在非常广泛的电子产品中,从遥控器、计算器到电脑中的键盘、硬盘,甚至工业机器人中都可见到它的身影。
这里比较容易弄混淆的是驱动程序和固件之间的关系。用我自己的大白话就是,驱动程序要比固件还高一层,固件才是最底层的程序,甚至某种意义上来说,他不属于软件,它是介于软件和硬件之间的一种程序。
固件是为控制硬件设备而设计的。在计算机中,我们称之为BIOS(基本输入/输出系统)或UEFI(统一可扩展固件接口)。BIOS是计算机上电后第一个启动的。它可以与硬件交互,并检查它是否有任何错误。BIOS调用另一个名为bootloader的程序,它负责唤醒沉睡在硬盘驱动器内的操作系统,并将其放入随机存取存储器中。
驱动(Drive):驱动程序即添加到操作系统中的一小块代码半岛体育,其中包含有关硬件设备的信息。也称为设备驱动程序或软件驱动程序,是实现高级计算机程序与硬件设备交互的软件。
驱动程序是硬件厂商根据操作系统编写的配置文件,设备驱动程序是与操作系统和硬件相关的。驱动程序告诉操作系统如何与设备通信,当计算机程序请求与某个硬件设备交互时,驱动程序将处理该设备和调用该驱动程序的计算机程序之间的指令和输出转换。设备驱动程序充当硬件设备与使用它的程序或操作系统之间的转换器。
每个驱动程序都是为特定或一组设备工作的。在您的计算机上,驱动程序使用各种总线接口来与设备联系。例如,PCI Express。它用于连接硬件组件,如GPU、无线适配器和音频卡。而且,并非每个驱动程序都被设计为与用户交互。许多人在匿名的情况下继续他们的工作,用户完全不知道他们。
不同的操作系统,操作硬件的方式完全不同,在Windows里应用态是无法直接写IO端口的,而在嵌入式系统里,一般都不限制直接操作IO端口。所以,硬件厂商一方面为了自己的硬件能被软件更简单的使用,就需要写firmware,而另一方面为了兼容各种操作系统,又不能把firmware写的太死,必须预留足够的余地让软件自由发挥——软件的自由发挥就是驱动。
不同操作系统的驱动是不能兼容的,原因就是驱动是为操作系统服务的,有的操作系统是单线程的,有些操作系统不允许动态申请内存,所以不同的操作系统要操作硬件,就要根据自身的特性编写对应的操作代码,这就是驱动存在的意义——适应系统需要。
假如世界上只有一种操作系统,并且版本永远不会改变,那么firmware和驱动就可以融合在一起,但这只能一个不现实的梦想,要知道民用操作系统和工业控制操作系统差别是十分巨大的。
Over-the-Air Technology,空中下载技术;通常指的是通过互联网对软件或固件进行在线升级的技术,如ios操作系统版本升级、王者荣耀app新版本发布。
现在汽车产业也正在经历这样的过程。你的汽车不再是一台只能跑路的机器,车企可以持续发布新系统新功能,通过通过OTA方式免费推送给车主,为车主提供可持续升级的驾驶服务体验;
先说一下FOTA(Firmware-over-the-air,固件在线升级),它指的是给汽车下载一个完整的固件镜像或者修补现有的固件(固件是用来直接控制硬件的软件程序)。
例如它可以升级咱们车辆的转向系统,让我们的驾驶操作更加轻松,升级油门踏板的反应力度,让加速更线性舒适等等,总之相比SOTA而言,FOTA技术含金量更高。
之前特斯拉 Model 3 在上市后,其刹车逻辑就存在着问题,百公里/小时的制动刹车距离为46米,通过后续的OTA升级之后,制动刹车距离缩短了6米,大幅提升了行车时的安全性。2021年12月3日,特斯拉通过官方社交平台对外宣布:特斯拉正式在国内将“后排座椅加热功能”OTA升级服务调整为“寒冷天气功能”OTA升级服务,再度加码用户冬季用车体验。
SOTA(Software-over-the-air,软件在线升级)的升级方式相比FOTA而言就要简单一些了,它一般作为一个迭代更新的“增量”出现,汽车厂商仅仅需要发送需要修改的部分即可,更像是我们通常意义上说的“补丁”。
这种修改方式有两个好处,一是能够尽量减少下载系统的时间和数据量,二是大幅降低了系统更新时失败几率。例如我们升级多媒体系统更换操作界面、主题,甚至是更换仪表盘显示风格时,用到的基本都是这种SOTA的升级方式,这也是如今我们自主品牌汽车OTA升级主要方式。
在安装包下载过程中,设备可以正常使用。也就是说整个下载过程对用户来说是无感的,下载完成后,系统再启动更新。比如智能手机升级或者iOS系统都是采用后台式方式,新系统下载过程中,手机可以正常使用。
升级过程中出现问题或者新安装包有问题,还可以选择之前的老系统继续使用,缺点是安装包需要下载到设备上,占用一部分存储空间。
在安装包下载过程中,设备无法使用,直至升级结束才可。在存储空间比较紧张的时候,这种下载方式是一个不错的选择。但是如果升级过程中出现问题或者新安装包有问题,系统就只能一直待在系统更新中等待再次升级尝试,此时设备的正常功能已无法使用,从用户使用角度来说,可以说此时设备已经“变砖”了。相比下来,后台式下载模式虽然牺牲了一部分存储空间,但是换来了更好的升级体验。
由于篇幅有限,其它相关的概念没法都在此进行更多的解释说明,同时以上内容也是个人整理,不是100%正确,如果能够帮助到你去理解这些概念,那就值得了。