第2章 嵌入式系统工程设计
3. 执行项目
2.2 嵌入式系统工程设计方法简介
一般来说,在系统出货后产生的问题,会比在设计阶段中预想到的问题更加复杂,主要 的原因是系统所处的环境远比在实验室中多变。也因此,才能进一步解决问题。
另一方面,一个嵌入式系统可能在市场上大受好评,而需要加入新的功能,开发团队必 须根据现在的系统进行升级,或者重新设计系统,这些都在售后服务的范畴中。
系统生命周期小如消费性电子商品(如电子宠物),大如飞机上的航电系统,在系统正 式转交给客户后,一直到系统“退役”之前,都需要有人去维护它,甚至去升级它。因此根 据不同的系统生命周期,相关的维护计划就需要被拟定。对于生命周期小的产品,可能还没 用到系统故障,就被消费者丢置一旁。而生命周期长的系统,在其使用年限中,都需要有后 备的零件可以替换。
项目讨论
项目的讨论一个项目进行的反馈机制。通过这一个程序,项目团队的经验才可以被记录 下来,也就是说,这是一个撰写项目历史的过程。
事实上,项目在进行的同时,项目的相关文件即是一个项目的历史。而在项目完成后的 项目讨论,将对整个项目做一个整体的检讨,看看哪里做得好,哪里值得改进,这些经验都 是下一个项目的踏脚石,也是团队最重要的资产。记录下来的项目经验,不会随着人员的流 动而消失,但是项目团队的数据如果未经整理与分类,等时间一久,数据渐渐变多了以后,
对于团队与新进的人员来说,不但不是一种好的经验来源,反而会变成一种额外的负担。
因此,现在很多公司提倡所谓的知识管理(Knowledge Management, KM)。知识管理本 身的立意即在于保存众人的知识与经验,并经有效地分类与整理后,让体制内的人都可以享 受到这些宝贵的经验,并将产出再次放进知识库中。对于嵌入式系统的开发团队来说,这些 东西可能是大到像是项目系统工程的经验,也可能是次系统调试的程序。换句话说,知识库 将项目团队的知识保存的电子媒介中,等待有一天,某些人在碰到某一些之前曾经遇到的问 题时,可以在有参考的基准上,不需再重蹈覆辙,即可享有前人流血流汗所得的宝贵经验。
而对一个公司或团体来说,知识管理系统的建构确保了公司投资可以完整地留在公司内,不 会因为一两个关键人物的离职或跳槽,就把相关的知识一并带走。
2.2 嵌入式系统工程设计方法简介
2.2.1 由上而下与由下而上
由上而下(Top Down Approach)是一个正统的设计方式,也就是说,所有的设计皆是 遵循系统工程的流程来进行,确定需求、制订系统规格、设计、实现、测试、皆是一步一步、
按部就班地进行。
相对的就是由下而上(Button Up Approach)。由下而上的意思就是说,一个系统是由已 经有的基础(或组件)为起点,开始往上延伸,最后将系统完成。所以在先天上已经有所限 制。
其实大部分的项目都是这两种方式的混合体,很少有整个项目都是从上而下的,相同的,
也很少有整个项目都是都是由下而上的。在产品的设计上,即使是由上而下的设计方式也需 要考虑到现实因素。刚开始设计的人也许就会设计出他心中“完美”的系统。例如说,他会 使用非常特殊的电阻来匹配电路,而使用一个全世界都没有人生产的螺丝来固定系统。如果 在系统的设计阶段就考虑这些问题,就不会闹出刚才的笑话了。
2.2.2 UML 系统建模
UML(Unified Modeling Language)是一种原本设计用来描述对象导向程序语言开发的 图形化语言。由于它具有描述事物的多重性,所以理论上也可以被拉到其他领域使用。
- - 23
在实际使用上,根据不同的使用情况,UML 提供了不同的图形来描述系统。在 UML 中,包括了下面几种图形:
1.类图(Class Diagram)
2.对象图(Object Diagram)
3.用例图(Use Case Diagram)
4.顺序图(Sequence Diagram)
5.协作图(Collaboration Chart Diagram)
6.状态图(State Chart Diagram)
7.活动图(Activity Diagram)
8.组件图(Component Diagram)
9.部署图(Deployment Diagram)
虽然UML 的初始目的在于描述软件系统,尤其是对象导向项目的设计与规划。但由于 UML 本身包括了许多前人的智慧,因此 UML 也就更具有变形性和应用性,可以应用在不 同的问题领域上,当然可以在嵌入式系统设计过程中应用。
使用 UML 的好处
语言的用处在于沟通。UML 也是一种语言,它利用视觉化的方法来制定、构建以及记 录对象导向系统。因此,可以把UML 当作一种软件工程用的语言。
使用UML 的好处在于可以在短时间内了解别人要传达的消息,而不是花时间在了解消 息本身如何解读。UML 提供给用户基础的工具与基本的规范,在这个基础上,用户可以利 用这个语言去描述他所想要描述的系统,用不同的界面去描绘出系统的不同方面。
就嵌入式项目系统而言,从不同的视角有不同的表现,需要不同的方法去记录与描述。
传统的程序流程图无法详细描述到系统的每一个细节,只有利用适当的方法,才能将一个系 统的每一个功能在设计阶段就被审慎地考虑。在系统的设计阶段将系统的构架稳定下来,再 不会在系统完成实现时才发现系统有潜在的问题。
语言发明的本意在于沟通,而不在于制造误解。虽然UML 本身提供了丰富的词汇,但 并不表示项目成员需要学习每一个UML 细节。适当的 UML 界面可以让参与项目的人员对 系统更加了解、更容易互相讨论、对系统进行修改,以及保存项目的历史。
在嵌入式系统项目中,许多的情况都需要事先预想到的。嵌入式系统本质上就是一种强 壮性设计,加上许多系统用封闭型设计,无法像开放系统一样能轻易地进行维护。在设计阶 段使用UML 来描述系统的模型,可以及早确定系统的方向、规划系统的功能,并提早发现 问题。更能记忆团队的项目历程(或智慧),提供给下一次项目中使用。
2.2.3 面向对象 OO 的思想
随着系统的需求日益增加,系统的功能及复杂程度不断增大,为了使系统开发变得容易,
我们要逐步改进我们对系统的思考方式以及我们开发系统的的方式,这项新技术我们称之为 面向对象的的开发。
对象是客观世界中具有独立属性及能力的实体,有着某种特征(状态)和行为。在面向对 象的开发中我们常常遇到面向对象的分析(Object-Oriented Analysis)、面向对象的设计 (Object-Oriented Design)和面向对象的编程(Object-Oriented Programming)等。面向对 象的分析是所有软件分析活动的第一步,仔细的划分系统的各个部分,然后将各个部分作为 一个对象进行功能或行为上的分析和定义;面向对象的设计是将面向对象分析所建立的分析 模型转变为软件构造蓝图的设计模型,即在预定义的基本类框架上构建一个系统,这个阶段 中只要进一步确定各个对象的功能以及各个对象之间的关系;面向对象的编程是指使用面向 对象的设计语言(如 JAVA、C++、Ada 等)把面向对象设计的系统模型程序化,亦即是完成具 体实现。编码是软件开发过程中最基本、最底层的需要,它强调的是一种分析及解决问题的
- - 24 思路,而不在乎他所使用的语言工具。
在传统的结构化方法看来,它是将系统分解为很多基本函数的集合,数据被孤立分离,
并且不考虑并发。而面向对象方法则不同,它的基本分解单位为对象。在面对较复杂的系统 设计时,我们可以将它作为一个对象来进行分析。一个系统作为一个对象,它可以由多个部 分组成。同样,这个对象也可以分解为多个对象;若从代码实现的视角分析,面向对象代码 侧重于对象之间的交互,多个对象各司其职,相互协作以完成目标。
思考与练习
1.嵌入式系统项目开发的生命周期分那几个阶段?各自的具体任务是什么?
2.为何要进行风险分析?嵌入式项目主要有哪些方面的风险?
3.何谓系统规范?制定系统规范的目的是什么?
4.何谓系统规划?为何要做系统规划?
5.为什么在项目结束前需要进行项目讨论?
- - 25