【技术前沿】软件架构的入门感受
作者:研发部 肖福建
最近的工作重点一直为制作软PLC,虽然花了很多时间,但仍然没有整理出更好的头绪,对于自己而言,软PLC是一个全新的内容,和之前所学软件也大相径庭,对硬PLC的了解少之又少,没有一个系统的架构,很盲目的在原地尝试,看过一些有关软件构架的书籍,终于有些体会,在这里和大家分享。
一般来说,软件架构设计是降低成本,改进质量,按时交付产品和按需交付产品的关键因素。系统的功能性是软件构架师通过组成体系架构的多种元素之间的交互作用来支持的。然而,架构设计的一个关键特性是,系统的品质是通过某些手段来实现的。软件的品质,例如性能,安全性和可维护性等,它们在缺少统一的架构设计视图时是无法实现的,因为这些品质并不是被限制在一个单一的架构设计元素中,而是渗透在整个架构设计体系中的。例如,为了满足性能要求,可能需要考虑体系架构中的每一个组件的实现时间,同时还要考虑各组件之间通讯所花费的时间。同样地,为了满足安全性要求,可能需要考虑两个组件之间自然的通讯,并且要在需要的特定的地方引入安全性提示组件。所有的这些关系都属于体系架构。架构设计模型的建立,通常是为了明确的确定我们已经满足了这些品质的要求。这是非常重要的,因为不论写在纸上的体系架构多么的完美,实现的软件才是评价体系架构是否达到这些品质的要求的唯一标准。
一个项目的成本来自多个方面。很明显,任务的持续时间和分配给每一部分的资源将会决定劳动力的成本。体系架构同样会帮助我们决定使用在交付的系统中的第三方组件的成本,以及支持开发成果的所有工具的成本,因为构架师参与的活动是一个经过挑选的恰当的开发环境,它允许设计人员,实现人员和其他小组成员使用同一个有效的方式一起工作。构架师的另外一个焦点是鉴别和管理项目的技术风险。技术风险的管理包括制定每一个风险的优先次序,以及确定一个恰当的风险缓解策略。优先权和风险缓解策略作为输入部分提供给项目经理。
如今的系统越来越复杂,这种复杂性需要我们去管理。自从一个体系架构只把焦点集中在这些元素上以来,它就提供了一个抽象的系统,因而提供了一个复杂的管理方法。同样,架构设计过程考虑组件的递归分解。这是处理一个大的问题的很好的一个方法,它可以把这个大问题分解成很多的小问题,再逐个的解决。
架构设计过程可以同时支持使用和建立复用资源。复用资源对于一个组织来说是有益的,因为它可以降低一个系统的成本,并且可以改进系统的质量。
架构设计过程可以在很多方面帮助我们降低维护费用。首先最重要的是架构设计过程要确保系统的维护人员是一个主要的涉众,并且他们的需求被作为首要的任务满足。一个被恰当文档化的体系架构不应该仅仅为了减轻系统的可维护性;构架师还应该确保结合了恰当的系统维护机制,并且在建立体系架构的时候还要考虑系统的适应性和可扩充性。
构架师还应该考虑那些需要改变的区域,并把它们隔离开。这样可以保证当单个组件或者一小部分组件发生变化时,整个系统不会受很大的影响。但是我们应该承认,有一些变化,例如关系到系统质量,如实现性和可靠性,是不能用这个方法隔离的。这就是构架师必须确保它的原因,当架构设计现在的系统时,他们需要考虑将来可能的需求,因为这个系统要从几十人的用户推广到上千人的用户群,例如,体系架构没有使用基础的方法改变是不正常的。
架构设计的一个重要的好处是,它可以允许我们在采取改变之前推断它所产生的影响。一个软件构架确定了主要的组件和它们之间的交互作用,两个组件之间的依赖性以及这些组件对于需求的可追溯性。
有了这个信息,例如需求的改变等可以通过组件的影响来分析。同样,改变一个组件的影响可以在依靠它的其它组件上分析出来。
这种分析可以协助我们确定一个改变所产生的成本,改变对于系统的影响以及改变所带来的风险,这个信息在我们确定改变的优先级以及研究这些改变时是绝对必要的。
以上便是我的一些感受,欢迎其他同仁进行讨论。