很多做软件开发同学的梦想都是成为一名架构师,而架构师的核心工作就是做好软件设计。软件设计是软件开发过程中的一个重要环节,那么如何进行软件设计,其输出标准又是什么呢?软件设计过程中,如何和各个相关方沟通,使软件设计能同时满足用户的功能需求和非功能需求,并降低公司的开发成本?
前期思考很多软件开发同学的职业规划都是架构师,试想这样一个场景,如果公司安排你做架构师,让你在项目开发前期进行了一些架构设计。
你该如何开展你的工作?
应该如何说出你的工作成果?
你如何确定你的设计是否满足用户需求的?
你是否有把握最后交付的软件是满足要求的?
是否有把握让软件团队每个工程师清晰了解自己的职责范围,并有效的完成开发工作?
架构师的核心工作就是做好软件架构设计,软件设计是软件开发过程中一个重要的环节。
如何进行软件设计?
软件设计的输出是什么?
软件升级过程中如何和各个相关方沟通?
软件设计如何既能满足用户的功能需求,又能满足用户的非功能需求,也能满足用户的成本要求?
如何能够使开发工程师,测试工程师,运维工程师,理解软件的整体架构,主要模块划分,关键技术实现,核心领域模型,使他们能够做好自己的工作,从而使整个软件开发过程,处于一个可控的范围之内,并在软件开发之初,就对软件未来的蓝图有个清晰的认识?
以上这些诉求可以说是软件开发管理与技术的核心诉求,这些问题搞定了,软件的开发过程和结果也就得到了保障。
核心关键点 两个客观存在我们再来看看,解决这些问题你需要理解的核心关键点,也就是说究竟如何做软件设计,解决方法就是软件建模,就是软件的抽象模型,这些模型之上配上文字说明,就形成了软件的设计文档。
模型是对客观存在的抽象,在软件开发中有两个客观存在:
一个是我们要解决的领域问题,比如我们要开发一个电子商务网站,那么客观的领域问题就是如何做生意,卖家如何管理商品,管理订单服务用户,买家如何挑选商品,如何下单,如何支付等等,对于这些客观领域问题的抽象就是各种功能及其关系,各种模型对象及其关系,各种业务处理流程。
另一个客观存在就是最终开发出来的软件系统,这个软件系统也是客观存在的。
软件有哪些主要组成?
这些类如何组织成一个一个的组件?
这些内核组件之间的依赖关系是如何的?
运行期如何调用,需要部署多少台服务器?
服务器之间如何通信?
所以这两方面的客观存在的抽象就是我们的软件模型。
一方面,我们要对领域问题和软件系统进行分析,设计抽象,另一方面,我们根据抽象出来的模型,进行软件开发,这就是软件开发的主要过程。
而对领域问题和软件系统进行分析,设计抽象,这个过程我们称它为软件建模与设计。
UML工具软件建模工具很多,目前主要是统一建模语言UML。
所谓的建模,就是对领域问题和软件系统进行抽象设计,一个工具完成前述软件开发过程中的两个客观存在的建模。
而所谓的语言,一则用于沟通,满足设计阶段和各个相关方沟通的目的,一则用于思考,即使软件开发过程中不需要跟其他人沟通,或者还没有到了沟通的时候,依然可以使用UML建模,帮助自己进行设计思考。
此外,语言还有个特点,就是有方言,就我观察不同公司,不同团队,都有自己的特点,并不需要拘泥于以往那样规范和语法,只要不引起歧义,在使用过程中对语法元素适当变通,这是UML的最佳时间。
软件建模与设计过程又可以拆分成需求分析,概要设计,详细设计三个阶段,而软件建模的主要工具是UML,下面我们看一下使用方法包含了哪些软件模型,常用的有7种。
7种软件模型下面我们讨论这7种模型图,如何在三个阶段使用。
类图