软件构架导论软件构架导论胡协刚首席软件架构师UML/RUP专家szjinco@public.szptt.net.cn中国中国中国软件架构师网软件架构师网软件架构师网¾¾小故事:七人小故事:七人分粥分粥¾¾当前软件团队的开发现状和面临的问题当前软件团队的开发现状和面临的问题¾¾软件项目的特点软件项目的特点¾¾解决之道:从瀑布模型到迭代模型解决之道:从瀑布模型到迭代模型¾¾解决项目风险的关键解决项目风险的关键————构架基线构架基线¾¾构架基线原理构架基线原理————为大量构造提供坚实的框架基础为大量构造提供坚实的框架基础¾¾不是所有的产品都容易得到构架基线不是所有的产品都容易得到构架基线¾¾有关软件架构的理论有关软件架构的理论¾¾参考构架模型参考构架模型¾¾软件构架与面向对象的分析与设计过程软件构架与面向对象的分析与设计过程¾¾软件架构师的角色软件架构师的角色¾¾前瞻:前瞻:MDDMDD模型驱动的开发过程模型驱动的开发过程内容提要内容提要小故事小故事————七人七人分粥分粥4中国中国中国软件架构师网软件架构师网软件架构师网小故事:七人小故事:七人分粥分粥¾¾如何对权力制约的制度问题一直是人类头疼如何对权力制约的制度问题一直是人类头疼的难题。请看下边的这个小故事的难题。请看下边的这个小故事————有有77个人组成了一个小团体共同生活,其中每个人组成了一个小团体共同生活,其中每个人都是平凡而平等的,没有什么凶险祸害之个人都是平凡而平等的,没有什么凶险祸害之心,但不免自私自利。他们想用非暴力的方心,但不免自私自利。他们想用非暴力的方式,通过制定制度来解决每天的吃饭问题式,通过制定制度来解决每天的吃饭问题——要要分食一锅粥,但并没有称量用具和有刻度的容分食一锅粥,但并没有称量用具和有刻度的容器。器。5中国中国中国软件架构师网软件架构师网软件架构师网委托委托一人分粥一人分粥¾¾大家试验了不同的方法,发挥了聪明才智、大家试验了不同的方法,发挥了聪明才智、多次博弈形成了日益完善的制度。大体说来主多次博弈形成了日益完善的制度。大体说来主要有以下几种要有以下几种::方法一:拟定一个人负责分粥事宜。很快大家方法一:拟定一个人负责分粥事宜。很快大家就发现,这个人为自己分的粥最多,于是又换就发现,这个人为自己分的粥最多,于是又换了一个人,总是主持分粥的人碗里的粥最多最了一个人,总是主持分粥的人碗里的粥最多最好。阿克顿勋爵作的结论是好。阿克顿勋爵作的结论是::权力导致腐败,权力导致腐败,绝对的权力绝对腐败。绝对的权力绝对腐败。6中国中国中国软件架构师网软件架构师网软件架构师网还是轮流还是轮流分粥分粥吧吧方法二:大家轮流主持分粥,每人一天。这样方法二:大家轮流主持分粥,每人一天。这样等于承认了个人有为自己多分粥的权力,同时等于承认了个人有为自己多分粥的权力,同时给予了每个人为自己多分的机会。虽然看起来给予了每个人为自己多分的机会。虽然看起来平等了,但是每个人在一周中只有一天吃得饱平等了,但是每个人在一周中只有一天吃得饱而且有剩余,其余而且有剩余,其余66天都饥饿难挨。天都饥饿难挨。认为这种认为这种方式导致了资源浪费。方式导致了资源浪费。7中国中国中国软件架构师网软件架构师网软件架构师网德高望重的人或者分粥委员会德高望重的人或者分粥委员会方法三:大家选举一个信得过的人主持分粥。方法三:大家选举一个信得过的人主持分粥。开始这品德尚属上乘的人还能基本公平,但不开始这品德尚属上乘的人还能基本公平,但不久他就开始为自己和溜须拍马的人多分。不能久他就开始为自己和溜须拍马的人多分。不能放任其堕落和风气败坏,还得寻找新思路。放任其堕落和风气败坏,还得寻找新思路。方法四:选举一个分粥委员会和一个监督委员方法四:选举一个分粥委员会和一个监督委员会,形成监督和制约。公平基本上做到了,可会,形成监督和制约。公平基本上做到了,可是由于监督委员会常提出多种议案,分粥委员是由于监督委员会常提出多种议案,分粥委员会又据理力争,等分粥完毕时,粥早就凉了。会又据理力争,等分粥完毕时,粥早就凉了。8中国中国中国软件架构师网软件架构师网软件架构师网其实最好的办法往往很简单其实最好的办法往往很简单方法五:每个人轮流值日分粥,但是分粥的那方法五:每个人轮流值日分粥,但是分粥的那个人要最后一个领粥。令人惊奇的是,在这个个人要最后一个领粥。令人惊奇的是,在这个制度下,制度下,77只碗里的粥每次都是一样多,就像只碗里的粥每次都是一样多,就像用科学仪器量过一样。每个主持分粥的人都认用科学仪器量过一样。每个主持分粥的人都认识到,如果识到,如果77只碗里的粥不相同,他确定无疑只碗里的粥不相同,他确定无疑将享有那份最少的。将享有那份最少的。9中国中国中国软件架构师网软件架构师网软件架构师网对软件开发过程启示?对软件开发过程启示?¾¾分粥制度的原理:分粥制度的原理:分粥的过程可以细分为:分粥和领粥两个步分粥的过程可以细分为:分粥和领粥两个步骤;(如果不能分步骤,估计谁也没招了)骤;(如果不能分步骤,估计谁也没招了)通过对领粥步骤来设计某种规则(分粥的那个通过对领粥步骤来设计某种规则(分粥的那个人要最后一个领粥),促使分粥步骤能够做得人要最后一个领粥),促使分粥步骤能够做得更公平更公平¾¾启示:启示:我们通过设计一套合适的软件过程(方法和技我们通过设计一套合适的软件过程(方法和技术),来解决软件开发中遇到的问题术),来解决软件开发中遇到的问题当前软件团队的开发当前软件团队的开发现状和面临的问题现状和面临的问题11中国中国中国软件架构师网软件架构师网软件架构师网软件开发的现状软件开发的现状世界经济对软件的依赖性越来越强软件应用的规模、复杂度和分布程度越来越高现实业务对软件开发的生产率和质量提出了更高的要求缺乏足够的称职的开发人员12中国中国中国软件架构师网软件架构师网软件架构师网•更大规模的团队Largerteams•更加专业化Specialization•更为分散Distribution•技术变化发展更为迅速Rapidtechnologychange13中国中国中国软件架构师网软件架构师网软件架构师网我们做得怎样?我们做得怎样?ProjectManagerPerformanceEngineerReleaseEngineerAnalystTester•有不少成功•更多的是失败14中国中国中国软件架构师网软件架构师网软件架构师网项目成员各自为政,搞不清楚谁在何时、何项目成员各自为政,搞不清楚谁在何时、何处、为了什么而变更了哪些内容处、为了什么而变更了哪些内容zz一套不可靠的构造和交付流程一套不可靠的构造和交付流程软件项目的特点软件项目的特点16中国中国中国软件架构师网软件架构师网软件架构师网《《人月神话人月神话》》根据软件复杂性的内在性质分根据软件复杂性的内在性质分为两类:为两类:••附加复杂性附加复杂性accidentalcomplexitiesaccidentalcomplexities————并非软件本身固有的、由其它外在因素所附并非软件本身固有的、由其它外在因素所附加的额外复杂性,理论上可以被降低甚至完加的额外复杂性,理论上可以被降低甚至完全被消除;全被消除;••固有复杂性固有复杂性essentialcomplexitiesessentialcomplexities————软件本身固有的本源特性,理论上不可能被软件本身固有的本源特性,理论上不可能被消除,但可以通过相关技术降低其负面影消除,但可以通过相