在一个以软件架构为中心的软件项目开发过程中,最常见的开发过程大致分五到六个阶段:概念化阶段、分析阶段、架构阶段、详细设计阶段(一般情况下特别是结合敏捷模式时都会被裁剪掉)、并行开发与测试阶段、验收与交付阶段。

软件架构设计阶段依赖于分析阶段并以软件需求规约为主要输入。那么是不是软件架构工程师必须等到软件需求规约评审通过后才开始工作呢?前面讲到软件架构的策略时讲到全面认识需求与关键需求决定架构。因此,软件架构工程师必然有一个对软件需求进行认识、分析的过程,如果软件架构工程师等到软件需求规约评审通过后才开始工作,必然会延长软件项目的工期。好的项目管理者与优秀的软件架构工程师一定会让这段时间与软件需求人员进行需求分析的阶段重叠缩短软件项目工期。而且一个合作良好的软件项目团队,在进行需求分析过程中必然后邀请软件架构工程师对一些需求问题进行分析验证与对软件需求规约进行评审。因此,软件架构工程师必须在软件需求分析阶段的适当时宜尽早介入,甚至在一些软件过程能力成熟度较低而软件项目重要性较高的软件项目团队,我会酌情把有些软件架构工程师提前到概念化阶段就介入。

因此软件架构设计过程的第一步是全面认识需求。在需求分析与领域建模即分析阶段,软件架构工程师与软件需求人员一起将所有需求从不同的级别(组织级、用户级、开发级)分层梳理列表归纳总结建立跟踪矩阵,并划分为不同的类型(功能需求或用例、质量属性、约束与限制)进行梳理列表归纳总结建立影响分析表,找出不同需求类型之间的相互支持、相互制约关系的影响。

软件架构设计过程的第二步是确定对架构关键的需求。软件架构工程师将所有需求进行筛选,在深思熟虑之后作出合适的需求权衡和取舍,最终确定对软件架构起关键作用的需求子集,控制架构设计时需要详细分析的用例个数,找到影响架构的重点非功能需求。

在此基础上,软件架构设计过程的第三步是进行概念性架构设计。设计概念性架构的第一步是分析关键用例有用例规约,运用鲁棒图等方法构造系统理想化的职责模型(如分层)。接下来明确架构模式(如MVC),确定交互机制,形成初步的概念性架构。最后通过质量属性分析,制定出满足非功能需求的高层设计决策,并根据这些决策对之前的工作成果进行增强、调整,以保证概念性架构体现这些设计决策。

接下来,软件架构设计过程的第四步是细化软件架构,考虑具体技术的运用,设计出实际架构。概念性架构所关注的关键设计要素、交互机制、高层设计决策与具体技术无关,而最终的软件架构设计方案必须和具体技术结合,为开发人员提供足够的指导和限制。为些,必须从系统如何规划、如何开发、如何运行等角度揭示软件系统的结构和机制。一般分别从逻辑架构、开发架构、运行架构、物理架构、数据架构等不同架构视图进行设计。

最后,软件架构设计过程的第五步,千万别忘了验证软件架构。

软件架构(6)---软件架构设计的过程相关推荐

  1. 书讯:《架构实战—软件架构设计的过程》

    架构实战-软件架构设计的过程 基本信息 作者: (英)Peter EelesPeter Cripps   译者: 蔡黄辉;马文涛 出版社:机械工业出版社 ISBN:9787111301158 上架时间 ...

  2. 代码大全2札记:软件架构中的设计

    前言:软件架构中的设计一章,主要的point有软件的首要技术使命就是管理复杂度.减少在同一时间锁关注的本质性复杂量.设计是一种启发式过程.好的设计要有迭代.信息隐藏. 设计中的挑战 设计是一个险恶的问 ...

  3. 基于Altium Designer10的PCB设计入门过程

    基于Altium Designer10的PCB设计入门过程 原理图绘制 原理图绘制 ①新建Project(工程) 打开AD10,左上角依次点击File->New->Project-> ...

  4. 营销型网站的概念及设计制作过程中的注意事项

    营销型网站的提出: 1. 企业网站在国内发展从技术角度经历了两大发展阶段,第一阶段是以静态HTML为代表的企业网站建设,这个阶段ASP技术尚未发展到全面普及应用的程度,更多的企业网站建设在满足企业信息 ...

  5. 网页设计大赛过程的收获

    网页设计大赛过程的收获 1. 引用文档方面 swiper的应用 - 参考文档swiper: http://www.xiaoshu168.com/jquery/103.html - 解决swiper冲突 ...

  6. 【软件架构】软件架构设计常用概念、原则与思想

    导读 本文一文总结软件架构设计常用概念.原则与思想,包括面向对象六大原则,DID原则,ACID.CAP.BASE理论,中间层思想,缓存思想等. 软件架构设计常用概念.原则与思想 面向对象设计六大原则 ...

  7. WinForm界面设计优化过程

    以在做的项目为例,记录一下界面美化过程中遇到的问题,由于项目是先做出来之后,又请美工进行稍微调整设计界面,所以会又些限制 1. TabControl的问题----在添加了背景图片后,TabContro ...

  8. Design Compiler指南——设计综合过程

    在前面一章介绍完施加约束之后,接下来要做的工作就是将设计进行综合编译(compile),本文我们将主要讨论综合编译的过程.主要分为这样几个部分: 优化的三个阶段及其特点 编译的策略 编译层次化的设计 ...

  9. ios双指放大缩小_用PS设计APP过程中改进IOS设计流程的30个秘诀

    设计是一个漫长和痛苦的过程,期间可以用点技巧来减少痛苦,30+ tips to improve your iOS design workflow (in Photoshop)一文总结30个实用的技巧可 ...

最新文章

  1. 做百度推广需要投入多少费用?
  2. nginx+lua 配置302 不改写白名单哈希表
  3. java arraylist 对象 删除_ArrayList实现删除重复元素(元素不是对象类型的情况)...
  4. Angular 2与TypeScript概览
  5. 分布式锁防止订单重复提交_防止表单重复提交看这里!!!
  6. WCF trace、log
  7. 新手学Linux:在VMware14中安装CentOS7详细教程
  8. cannot convert 'this' pointer from 'const class A' to 'class A '
  9. [转载] Python List index()方法
  10. mysql的逻辑备份和恢复
  11. 【CF1333F】Kate and imperfection(埃氏筛+思维)
  12. 提问的智慧(学习笔记)
  13. linux发行版的ISO下载
  14. 计算机人工智能论文参考文献格式,人工智能论文参考文献范例借鉴
  15. 12306抢票源码 java_最新版12306抢票程序源代码
  16. 24券的“天才”创始人如何打坏一手好牌(转载)
  17. Lake Shore Cernox低温温度传感器之温度探头
  18. 地图坐标的转换与说明
  19. 平稳信号、非平稳信号
  20. word2003和word2007如何添加和删除脚注

热门文章

  1. ubuntu下ffmpeg编译安装
  2. java 输出定位代码行_指定一个.java文件,输出其代码行数
  3. 《深入理解分布式事务》第一章 事务的基本概念
  4. 学习Scala: 初学者应该了解的知识
  5. Linux的环境中如何生成srw-rw---- 的文件权限?
  6. 编译wxWidgets
  7. JavaScript-12(脚本化CSS)
  8. ThinkPhp框架:父类及表单验证
  9. Asp.net MVC中如何获取控制器的名称
  10. BBC英语-drama