软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口来实现。
软件体系结构是构建计算机软件实践的基础。与建筑师设定建筑项目的设计原则和目标,作为绘图家画图的基础一样,一个软件架构师或者系统架构师陈述软件架构以作为满足不同客户需求的实际系统设计方案的基础。
  而软件架构一般分为以下五个步骤:
  步骤1 确定架构目标。

  架构目标即是组成设计过程、确定使用范围并帮你确定什么时候该结束的因素。在设定架构目标的时候请考虑以下基本点:1、从一开始就要对架构目标有个清楚的认识。架构与设计的各个阶段所花费的时间将取决于这些目标。比如,你是在搭建一个原型?测试潜在的方式?还是准备为新应用创建一个长远的架构环境。2、了解架构的消费者。要确定架构是否会被其他设计师、开发人员、测试人员、业务人员或管理人员使用。确定架构受众的需求,以让架构更为成功、更有影响力。3、了解条件限制。了解技术限制、使用限制、和部署限制。从一开始就要了解这些限制,这样你才不会在将来遇到一些意想不到的麻烦。

  步骤2 关键场景。

  关键场景包括使应用获得成功的最重要的场景,还有能突出架构特点的用例。重要的场景标准如下:1.这些场景是业务关键的,比其它功能具有更高的使用要求,或者具有很高的技术/工艺风险。2.关系到功能属性和质量属性两个方面,或者具有交叉性的影响。比如CRUD操作对安全性非常敏感。3.它们是最重要的场景,贯穿应用的各层(级),或者对应用整体都有重要的影响。架构突出的用例标准如下:1.这些用例对应用部署的成功和验收非常重要。2.能够对设计进行足够的检验。区别系统场景与用户场景的不同是很重要的。系统场景指主要对应用与设备的内部操作产生影响的场景。比如在各层间传递的信息、连接数据存储、执行验证等。用户场景指用户发起或受用户控制的场景。比如创建一个定单、浏览产品、或者更新客户记录。突出架构特点的用例举例:用在线商场的程序创建一个订单并接收定单被确认的信息。使用库存管理程序更新某个产品记录,并更新所有相关的记录(比如价格列表)。在CRM程序中搜索并显示某个客户的细节。

  步骤3 对应用的了解。了解你的应用在完成的时候的大概情况。这将会使你的架构更实际,并与具体的条件限制和决定有更密切的联系。创建应用的大概视图应该包括以下步骤:1.决定应用的类型。首先决定所构建的应用的类型。它是一个移动应用、富客户端、服务、网络应用、还是组合应用?2.了解部署限制。然后,了解所部署的目标环境和它将对架构产生什么影响。3.确定重要的架构特点。确定你的架构将使用哪些类型。面向服务的架构?客户服务器?分层?消息总线或是某几种的组合?4.确定相关的技术。最后,根据应用类型和各种条件限制确定相关的技术。

  步骤4 主要危险区域。确定架构中最容易出错的区域。可以通过质量属性和交叉问题对危险区域进行整理。质量属性找出对于应用和场景很重要的质量属性。比如,大部分应用程序都需要解决安全性与性能的问题,而这些问题还需要根据易用性、灵活性等可能更为重要的属性进行权衡分析。以下是需要注意的重要的质量属性。 
  
范畴 注意事项
有效性 如何设计故障转移支持
  如何设计一个备用站点
  怎样计划备份与恢复
  如何设计运行时的更新
概念完整性 如何分离对外部的依赖性
  如何整合旧技术
  如何在不打断客户的情况下发展系统
灵活性 如何处理动态业务规则
  如何处理动态UI
  如何处理数据与逻辑过程中的变化
  如何处理业务需要的变化
互操作性 如何让应用在独立发展的同时实现互操作
  如何通过服务接口分离系统
  如何通过层的映射分离系统
易维护性 如何减少层与组件之间的依赖性
  如何实现一个插件式的架构
  如何选择合适的通信模型
易管理性 如何了解主要的失败模式
  如何对系统操作与健康状态进行监控
  如何根据负载对系统进行调整
性能 如何确定缓存策略
  如何设计层间的高性能通信
  如何设计高性能数据存取
  如何有效地管理资源
可靠性 如何处理不可靠的外部系统
  如何审查请求与任务
  如何对负载进行重定向
  如何处理失效的通信
  如何处理失效的操作
  如何处理异常
重用性 如何减少层与组件之间的重复性
  如何实现跨系统的共享
  如何实现组件和层之间的功能共享
可扩展性 如何设计可扩展的层与级
  如何扩展
  如何处理传输与负载的测试点
安全性 如何解决认证与授权问题
  如何防止恶意输入
  如何保护敏感数据
支持 如何设计审查与记录
  如何设计使用问题信息的记录
易测性 如何设计才能方便测试
  如何设计单元测试
  如何设计UI自动化
可用性 如何设计才能让用户有更多的权限
  如何改善响应性
  如何避免常见的用户体验问题
  
  步骤5 可选方案。定义了危险区域之后,你就可以创建第一个高层次的设计并着手创建一个可用架构。你可以返回第二步对可用方案及你所定义的关键场景和需求进行再次验证。架构测试点一种是用来确定具体的设计方式的可行性的设计原型。你可以使用架构测试点来减少风险并迅速检验各种方式的健全性。根据关键场景和危险区域对架构测试点进行测试。