免费智能真题库 > 历年试卷 > 系统架构设计师 > 2016年下半年 系统架构设计师 下午试卷 案例
  第1题      
  知识点:   管道   机密性   开发过程   软件架构   编程语言   编辑器   仓储   调试   集成开发环境   架构设计   开发工具   开发环境   开发人员   模块化   评审   软件架构设计   完整性   中断

 
阅读以下关于软件架构设计的叙述,在答题纸上回答问题1至问题3。
【说明】
某软件公司为某品牌手机厂商开发一套手机应用程序集成开发环境,以提高开发手机应用程序的质量和效率。在项目之初,公司的系统分析师对该集成开发环境的需求进行了调研和分析,具体描述如下:
a.需要同时支持该厂商自行定义的应用编程语言的编辑、界面可视化设计、编译、调试等模块,这些模块产生的模型或数据格式差异较大,集成环境应提供数据集成能力。集成开发环境还要支持以适配方式集成公司现有的应用模拟器工具。
b.经过调研,手机应用开发人员更倾向于使用Windows系统,因此集成开发环境的界面需要与Windows平台上的主流开发工具的界面风格保持一致。
c.支持相关开发数据在云端存储,需要保证在云端存储数据的机密性完整性
d.支持用户通过配置界面依据自己的喜好修改界面风格,包括颜色、布局、代码高亮方式等,配置完成后无需重启环境。
e.支持不同模型的自动转换。在初始需求中定义的机器性能条件下,对于一个包含50个对象的设计模型,将其转换为相应代码框架时所消耗时间不超过5秒。
f.能够连续运行的时间不小于240小时,意外退出后能够在10秒之内自动重启。
g.集成开发环境具有模块化结构,支持以模块为单位进行调试、测试与发布。
h.支持应用开发过程中的代码调试功能:开发人员可以设置断点,启动调试编辑器可以自动卷屏并命中断点,能通过变量监视器查看当前变量取值。
在对需求进行分析后,公司的架构师小张查阅了相关的资料,认为该集成开发环境应该采用管道一过滤器(Pipe-Filter)的架构风格,公司的资深架构师王工在仔细分析后,认为应该采用数据仓储(Data Repository)的架构风格。公司经过评审,最终采用了王工的方案。
 
问题:1.1   识别软件架构质量属性是进行架构设计的重要步骤。请分析题干中的需求描述,填写表1-1中(1)~(5)处的空白。
 
问题:1.2   请在阅读题干需求描述的基础上,从交互方式、数据结构、控制结构和扩展方法4个方面对两种架构风格进行比较,填写表1-2中(1)~(4)处的空白。
 
问题:1.3   在确定采用数据仓库架构风格后,王工给出了集成开发环境的架构图。请填写图1-1中(1)~(4)处的空白,完成该集成开发环境的架构图。
 
 
 

   知识点讲解    
   · 管道    · 机密性    · 开发过程    · 软件架构    · 编程语言    · 编辑器    · 仓储    · 调试    · 集成开发环境    · 架构设计    · 开发工具    · 开发环境    · 开发人员    · 模块化    · 评审    · 软件架构设计    · 完整性    · 中断
 
       管道
        管道是提供非结构化数据交换和实现任务同步的内核对象。每个管道有两个端口,一端用来读,另一端用来写。数据在管道中就像一个非结构的字节流,数据按照FIFO方式从管道中读出。一般EOS内核支持两类管道对象:
        (1)命名管道。具有一个类似于文件名的名字,像文件或设备一样,出现在文件系统中,需要使用命名管道的任何任务或ISR都可以用该名字对其进行引用。
        (2)无名管道。一般动态创建,且必须使用创建时返回的描述符才可引用此类型的管道。
        通常,管道支持以下几种操作:创建和删除一个管道、读、写管道、管道控制、管道上的轮询。
 
       机密性
        安全WAP(Wireless Application Protocol,无线应用协议)应用使用SSL(Secure Sockets Layer,安全套接字层)和WTLS(Wireless Transport Layer Security,无线传输层安全)来保护安全传输的不同部分,其中SSL用来保护应用中的有线连接部分,而WTLS主要用来保护无线连接部分。
        WTLS在操作上类似SSL,但WTLS对RSA和ECC都提供支持。另外,WTLS可以在慢速、资源少的环境下提供安全服务,而SSL只能加重环境的负担。WAP协议栈位于OSI参考模型的第4~7层,对于基于IP的网络,应用UDP协议,而对于非IP网络,应用WDP(Wireless Datagram Protocol,无线数据报协议)协议。WTLS是WAP协议栈中的安全协议,可以用来在无线环境中保护UDP和WDP业务。
 
       开发过程
        嵌入式系统软件的开发过程可以分为项目计划、可行性分析、需求分析、概要设计、详细设计、程序建立、下载、调试、固化、测试及运行等几个阶段。
        项目计划、可行性分析、需求分析、概要设计及详细设计等几个阶段,与通用软件的开发过程基本一致,都可按照软件工程方法进行,如采用原型化方法、结构化方法等。
        :由于嵌入式软件的运行和开发环境不同,开发工作是交叉进行的,所以每一步都要考虑到这一点。
        程序建立阶段的工作是根据详细设计阶段产生的文档进行的,主要是源代码编写、编译链接等子过程,这些工作都在宿主机上进行,不需要用到目标机。产生应用程序的可执行文件后,就要用到交叉开发环境进行调试,根据实际情况可以选用3.6.3节中提到的调试方法或其有效组合来进行。由于嵌入式系统对安全性和可靠性的要求比通用计算机系统要高,所以,在对嵌入式系统进行白盒测试时,要求有更高的代码覆盖率。
        最后,要将经调试后正确无误的可执行程序固化到目标机上。根据嵌入式系统硬件配置的不同,可以固化在EPROM(Erasable Programmable ROM,可擦除可编程ROM)和Flash等存储器中,也可固化在DOC(DiskOnChip)等电子盘中,通常还要借助一些专用编程器进行。
 
       软件架构
        随着嵌入式技术的发展,特别是在后PC时代,嵌入式软件系统得到了极大的丰富和发展,形成了一个完整的软件体系,如下图所示。这个体系自底向上由3部分组成,分别是嵌入式操作系统、支撑软件和应用软件。
        
        嵌入式系统的软件架构
        嵌入式操作系统(Embedded Operating System,EOS)由操作系统内核、应用程序接口、设备驱动程序接口等几部分组成。嵌入式操作一般采用微内核结构。操作系统只负责进程的调度、进程间的通信、内存分配及异常与中断管理最基本的任务,其他大部分的功能则由支撑软件完成。
        嵌入式系统中的支撑软件由窗口系统、网络系统、数据库管理系统及Java虚拟机等几部分组成。对于嵌入式系统来讲,软件的开发环境大部分在通用台式计算机和工作站上运行,但从逻辑上讲,它仍然被认为是嵌入式系统支撑软件的一部分。支撑软件一般用于一些浅度嵌入的系统中,如智能手机、个人数字助理等。
        嵌入式系统中的应用软件是系统整体功能的集中体现。系统的能力总是通过应用软件表现出来的。
 
       编程语言
        尽管高级语言能够完成大部分的嵌入式软件开发工作,但汇编语言仍然不可替代。汇编语言可以直接对硬件进行操作,代码效率高,所以经常应用在系统移植以及直接控制硬件的场合。此外,良好的汇编基础也有助于程序的调试。
        越是高级的语言,其编译和运行的系统开销就越大,应用程序也越大,运行越慢。因此一般来说,编程人员都会首选汇编语言和C语言,然后才会考虑C++语言或Java语言。
 
       编辑器
        从理论上来说,任何一个文本编辑器都可以用来编写源代码。但是为了提高编程的效率,一个好的编辑器应该具备如下一些特点:
        (1)支持C语言、汇编语言等程序设计语言的语法高亮显示;
        (2)支持文件管理操作(如打开文件、保存文件、关闭文件等)、文件编辑操作、文件打印、文本查找等功能;
        (3)编辑窗口可以同时作为调试时源代码执行的跟踪窗口;
        (4)通过“编译结果输出窗口”可以直接定位到相应的源代码编辑窗口;
        (5)提供一系列辅助编辑工具;
        (6)编辑器可以同时打开多个窗口进行编辑,可编辑的文件大小理论上无限制;
        (7)编辑器的编辑命令和编辑操作最好与标准的Windows编辑器功能一致,以便熟悉Windows的用户使用。
        在各种集成开发环境中,一般都会提供一个功能强大的编辑器。UltraEdit和Source Insight是两个常用的独立编辑器。
        UltraEdit是一个功能强大的文本编辑器。它可以取代记事本,用来编辑文本文字,也可以用来编写各种语言的源代码。它内建英文单词检查、C++及Visual Basic语法加亮显示,可同时编辑多个文件。即使打开一个很大的文件,速度也不会慢。UltraEdit附有HTML Tag颜色显示、搜寻替换以及无限制的还原功能。它支持二进制和十六进制编辑,可以用来直接修改EXE或DLL文件。
        Source Insight是一款面向工程项目的源码编辑和查看软件,其用户界面友好,变量和函数名都以特定的颜色表示出来,非常直观。对于各种语言的源文件,如C/C++、C#和Java,它能自动解析程序的语法结构,动态地保持符号信息数据库,并主动显示有用的上下文信息。Source Insight不仅是一个功能强大的程序编辑器,它还能显示参考树、类继承图和调用树等信息。它具有快速源代码导航功能,用户可以使用各种搜索命令,在各个源文件的不同函数和变量定义之间来回跳转,非常方便,因此它很适合于编辑大型软件。
 
       仓储
               仓储的作用和意义
               在物流系统中,将通过仓库实现的“储存”职能简称为仓储。仓储是“对物品进行保存及对其数量、质量进行管理控制的活动”。它是物流系统的一个子系统,在物流系统中起着缓冲、调节和平衡的作用。仓储和运输长期以来被看作为物流活动的两大支柱。
               仓储的目的是克服产品生产与消费在时间上的差异,使物资产生时间效果,实现其使用价值。如大米一年收获1~2次,必须用仓库进行储存以保证平时的均衡需求。又如水果或者鱼虾等水产品在收获季节时需要在冷藏库进行储存,以保证市场的正常需要并防止价格大幅度起落。产品从生产领域进入消费领域之前,往往要在流通领域停留一定时间,这就形成了商品储存。在生产过程中原材料、燃料、备品备件和半成品也需要在相应的生产环节之间有一定的储备,作为生产环节之间的缓冲,以保证生产的连续进行。
               所以通过仓储,可使商品在最有效的时间段发挥作用,创造商品的“时间价值”和“使用价值”。利用仓储这种“蓄水池”和“调节阀”的作用,还能调节生产和消费的失调,消除过剩生产和消费不足的矛盾。出于政治、军事需要或为了防止地震、水灾、旱灾、虫灾、风灾、瘟疫等人类不可抗拒的自然灾害所进行的战略性物资储备,在任何时候和任何情况下都是必要的。
               仓库的机能
               自从人类社会生产有剩余产品以来,就有储存活动,而储存物品的建筑物或场所,一般称为仓库。也就是说仓库是储存、保管物品的建筑物和场所的总称。随着社会生产水平的提高,社会化生产方式的出现,产品空前丰富,商品经济占有重要地位,出现了为商品流通服务的仓库。社会化的大生产又需要有保证生产需要的原材料和零部件仓库。仓库成为生产和消费领域中物资集散的中心环节,其功能已不单纯是储存、保管。从现代物流系统观点来看、仓库是物流系统的调运中心,在这里对物流进行有效的、科学的管理与控制,使物流系统更顺畅、更合理地运行。一般来说,仓库应具有以下的功能:
                      储存的功能
                      这是仓库的最基本的传统功能,因此,仓库应具有必要的空间用于容纳物品。库容量是仓库的基本参数之一。商品生产与商品消费存在着时间上的不均衡,这就使得商品流通的连续进行存在着时间上的矛盾。要克服这个矛盾,必须依靠储存来发挥作用。通过储存,可以保证商品流通的连续性和均衡性,才能使市场上具有连续充足的商品供给。因此可以说,储存职能创造着物流的时间效用,是物流的支柱。虽然,商品储存在商品流通过程中处于一种或长或短的相对停滞状态,但这种停滞状态是由产品的产销方式和产销时间决定的,它是商品流通的物质保证,是商品流通所必需的。正如马克思在分析商品流通与商品储存关系时指出的:“商品停滞要看作商品出售的必要条件。”
                      同时,在储存过程中应保证物品不丢失、不损坏、不变质。要有完善的保管制度,合理使用搬运机具,有正确的操作方法,在搬运和堆放时不能碰坏或压坏物品。根据所储存货物的特性,仓库里应配有相应的设备,以保持储存物品的完好性。例如对水果、鱼肉类仓库要控制其温度,使之成为冷藏仓库及冷冻仓库;储存精密仪器的仓库应防潮防水,保持温度恒定,需要空气调节及恒温设备;一些储存挥发性溶剂的仓库必须有通风设备,以防止空气中挥发性物质含量过高而引起爆炸。
                      调节供需的功能
                      从生产和消费两方面来看,其连续性的规律都是因产品不同而异,因此,生产节奏和消费节奏不可能完全一致:有的产品生产是均衡的,而消费不是均衡的,如电风扇等季节性商品;相反,有的产品生产节奏有间隔而消费则是连续的,如粮食。这两种情况都产生了供需不平衡,这就要有仓库的储存作为平衡环节加以调控,使生产和消费协调起来,这也体现出物流系统创造物资时间效用的基本职能。
                      调节货物运输能力的功能
                      各种运输工具的运量相差很大。船舶的运量大,海运船一般是万吨以上,内河船也以百吨或千吨计。火车的运量较小,每节车皮能装30~60吨,一列火车的运量多达数千吨。汽车的运量最小,一般每车只有4~10吨。在码头和车站进行不同运输方式的转运时,运输能力是很不匹配的,这种运力的差异必须通过仓库或货场将货物短时存放以进行调节和衔接。
                      流通加工的功能
                      由于商品产销方式的不同,生产性消费一般要求大包装、单花色、大统货、单规格、散装件,而个人生活消费则需要商品小包装、多花色、分规格、组合件等,这就需要在流通中进行必要的流通加工,才能适应商品销售的需要。流通加工是在商品从生产者向消费者运动的过程中,为了促进销售维护商品质量和实现物流效率,而对商品进行的再加工。流通加工的内容,包括装袋、分装、贴标签、配货、数量检查、挑选、混装、刷标记、剪断、组装和再加工改制等。流通加工职能的发挥,有利于缩短商品的生产时间,满足消费者的多样化需求,克服生产单一性与需求多样化的矛盾,提高商品的适销率。
                      现代仓库的发展趋势是从储存仓库向流通性仓库的方向发展,仓库成为流通、销售、零部件供应的中心,其中一部分在所属物流系统中起着货物供应的组织协调作用,被称为物流中心。这一类仓库不仅具备储存货物的设施,而且增加了分拣、捆包、流通加工、信息管理等设置,这样既扩大了仓库的经营范围,提高了物资综合利用率,又促进了物流合理化,方便了消费者,提高了服务质量。许多仓库都改建成了物流中心、流通中心或配送中心,由储存型的仓库转为流通型的物流结点。本文将在后文对配送中心进行介绍。
 
       调试
        调试的任务就是根据测试时所发现的错误,找出原因和具体的位置,进行改正。调试主要由程序开发人员来进行,谁开发的程序就由谁来进行调试。常用的调试方法有试探法、回溯法、对分查找法、归纳法和演绎法。
 
       集成开发环境
        嵌入式软件开发环境起初主要由专门开发工具的公司提供,这些公司根据不同操作系统和不同处理器版本进行专门定制,如美国Microtec公司的交叉开发工具曾经被VRTX、pSOS等定制采用。随着用户对开发工具套件的需求增加,一些著名的操作系统供应商开始发展本系列操作系统产品的开发工具套件,如WindRiver公司的Tornado、微软的Windows CE嵌入式开发工具包等。
        在国际上,嵌入式软件开发环境的另一支研发队伍是GNU。GNU在因特网上提供免费的相关研究和开发成果,成为自主开发嵌入式软件开发环境的重要资源。一些公司已在GNU软件的基础上,经过集成、优化和测试,推出更加成熟、稳定的商业化嵌入式软件开发环境。
        随着嵌入式系统的发展,嵌入式软件开发环境越来越重要,它直接影响到嵌入式软件的开发效率和质量。目前的开发环境已向开放性、集成化、可视化和智能化的方向发展,将各种类型且功能强大的软件工具,如编辑器、编译器、连接器、调试器、版本管理、用户界面等,有机地集成在一个统一的集成开发环境(Integrated Development Environment,IDE)中。
               Tornado
               Tornado是WindRiver公司推出的一个集成开发环境。它由三个高度集成的部分组成:运行在宿主机和目标机上的交叉开发工具和实用程序;运行在目标机上的实时操作系统VxWorks;用来连接宿主机和目标机的各种通信介质,如以太网、串口、在线仿真器ICE或ROM仿真器等。
               Tornado提供的交叉开发工具和实用工具主要有:源代码编辑工具、图形化的交叉调试工具、工程配置工具、集成仿真工具、诊断分析工具、C/C++编译工具、宿主机-目标机连接配置工具、目标机系统状态浏览工具、命令行执行工具、多语言浏览工具及图形化内核配置工具等。在Tornado中,宿主机上的工具与目标机之间的通信由目标服务器和目标代理共同完成。如下图所示,在形式上目标代理是VxWorks上的一个任务。调试命令通过宿主机上的目标服务器发送给目标代理。这些调试请求决定了目标代理应如何控制目标机上的其他任务。
               
               Tornado环境中宿主机与目标机之间的关系
               .图形化的交叉调试器CrossWind/WDB:支持任务级和系统级两种调试方式,支持混合源代码和汇编代码显示,支持多目标同时调试,具有良好的图形用户界面。
               .工程配置工具Project:用于对VxWorks操作系统及其组件进行自动配置,进行依赖性分析和代码容量计算,自动生成Makefile文件。
               .集成仿真工具VxSim:提供与真实目标机完全一致的调试和仿真运行环境。
               .诊断分析工具WindView:一个图形化的动态诊断和分析工具,主要是向开发者提供在目标机上运行的应用程序的许多详细情况。
               .C/C++编译工具:Tornado提供以下支持C语言和C++语言的工具和类库:Diab C/C++编译器、GNU C/C++编译器及iostreams类库。
               .宿主机-目标机连接配置工具Launcher:位于Tornado环境的最上层,开发者可以通过它来设置开发环境。
               .目标机系统状态浏览工具Browser:一个图形化工具,能随时提供目标系统的全面状态信息。
               .命令行执行工具WindSh:一个功能强大的命令行解释器,可以直接解释、执行C语言表达式,调用目标机上的C函数及访问已在系统符号表中定义的变量。
               .多语言浏览工具WindNavigator:浏览源程序代码,用图形化的方式显示函数调用关系,从而实现快速的代码定位。
               .图形化内核配置工具WindConfig:通过WindConfig提供的图形向导,用户可以方便地配置VxWorks内核及其组件的参数。
               Tornado的特点:
               (1)友好的开发环境。Tornado可以运行在不同的系统中,支持UNIX、Windows NT、Windows 98/95等。
               (2)适用于开发不同类型的目标机。针对不同的目标机,Tornado为开发者提供了一个一致的图形接口和人机界面。这样,当开发人员转向新的目标机时,不必再花费时间去学习或适应新的开发工具。事实上,Tornado的所有工具都驻留在开发平台上。
               (3)工具齐备,具有丰富的交叉开发工具和实用工具。
               (4)开放的、可扩展的开发环境。Tornado是一个完全开放的环境,开发人员或第三方厂商可以很容易地把自己的工具集成到Tornado框架下。
               Windows CE应用程序开发工具
               如下图所示,Windows CE应用程序开发工具包括:①Platform Builder;②eMbedded Visual Tools;③eMbedded Visual Basic;④eMbedded Visual C++。它们都是专门针对Windows CE操作系统的开发工具。
               
               Windows CE应用程序开发工具
               Microsoft Windows CE Platform Builder为开发商迅速创建一个嵌入式系统提供了全部相关工具。Platform Builder集成开发环境使开发者能够对新一代高度模块化的设计进行配置、创建与调试,以实现嵌入式系统的灵活性与可靠性,并与Windows和Web功能特性紧密结合。它的特点主要包括:
               .通过使用改进的目标-宿主集成与连接特性来提高工作效率,节省嵌入式系统的创建时间。这些特性包括:集成化连接与下载、集成化目标控制、状态监视器、灵活的创建选择、简化操作系统配置等。
               .通过使用先进的系统级调试功能来提高调试速度。Platform Builder的系统级调试器目前可为硬件辅助和系统级调试提供支持,从而大大扩展了调试功能的作用范围。具体包括:硬件辅助调试、源点级调试、新型的内核追踪器、远程系统信息、远程性能监视器、改进的调试器用户界面、调试区间等。
               .提供了一个新型扩展模型,可以帮助开发商将各类特性集成到开发环境当中。包括:微处理器控制单元、嵌入式开发工具控制单元等。
               Microsoft eMbedded Visual C++和eMbedded Visual Basic是开发下一代Windows CE通信、娱乐及信息访问等应用程序时的功能强大的工具。它们所提供的全面高速应用程序开发环境能够帮助开发者在各类不同设备上,迅速就相关的Windows CE应用程序进行创建、调试和部署,并且在不牺牲控制功能、性能表现及有关灵活性的前提下,提高Windows CE的开发效率。这两个产品的特点主要包括:
               .开发工作效率比较高。这两个集成开发环境与传统的Windows应用开发环境非常相似,因此开发人员无需额外的培训即可熟练掌握它们的使用方法。而编程时的在线提示辅助功能(如语句完成、参数信息和语法错误检查等),能够大大提高程序员的工作效率。另外,通过创建可重复使用的ActiveX组件,可以将软件开发的复杂程度降至最低水平。
               .开发过程与集成化调试得以简化。允许eMbedded Visual Tools在编译完成后,从移动设备或模拟器上的IDE中自动复制并启动相关的应用程序,从而实现应用程序的迅速测试和执行。在调试程序时,可以使用集成化调试器,当应用程序在Windows CE设备上(或模拟器内)运行的同时对其错误予以消除。另外,在测试时可以先在Windows CE设备模拟器上对应用程序进行测试,以避免高昂的硬件成本投资。
               .针对Windows CE平台的全面访问。包括TCP/IP通信机制、COM组件模型、ActiveX控件、设备的API接口函数等。
               .面向最新的Windows CE设备创建相应的解决方案。例如,Handheld PC Pro、Palm-size PC及Pocket PC等Windows CE设备。
               .迅速、灵活的数据访问。数据存储可通过相关连接来实现与远程数据源之间的同步。
               Linux环境下的集成开发环境
               在Linux环境下也有一些很好的集成开发环境,如Kdevelop、Eclipse和Anjuta等。
                      Kdevelop
                      Kdevelop是KDE小组开发的Linux/UNIX操作系统上的C/C++集成开发环境,为快速开发C/C++应用程序提供了强有力的开发工具。
                      Kdevelop的操作界面类似于微软的Visual Studio,提供编辑、编译、连接、除错、版本管理及计划管理等基本的IDE功能。此外它还内建了一个可以产生Qt图形界面的资源编辑程序。对于C++程序,它额外提供了类浏览器。此外其文件管理程序内建了所有有关KDE发展所需的文件,并提供搜寻的功能。
                      Eclipse
                      Eclipse是替代IBM Visual Age for Java(简称IVJ)的下一代IDE开发环境,但它未来的目标不仅仅是成为专门开发Java程序的IDE环境。根据Eclipse的体系结构,通过开发插件,它能扩展到任何语言的开发,甚至能成为图片绘制的工具。目前,Eclipse已经开始提供C语言开发的功能插件。而且它是一个开放源代码的项目,任何人都可以下载其源代码,并在此基础上开发自己的功能插件。
                      Anjuta
                      Anjuta是GNU/Linux平台下的C/C++集成开发环境,它主要是为了开发GTK/GNOME程序而设计的。Anjuta利用GLADE来生成优美的用户界面,加之以自己强大的源程序编辑功能,使之成为应用程序快速开发的集成开发环境。以前,人们使用GLADE做界面,用emacs或vi来编辑源程序,再用某种终端模拟器编辑开发项目。而现在使用Anjuta,所有这些繁杂零散的任务都可以在一个统一的、集成的、自然而然的环境下完成。
 
       架构设计
        WebApp描述了使WebApp达到其业务目标的基础结构,典型使用多层架构来构造,包括用户界面或展示层、基于一组业务规则来指导与客户端浏览器进行信息交互的控制器,以及可以包含WebApp的业务规则的内容层或模型层,描述将以什么方式来管理用户交互、操作内部处理任务、实现导航及展示内容。模型-视图-控制器(Model-View-Controller,MVC)结构是WebApp基础结构模型之一,它将WebApp功能及信息内容分离。
 
       开发工具
        对应于开发过程的各种活动,开发工具通常有需求分析工具、设计工具、概要设计工具、编码与排错工具、测试工具等。
               需求分析工具
               用于辅助需求分析活动的软件称为需求分析工具,它辅助系统分析师从需求定义出发,生成完整的、清晰的、一致的功能规范(Functional Specification)。功能规范是系统所要完成的功能的准确而完整的陈述,它描述该系统要做什么及只做什么。按照需求定义的方法可将需求分析工具分为基于自然语言或图形描述的工具和基于形式化需求定义语言的工具。
               设计工具
               用于辅助设计活动的软件称为设计工具,它辅助设计人员从系统功能规范出发,得到相应的设计规范(design specification)。对应于概要设计活动和详细设计活动,设计工具通常可分为概要设计工具和详细设计工具。
               概要设计工具
               用于辅助设计人员设计目标系统的体系结构、控制结构和数据结构。详细设计工具用于辅助设计人员设计模块的算法和内部实现细节。除此之外,还有基于形式化描述的设计工具和面向对象分析与设计工具。
               实现与排错工具
               辅助实现人员进行嵌入式硬件实现的电子设计自动工具、用于目标板调试的硬件仿真器,进行编码活动的工具有编码工具和排错工具。编码工具辅助编程人员用某种程序设计语言编制源程序,并对源程序进行翻译,最终转换成可执行的代码。因此,编码工具通常与编码所使用的程序语言密切相关。排错工具用来辅助程序员寻找源程序中错误的性质和原因,并确定出错的位置。
               测试工具
               用于支持进行软件测试的工具称为测试工具,分为数据获取工具、静态分析工具、动态分析工具、模拟工具以及测试管理工具。其中,静态分析工具通过对源程序的程序结构、数据流和控制流进行分析,得出程序中函数(过程)的调用与被调用关系、分支和路径、变量定义和引用等情况,发现语义错误。动态分析工具通过执行程序,检查语句、分支和路径覆盖,测试有关变量值的断点,即对程序的执行流进行探测。
 
       开发环境
        下图是一个典型的CPD环境,通常包含三个高度集成的部分:
        (1)运行在宿主机和目标机上的强有力的交叉开发工具和实用程序。
        (2)运行在目标机上的高性能、可裁剪的RTOS。
        (3)连接宿主机和目标机的多种通信方式。例如,以太网、串口线、ICE(In-Circuit Emulator,在线仿真器)、ROM仿真器等。
        宿主机提供的基本开发工具有交叉编译器、交叉链接器和源代码调试器等,作为目标机的嵌入式系统则可能提供一个动态装载器、链接装载器、监视器和一个调试代理等。在目标机和宿主机之间有一组连接,通过这组连接程序代码,映像从宿主机下载到目标机,这组连接同时也用来传输宿主机和目标机调试代理之间的信息。
        
        典型交叉平台开发环境
        目前,嵌入式系统中常用的目标文件格式是COFF(Common Object File Format)和ELF(Executable Linking Format)。另外,一些系统还需要有一些专门工具将上述格式转换成二进制代码格式才可使用。典型地,一个目标文件包含:
        (1)关于目标文件的通用信息,如文件尺寸、启动地址、代码段和数据段等具体信息。
        (2)机器体系结构特定的二进制指令和数据。
        (3)符号表和重定位表。
        (4)调试信息。
 
       开发人员
        ①多媒体软件:项目负责人、学科教学专家、教学设计专家、软件工程师、多媒体素材制作专家和多媒体课件制作专家。
        ②多媒体电子出版物:策划编导、文字编辑、美术编辑、音乐编辑和多媒体编辑。
 
       模块化
        模块是程序中数据说明、可执行语句等程序对象的集合,或者是单独命名和编址的元素。在系统体系结构中,模块是可组合、可分解和可更换的单元。
        模块化是指解决一个复杂问题时自顶向下逐层把系统划分成若干模块的过程。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。
        开发一个大而复杂的系统,将它进行适当的分解,不但可降低其复杂性,还可减少开发工作量,从而降低开发成本,提高软件生产率。这是模块划分的依据。
        (1)划分模块时,尽量做到高内聚、低耦合,保持模块的相对独立性,并以此原则优化初始的系统体系结构。
        (2)一个模块的作用范围应在其控制范围之内,且判定所在的模块应与受其影响的模块在层次上尽量靠近。
        一个模块的作用范围是指受该模块内一个判定影响的所有模块的集合。一个模块的控制范围指模块本身及其所有下属模块(直接或者间接从属于它的模块)的集合。
        (3)系统结构的深度、宽度、扇入和扇出应适当。
        (4)模块的大小要适中。
 
       评审
        对设计部分是否完整地实现了需求中规定的功能、性能等要求,设计方法的可行性,关键的处理及内外部接口定义的正确性、有效性、各部分之间的一致性等都一一进行评审。
 
       软件架构设计
        软件架构也称为软件体系结构,需要考虑如何对系统进行分解,对分解后的组件及其之间的关系进行设计,满足系统的功能和非功能需求。软件架构形成过程如下图所示。
        
        架构的形成过程概要
        软件架构设计需要从用户业务需求、未来应用环境、需求分析、硬件基础、接口输入、数据处理、运算或控制规律、用户使用等方面进行综合、权衡和分析基础上产生。面向某种问题的架构一旦确定就很难改变,随后的架构设计需要通过一系列的迭代开发完善,使得软件架构日趋成熟、稳定。
        软件架构的重要作用也在于控制一个软件系统的使用、成本和风险。好的架构要求是和谐的软件架构,包括与上一级系统架构相互和谐、与系统中同一级的其他组件架构互相和谐,确保系统满足性能、可靠性、安全性、信息安全性和互操作性等方面的关键要求,也具有可扩展、可移植性,从而为一个软件带来长久的生命力。
        在大量开发实践中,有很多广泛使用并被普遍接受的软件架构设计原则,这些原则独立于具体的软件开发方法,主要包括抽象、信息隐藏、强内聚和松耦合、关注点分离等。
        (1)抽象:这是软件架构的核心原则,也是人们认识复杂客观世界的基本方法。抽象的实质是提取主要特征和属性,从具体的事务中通过封装来忽略细节,并且运用这些特征和属性,描述一个具有普遍意义的客观世界。软件架构设计中需要对流程、数据、行为等进行抽象。复杂系统含有多层抽象,从而有多个不同层次架构。
        (2)信息隐藏:包括局部化设计和封装设计。局部化设计就是将一个处理所涉及到的信息和操作尽可能地限制在局部的一个组件中,减少与其他组件的接口。而封装设计是将组件的外部访问形式尽可能简单、统一。
        (3)强内聚和松耦合:强内聚是指软件组件内的特性,即组件内所有处理都高度相关,所有处理组合在一起才能组成一个相对完整的功能。而松耦合是指软件组件之间的特性,软件组件之间应尽量做到没有或极少的直接关系,使其保持相对独立,这样使得未来的修改、复用简单,修改之后带来的影响最小。
        (4)关注点分离:所谓关注点是软件系统中可能会遇到的多变的部分。如为适应不同运行接口条件,需要进行适应性的参数调整和驱动配置。关注点分离设计是将这部分组件设计成为相对独立的部分,使未来的系统容易配置和修改。而核心的部分可以保持一个相对独立的稳定状态。如果功能分配使得单独的关注点组件足够简单,那么就更容易理解和实现。但“展示某些关注点得到满足时,可能会影响到其他方面的关注点,但架构师必须能够说明所有关注点都已得到满足”。
        以上的原则中,删除需求细节或对细节进行抽象是最重要的工作,为用户的需求创建抽象模型,通过抽象将特殊问题映射为更普遍的问题类别,并识别各种模式。
        软件架构设计使用纵向分解和横向分解两种方式。纵向分解就是分层,横向分解就是将每一个层面分成相对独立的部分。经过分解之后,可以将一个完整的问题分解成多个模块来解决。模块是其中可分解、可组装,功能独立、功能高度内聚、之间低耦合的一个组件。
        类似于建筑架构,软件架构也决定了软件产品的好用、易用、可靠、信息安全、可扩展、可重用等特性,好的软件架构也给人完整、明确、清晰等赏心悦目的感觉,具有较长的生命力。
        架构设计是围绕业务需求带来的问题空间到系统解决空间第一个顶层设计方案。按照抽象原则,在这个阶段进行的架构设计关注软件设计环节抽象出来的重要元素,而不是所有的设计元素。在架构设计时将软件这些要素看作是黑盒,架构设计需要满足黑盒的外部功能和非功能需求的目标。一个软件的架构设计首先为软件产品的后续开发过程提供基础,在此基础上可将一个大规模的软件分解为若干子问题和公共子问题。而一般意义的软件设计是软件的底层设计,开发人员需要关注各子问题或要素的进一步分解和实现,是根据架构设计所定义的每个要素的功能、接口,进一步实现要素组件内部的配置、处理和结构。在遵守组件外部属性前提下,考虑实现组件内部的细节及其实现方法。对于其中的公共子问题,形成公共类和工具类,从而可以达到重用的目的。
        一般的软件构架是根据需求自上而下方式来设计,即首先掌握和研究利益相关方的关键需求,基本思路是首先进行系统级的软件架构设计,需要将软件组件与其外部环境属性绑定在一起,关注软件系统与外部环境的交联设计;其次将一个大的系统划分成各组成部分,这些部分可以按照架构设计的不同方法,分为层次或成为模块;之后再开始研究所涉及到的要素,再实现这些要素以及定义这些要素之间的关系。
        在实际工作中,软件构架也可采用自底向上的方法,前提是已经建立了一个成熟稳定的软件架构,也可以称之为“模式”。模式是组织一级设计某一类具体问题的顶层思路,是为了解决共有问题解的方案模板,但并不是一个问题的设计或设计算法。
        模式常常整合在一起使用,提供解决更大、更复杂问题的解决方案,而组成一个解决问题的通用框架。框架往往提供统一平台和开发工具,而且已经高效地利用了已经经过验证的模式、技术和组件。在新软件系统的设计中指定沿用或重用这种架构框架,这时其他重要元素可以在这个架构基础上针对新的需求进行扩展,有时是针对性地进行参数化设计。所以在架构设计中可以借用模式的概念进行设计,采用成熟的先进的设计框架和工具提高开发的效率,保证设计正确性。
        下图所示是针对架构设计中非功能需求的多维度分析,从中可知任何一个因素的变化都会带来对其他因素的影响。实际上软件架构设计属于软件设计过程的一部分,但超越了系统内部的算法和数据结构的详细设计。
        
        架构的多维度分析
        在架构设计阶段,需要定义边界条件、描述系统组织结构、对系统的定量属性进行约束、帮助对模型进行描述并基本构造早期的原型、更准确地描述费用和时间的评估。
 
       完整性
        完整性(Integrity)是指网络信息或系统未经授权不能进行更改的特性。例如,电子邮件在存储或传输过程中保持不被删除、修改、伪造、插入等。完整性也被称为网络信息系统CIA三性之一,其中I代表Integrity。完整性对于金融信息系统、工业控制系统非常重要,可谓“失之毫厘,差之千里”。
 
       中断
        中断是异步发生的,是来自处理器外部的I/O设备的信号的结果。硬件中断不是由任何一条专门的指令造成的,从这个意义上来说它是异步的。硬件中断的异常处理程序常常被称为中断处理程序(interrupt handler)。
               硬中断与软中断
               硬中断是由硬件产生的,例如磁盘、网卡、键盘、时钟等。每个设备或设备集都有它自己的IRQ(中断请求)。基于IRQ,CPU可以将相应的请求分发到对应的硬件驱动上。
               软中断是一组静态定义的下半部分接口,可以在所有的处理器上同时执行,即使两个类型相同也可以。但是一个软中断不会抢占另外的一个软中断,唯一可以抢占软中断的是硬中断。
               可屏蔽中断与不可屏蔽中断
               可屏蔽中断和不可屏蔽中断都属于外部中断,是由外部中断源引起的。不可屏蔽中断源一旦提出请求,CPU必须无条件响应,而对可屏蔽中断源的请求,CPU可以响应,也可以不响应。
               CPU一般设置两根中断请求输入线:可屏蔽中断请求INTR(Interrupt Require)和不可屏蔽中断请求NMI(Non Maskable Interrupt)。对于可屏蔽中断,除了受本身的屏蔽位控制外,还都要受一个总的控制,即CPU标志寄存器中的中断允许标志位IF(Interrupt Flag)的控制,IF位为1,可以得到CPU的响应,否则,得不到响应。IF位可以由用户控制,指令STI或Turbo C的Enable()函数,将IF位置1(开中断),指令CLI或Turbo_c的Disable()函数,将IF位清0(关中断)。
               中断优先级
               当多个中断源同时请求中断时,而CPU一次只能响应其中的一个中断,同时为了能响应所有中断,就引入中断优先级来处理。系统会根据引起中断事件的重要性和紧迫程度,将中断源分为若干个级别,称作中断优先级。中断优先级有两种:查询优先级和执行优先级。
               查询优先级是不可以更改和设置的,在该方式下当多个中断源同时产生中断信号时,中断仲裁器会选择中断源优先处理的顺序,此过程与是否发生中断服务程序的嵌套毫不相干。当CPU查询各个中断标志位的时候,会依照优先级顺序依次查询,当数个中断同时请求的时候,会优先查询到高查询优先级的中断标志位,但并不代表高查询优先级的中断可以打断已经并且正在执行的低查询优先级的中断服务。
               由于可屏蔽的中断源很多,故需要对其进行管理,如区分是哪个中断源发出的中断信号?哪个中断源最优先及怎样处理多级中断嵌套等。为此,可使用中断控制器对多个可屏蔽中断源进行管理。
               中断控制器能够对中断进行排队管理,避免中断信号的丢失,同时支持对不同中断进行优先级的配置,使高优先级中断能够中断低优先级中断,满足系统中具有更高时间约束特性功能的需要。
               中断嵌套
               当处理器正在处理一个中断时,有比该中断优先级高的中断源发出中断请求时,如果处理器正在执行中断处理程序,那么处理器会对高优先级的中断进行立即处理,处理完之后再返回到低优先级的中断服务程序继续执行。这样就形成了中断服务程序中套用中断服务程序的情况,即中断嵌套。可嵌套中断的处理流程和中断服务框图如下图所示。
               
               可嵌套中断处理流程
   题号导航      2016年下半年 系统架构设计师 下午试卷 案例   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
 
第1题    在手机中做本题