软件架构的非功能特征
1.可修改性
大型的工业和商业软件系统的寿命周期通常都是很长的,有时候会长达20年甚至更长。很多这类应用程序在开发结束后都不是固定不变的,而在其整个生命周期内不断演化。原来的需求又会变化,还会出现新的需求。为了降低维护成本和修改工作量,应用程序的软件必须为修改和演化做好准备。
2.互操作性
系统中的软件并非独立,经常需要与其他系统或环境交互。为了提高互操作性,设计软件架构时,对那些外部可见的功能和数据结构,必须提供明确的访问途径。
互操作性的另一方面是程序与使用其他编程语言编写的软件系统的交互。
3.效率
效率与执行软件是使用的资源及其对响应速度、吞吐量和存储空间消耗的影响相关。
要提高应用程序的效率,不能光靠使用精巧的算法,在组件之间合理的分配职责以及组件之间的耦合度也是很重要的。
在分布式软件系统中,效率也扮演者重要的角色,分布式应用程序底层的IPC(进程间通信)必须足够快,能够以足够高的速度传输消息和数据,诸如Forwarder-Reciever
等模式致力于解决效率问题,然而,很多模式都为解决问题增加了间接程度,这可能降低而不是提高效率
4.可靠性
可靠性是指,无论应用程序或系统发生错误还是用户以意外或错误的方式使用,软件系统都能继续运行。一般可以将可靠性分为两个方面。
容错: 其目标是在发生错误时确保行为正确并自行修复,如分布式软件系统在到远程组件的连接断开时重新建立连接,修复这种错误后,软件系统可继续或重新执行错误发生时正在执行的操作。
健壮性:指的是对应用程序进行保护,以抵御错误的使用方式和无效输入,确保他在发生意外错误时处于指定的状态。请注意,不同于容错,健壮性并不一定意味着软件能够自发成错误时继续运行,也可能只保证软件以指定的方式终止即可。
软件架构对软件系统的可靠性影响重大,为提高可靠性,软件架构可采取的方式包括
有意在应用程序中添加冗余
集成监视组件或错误处理
5.可测试性
软件系统的规模日益增大并且越来越复杂,工业软件尤为如此,这导致测试更困难,更昂贵。
要简化软件系统正确性的评估工作,有赖于架构的支持,支持可测试性的软件架构有助于发现并修复错误,临时集成调试代码和调试组件也更容易。
6.可重用性
可重用性是当前软件工程讨论最多的主题之一,它有望缩减软件系统的开发时间和成本,还可以改善软件质量,可重用性主要包括两个方面: 通过重用开发软件以及开发时考虑重用。
通过重用开发软件: 这意味着重用既有项目或商业库的组件和成果、设计分析、设计规范或代码组件。
开发软件时考虑重用: 开发软件时专注于生成在未来的项目中可重用的组件,这要求当前开发的应用程序采用的软件架构允许哥哥部分彼此独立,这样无需做重大的修改就能在其他系统使用它们