今 天培训的是软件设计过程,但我会把今天的内容理解为架构设计。
不管了,我在本文中都统一为架构设计,不恰当的地方请见谅。
关键名字解释:
迭代: 就是 反复求精 的过程,是提升质量的过程,是 从模糊到清晰 的过程;
增量: 则是 数量渐增 地过程。
说在最前面的话,我认为软件架构是【 ****** 】 :
1、 架构设计不是一些图和文档,架构设计是一个过程,是一个不断深入分析的过程,深入思考的过程。所以所有产物不一定是必须的,但是一定要先想,有分析、思考、决策的过程。 【至于为什么要深入分析,深入思考,后面会说明。】
2、 好的架构是持续完善的。所有好的架构都是在发展中演化出来的。
3、 架构是一种权衡与取舍,没有完美的架构。软件的要求肯定很多,必须抓住关键因素。
4、 架构是对复杂系统的一种共性的抽象,是针对特定目标系统、问题而提出的通用解决方案。即架构是蓝图,是整体到部分的最高层次的划分。
5、 架构是关注点分离。
【 for example:
错误理解:高楼大厦是由钢筋、水泥和砖块构成
正确理解:高楼大厦是由支撑系统、管道系统、强弱电系统、给排水系统。。等构成
错误理解:信息系统是由一个个模块、一个个对象和组件构成
正确理解:信息系统是由组织结构、业务流程、业务功能、业务信息。。等构成
】
软件(架构)设计的作用或意义【一定要记住】:
1、 深入理解业务与系统。【这条最重要。因为你不够理解业务与系统,所以才需要分析和设计】
2、 提供高层次的解决方案,还有为开发提供指导原则、实现思路、关键决策。
3、 团队理解、沟通的桥梁
项目管理的主要对象是人和项目,
而,架构设计主要的对象是【也要记住】 :
1、 业务
2、 系统
所以相对来说,架构设计跟人的关系不大。
一些事情不要太纠结,关注和理解你的目标、目的、意义 :
设计即分析,分析即设计。分析与设计的界线很模糊,没必要纠结自己到底是在做分析,还是在设计。
软件(架构)设计过程【这个大家都知道,请跳过】:
需求采集、捕获【需求采集卡,用户故事】 ------- 》
需求分析【需求规格说明书 : 背景、目标、功能性、非功能性需求、约束等】 -------- 》
概念模型【 用例简述、用例图、用例规约 边界、业务环境图、系统环境图】 --- 》
业务用例分析、实现【鲁棒图、时序图、活动图】 ----》
得到领域模型、 系统用例-----》
系统用例分析、实现【交互图、状态图、分析图】 ---- 》
概念类、数据字典 --- 》
再进行分析------》
架构设计【 4+1 视图】
简单解释什么是概念模型?
概念模型就是从用户看重的角度,来分析这个产品或者这个项目,抽象得到的一些模型。
相对的, 从开发人员脑子里想的、从开发实现角度分析设计 的就是实现模型。
重点说明下这个设计过程:
1、上面这个设计过程的意思,不是说你从下往下做了一遍,软件架构设计就出来了,就完成了。
其实在实际工作中,这些过程经常是反复进行的,交替进行的,不断进行迭代和增量的,不断的进行验证的。【进化式架构概念】
上面的过程的一个重要作用是,前面一个步骤的结果就是后面一个步骤的输入和验证条件,最终判断是否正确,是看是否满足了所有需求。
2、也并不是说,你上一个步骤没有完成,下一个步骤就不能开始。否则稍微复杂的项目,将是一个漫长的过程,还会因为长时间看不到有价值的东西,而打击团队的信心。在实际工作中,并非严格按照上述步骤,很多工作可以并行的。比方说,你在前期分析、设计到一定程度的时候,就可以考虑开发视图、关键功能原型设计、技术调研等。
软件设计规范过程、步骤【 Rational 】其实是很多的,产物也很多。但其实针对具体的软件产品或项目,并非全部是必须的,这已经是公认的。
但具体项目中,哪些是必需的,哪些可以省略?有没有什么标准呢?【大家很关心吧】
根据上面架构设计的目的,我觉得必需的依据标准如下:
1、 业务需求、目标、范围、约束、成功标准、关键驱动因素、关键功能和要求
2、 业务边界、业务环境、系统环境
3、 业务特点、业务规模大小(小型、中型、大型)
4、 你和你的团队,不了解的、不清楚的、模糊的,或者复杂的,都需要分析、设计【这个很重要】
架构设计中最关键的两样东西:
1、 领域模型(或者说概念类)
2、 系统中各个角色与系统之间、还有各个实体之间的关系与交互。( 这个是最关键的。系统其实就是一堆关系和行为。 )
由于这两个关键的东西,所以我认为架构分析、设计中最重要的图是:
1、 领域模型、概念类、数据字典;
2、 鲁棒图、协作图、状态图
其他什么用例图、时序图、活动图都是为了辅助分析、理解的。
架构设计其实就是不断的通过分析,不断的深入理解业务和系统,然后得到较高层次的解决方案。
架构设计其实就是从多维度、多角度进行抽象
架构设计中难把握的两样东西:
1、 粒度
2、 抽象层次
我觉得架构设计中抽象的最低层次应该是:组件、一个小功能、一个处理流程、一个线程,不要再往下细分设计咯。
架构设计需要注意事项:
软件需求一般包括:功能性需求、非功能性需求【包括约束和质量性需求】,
1 、功能性需求是最容易变化的,架构设计中,从一开始用例场景到最后,都应该思考很容易改变。
2 、约束会影响架构和功能,所以从一开始就要尽量弄清楚所有约束
附 4+1 视图:
4 :
过程视图:其实就是组件图,组件之间的交互
开发视图:其实就是技术选型、分层,关注点分离、复用、公用。【常见的:内核层、 Framework 层(业务无关)、业务公用 API 层、业务中各种应用(管理系统、 WebService 、客户端 .. )】
逻辑视图【这个没什么好说的】
部署视图【这个没什么好说的】
1 :用例视图【这个没什么好说的】
相关推荐
下面将详细介绍关于软件架构设计的目的、目标、方法及其质量约束等方面的体会与总结。 2. **架构设计目的** - **沟通交流的工具**:软件架构作为一种风险承担者之间的沟通工具,明确了对系统实现的约束条件,...
软件架构设计系统整体架构,从需求到设计的每个细节都要考虑到,把握整个项目,使 设计的项目尽量效率高,开发容易,维护方便,升级简单。本文从架构师职责、软件架构定 义、设计架构、评估架构、架构管理等方面来...
- 系统架构设计:了解和掌握系统架构的基本原则和方法,对构建大型系统至关重要。 - 云计算与大数据技术:云服务和大数据分析是当下IT行业的热点。 - 安全知识:网络安全是目前IT行业不可忽视的问题,需要掌握...
FPGA(Field Programmable Gate Array),即现场可编程门阵列,是一种高度灵活的集成电路技术,它允许用户通过软件编程的方式来定制硬件功能。这种特性使得FPGA在数字信号处理、通信系统、图像处理等多个领域有着...
### Oracle RAC培训学习心得详解 #### 一、Oracle RAC概述 Oracle Real Application Clusters (RAC) 是Oracle数据库的一项关键技术,旨在提供高可用性和可伸缩性。RAC允许在一个集群环境中运行多个数据库实例,每...
1. **系统架构设计**: - 根据项目需求设计合理的系统架构,确保各子系统之间协调运作。 - 考虑系统的可扩展性和兼容性,方便日后的升级和维护。 2. **设备选型**: - 选择性能稳定、可靠性高的安防设备。 - ...
然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设计。本项目软件架构选择B/S模式和java技术,总体功能模块运用自顶向下的分层思想。再然后就是实现系统并进行代码...
它能够提供精确的网络性能预测,帮助工程师们在实际部署前对网络架构进行评估和优化,避免了因设计不当而导致的资源浪费和性能瓶颈。 ### 调试重要性 在使用OPNET的过程中,调试是一项不可或缺的技能。良好的调试...
SIP的架构采用了客户端/服务器模式,主要包括用户代理(UA)和网络服务器。用户代理是SIP系统中的终端用户,可以发起和接收通信请求。网络服务器则包括代理服务器、重定向服务器和注册服务器。代理服务器用于解析...
【和利时DCS学习总结报告】 通过在杭州和利时公司进行...通过这次培训,我不仅掌握了和利时MACSV系统的硬件和软件知识,还学会了如何进行初步设计、安装和维护,这对我未来在DCS系统领域的实践操作具有重要指导意义。
架构设计要考虑系统的可扩展性、安全性、稳定性和易用性。模块划分则应根据业务流程来,如销售模块可能包括线索管理、机会管理、合同管理等。 三、数据库设计 CRM系统依赖于强大的数据库来存储客户信息、交易记录等...
总结来说,《公路涵洞CAD系统》和PCV2000软件都是设计领域内的重要工具,分别在特定领域和广泛领域拥有各自的优势和不足。设计人员应该根据项目需求、自身的技术水平和偏好来选择合适的CAD软件,以便在保证工作效率...
在IT行业中,建模是一种非常重要的技能,尤其在软件工程、数据分析、系统设计等领域。"建模心得.pdf.zip"这个文件很可能包含了一位专业人士在建模过程中的学习体验、技巧总结以及常见问题的解决策略。虽然没有具体的...
这篇文档集合了初级软件测试员在学习过程中应掌握的关键知识点,结合了我在达内培训期间的学习资料,包含了名牌讲师的精彩PPT内容,旨在帮助初学者系统性地理解和掌握软件测试的基础与进阶技巧。 【描述】:“软件...
VB人事管理系统是一款基于Visual Basic开发的人力资源管理软件,它涵盖了人事管理的多个核心功能,如员工信息管理、考勤管理、薪酬福利、培训发展等。这个压缩包包含的资源全面,不仅有源代码,还有设计说明书、调研...
- 系统设计:参与系统架构设计,解决技术难题。 - 项目实施:积极与客户沟通,确保项目顺利推进。 2. **日常工作**: - 日常维护:协助处理系统问题与故障。 - 沟通协作:与团队成员保持密切沟通,共同解决问题...
9. **用户专业化**:重视用户培训,提高其独立完成报表设计的能力。 10. **软件选择**:采取横向联合的方式选择软件供应商,不必拘泥于单一厂商的产品。 #### 四、数据仓库设计模式和方法 1. **数据存储选择**:...
基于ssm少儿编程管理系统(源码 + 说明文档) 第二章开发技术介绍 1 2.1 系统开发平台 1 2.2 平台开发相关技术 1 2.2.1 Java技术 1 2.2.2 mysql数据库介绍 1 ...第七章总结与心得体会 21 7.1 总结 21 7.2 心得体会 21