软件系统设计.ppt
《软件系统设计.ppt》由会员分享,可在线阅读,更多相关《软件系统设计.ppt(30页珍藏版)》请在冰豆网上搜索。
![软件系统设计.ppt](https://file1.bdocx.com/fileroot1/2022-10/28/74a80576-9c2a-45a2-9aaf-781a231aa7a4/74a80576-9c2a-45a2-9aaf-781a231aa7a41.gif)
软件系统设计软件系统设计帮助你从程序员上升为系统设计师帮助你从程序员上升为系统设计师搞清楚搞清楚“设计什么设计什么”以及以及“如何设计如何设计”林林锐锐博士博士http:
/上上海海漫漫索索计计算算机机科科技技有有限限公公司司Page2目录目录1.软件系统设计基本概念软件系统设计基本概念2.体系结构设计体系结构设计3.用户界面设计用户界面设计4.数据库设计数据库设计5.模块设计模块设计6.数据结构与算法设计数据结构与算法设计7.小结小结参考书:
软件工程与项目管理解析,林锐参考书:
软件工程与项目管理解析,林锐著,电子工业出版社,著,电子工业出版社,2003Page31.软件系统设计基本概念软件系统设计基本概念1.1基本概念基本概念u设计师与程序员的地位。
系统设计的技术难度要比编程、测试的高。
所以程序员、测试员称为“员”,而设计师尊称为“师”。
u系统设计的好坏在根本上决定了软件系统的优劣。
我们可以断言“差的系统设计必定产生差的软件系统”,但是不能保证“好的系统设计必定产生好的软件系统”。
因为在设计之前有需求开发工作,在设计之后还有编程、测试和维护工作,无论哪个环节出了差错,都会把好事搞砸了。
据说上帝把所有的女士都设计成天使,可是天使们在下凡的时候,有些人双脚先着地,有些人脸先着地。
上帝的这一疏忽让很多女士伤透了心。
所以我们在开发软件时,一定要吸取这个教训。
u系统设计之源是软件需求,包括“功能性需求”与“非功能性需求”。
系统设计的目标就是使所设计的系统能够被开发方顺利地实现,并且恰如其分地满足用户的需求,使开发方和用户的利益极大化。
开发人员不万不能偏离需求,为了追求技术的先进性而开展系统设计工作。
u依据“分而治之”的思想,我们把系统设计过程划分为两个阶段:
高层设计阶段和详细设计阶段。
高层设计阶段的重点是体系结构设计。
详细设计阶段的重点是用户界面设计、数据库设计、模块设计、数据结构与算法设计等。
u著名3D游戏软件Quake设计师MichaelAbrash的总结:
“所有真正杰出的设计一旦被设计好,看起来都是那么的简单和显而易见。
但是在获得杰出设计的过程中,需要付出令人难以置信的努力。
”Page41.软件系统设计基本概念软件系统设计基本概念系统设计过程示意图Page51.软件系统设计基本概念软件系统设计基本概念1.2软件系统与人体的比喻软件系统与人体的比喻u体系结构如同人的骨架。
如果某个家伙的骨架是猴子,那么无论怎样喂养和美容,这家伙始终都是猴子,不会成为人。
人的身材大小取决于骨架大小,天生小个子的人基本上不可能成为威猛的大汉,后天再努力(例如锻炼和吃喝)也白搭。
由此可见,体系结构乃是系统设计的重中之重。
u用户界面如同人的外表,最容易让人一见钟情或一见恶心。
象人类追求心灵美和外表美那样,软件系统也追求(内在的)功能强大和(外表的)界面友好。
我们在设计软件时不要沉迷于技术,而要多多思考什么样的界面才能让用户更加喜欢。
u数据库是存储和处理数据用的。
人体的数据库是大脑,知识相当于数据,全存在大脑里。
如果脑子里存储的知识很多,那么这个人就显得博学。
如果脑子处理知识的速度很高,那么这个人就显得聪明。
数据库设计的主要挑战是“高速处理大容量的数据”。
u模块如同人的器官。
每个器官都具有特定的功能,器官们依附在骨架上。
模块是软件系统的部件,它们安插在体系结构上(否则运行起来掉光光了)。
在设计模块时要重视功能独立性,还要追求“高内聚、低耦合”。
u数据结构与算法如同人的神经和肌肉,它分布在全身,让器官具有生命并能发挥功能。
人之所以能够全身运动,那是无数的神经和肌肉在起作用。
如果局部的神经和肌肉失效了,那么会导致对应的器官残废。
如果全局的神经和肌肉失效了,那么人就瘫痪了。
同理,数据结构与算法也有全局和局部之分,都要慎重设计。
Page61.软件系统设计基本概念软件系统设计基本概念1.3漫谈设计模式漫谈设计模式u20世纪90年代,面向对象(Object-Oriented)方法与技术在国内软件业界十分火爆,人们热衷于谈论“对象”并引以为荣。
十多年来,人们发表、出版了无数的文章和书籍。
现在,该写的似乎都写完了,没有新花样玩了,真是一片无聊。
设计模式(DesignPattern)及时问世,面向对象爱好者们终于有了新的追求。
u1995年,ErichGamma,RichardHelm,RalphJohnson,JohnVlissides(戏称“四人帮”)出版了DesignPatterns:
ElementsofReusableObject-OrientedSoftware,该书的中译本已于2000年出版.u“四人帮”这本书的主要贡献是:
确立了设计模式这个术语,创导了一种新的面向对象设计思潮。
该书出版后,全世界参与设计模式研究的人数呈爆炸性地增长。
该书的负面效应是:
这本书深奥无比,读者被分成两类,即“看得懂设计模式的”和“看不懂设计模式的”,后者居多。
很多人刚入门时就被吓住了,知难而退。
u何为“模式”和“设计模式”?
模式描述了在我们周围不断重复发生的问题,以及该问题的解决方案的核心,这样你就能一次又一次地使用该解决方案而不必重复劳动。
u模式就是一种公式化的表现,究竟公式化是不是好事?
(蔡学庸精辟的解释)u尽管软件技术发展非常快,但是仍然有非常多的设计模式可以让我们套用,包括体系结构模式、数据结构模式、接口模式等。
u小小结结:
设计模式的应用价值在于它能帮助人们简便地复用以前成功的设计方案。
设计模式不是凭空产生的,只有对应用域问题及其解决方案进行抽象和分析,发现本质,并按照一定的格式记录下来,才能成为可以被人们复用的设计模式。
Page72.体系结构设计体系结构设计2.1体系结构设计原则体系结构设计原则u中国科学院的杨叔子院子如是言:
文学中有科学,音乐中有数学,漫画中有现代数学的拓扑学。
漫画家可以“几笔”就把一个人画出来,不管怎么美化或丑化,就是活像。
为什么?
因为那“几笔”不是别的,而是拓扑学中的特征不变量,这是事物最本质的东西。
体系结构是指软件系统的基本和主体的形态,也就是软件系统中“最本质”的东西。
一个软件系统的体系结构设计得好不好,可以用“合适性、结构稳定性、可扩展性、可复用性”这些特征量来评估。
u合适性合适性:
即体系结构是否适合于软件的:
即体系结构是否适合于软件的“功能性需求功能性需求”和和“非功能性需求非功能性需求”。
设计师可以充分发挥主观能动性,根据需求的特征,通过推理和归纳的方法设计出合适的体系结构。
经验不丰富的设计师往往把注意力集中在“功能性需求”而疏忽了“非功能性需求”,殊不知后者恰恰是最能体现设计水平的地方。
高水平的设计师高就高在“设计出恰好满足客户需求的软件,并且使开发方和客户方获取最大的利益,而不是不惜代价设计出最先进的软件。
(以设计住宅为例)对于软件系统而言,能够满足需求的设计方案可能有很多种,究竟该选哪一种?
此此时时商商业业目目标标是是决决策策依依据据,即即选选择择能能够够为为开开发发方方和和客客户户方方带带来来最最大大利利益益的的那那个个设设计计方方案案。
大部分软件开发人员天生有使用新技术的倾向,而这种倾向对开发商业产品而言可能是不利的,切记切记。
Page82.体系结构设计体系结构设计u结构稳定性:
当前中国有几句流行的至理名言:
“稳定压倒一切”、“发展是硬道理”。
发展的前提条件是稳定,社会如此,开发软件产品也是如此。
体系结构一旦设计完成,应当在一定的时间内保持稳定不变,只有这样才能使后续工作顺利开展。
如果体系结构经常变动,那么建筑在体系结构之上的用户界面、数据库、模块、数据结构等等也跟着经常变动,用“树倒猢狲散”来比喻很恰当,这将导致项目发生混乱。
高水平的设计师应当能够分析需求文档,判断出哪些需求是稳定不变的,哪些需求是可能变动的。
于于是是根根据据那那些些稳稳定定不不变变的的需需求求设设计计体体系系结结构构,而而根根据据那那些些可可变变的的需需求求设设计计软软件件的的“可扩展性可扩展性”。
u可扩展性:
可扩展性是指软件扩展新功能的容易程度。
可扩展性越好,表示软件适应“变化”的能力越强。
可扩展性越来越重要,这是由现代软件的商业模式决定的:
社会的商业越发达,需求变化就越快。
现代软件产品通常采用“增量开发模式”,开发商不断地推出软件产品的新版本,从而不断地获取增值利润。
稳定性和可扩展性之间存在辨证的关系:
如果系统不可扩展的话,那么就没有发展前途,所以不能只关心稳定性而忽视可扩展性;而软件系统“可扩展”的前提条件是“保持结构稳定”,否则软件难以按计划开发出来,稳定性是使系统能够持续发展的基础。
所以稳定性和可扩展性都是体系结构设计的要素。
如果每次变化都导致体系结构发生大的变动,那简直就是“伤筋动骨”,这样的体系结构无疑是败笔之作。
(例如房屋装修)Page92.体系结构设计体系结构设计u可复用性可复用性:
复用就是指“重复利用已经存在的东西”。
被复用的对象可以是有形的物体,也可以是无形的知识财富。
复用不是人类懒惰的表现而是智慧的表现。
因为人类总是在继承了前人的成果,不断加以利用、改进或创新后才会进步。
复用的有利于提高产品的质量、提高生产率和降低成本。
由经验可知,通常在一个新系统中,大部分的内容是成熟的,只有小部分内容是创新的。
一般地可以相信成熟的东西总是比较可靠的(即具有高质量),而大量成熟的工作可以通过复用来快速实现(即具有高生产率)。
勤劳并且聪明的人们应该把大部分的时间用在小比例的创新工作上,而把小部分的时间用在大比例的成熟工作中,这样才能把工作做得又快又好。
复用的意义很容易理解,人们也乐意复用以前的成果,但是前提条件是该成果具有比较好的可复用性。
可复用性是指成果被复用的容易程度。
可可复复用用性性是是设设计计出出来来的的,而而不不是是偶偶然然碰碰到到的的。
要使体系结构具有良好的可复用性,设计师应当分析应用域的共性问题,然后设计出一种通用的体系结构模式,这样的体系结构才可以被复用。
Page102.体系结构设计体系结构设计2.2体系结构设计流程体系结构设计流程u体系结构设计流程:
6个步骤u体系结构设计报告模板见word文档Page112.体系结构设计体系结构设计2.3层次结构介绍层次结构介绍u层次结构是最常见的体系结构模式,它体现了“分而治之”的思想:
当我们没法一口气解决复杂的原始问题时,就把该问题切割成许多个小的相对简单的问题,然后逐个解决。
水平方向切割产生的层称为Layer,而竖直方向切割产生的层称为Tier。
u层次结构在人类社会里随处可见。
有个村长曾得意地向老婆吹牛:
“全中国只有四个人比我的官儿大,乡长、县长、省长和国务院总理”。
政府的行政结构应当划分为多个Layer和Tier。
如果Layer和Tier的数目太少了,那么各级政府的领导人会非常劳累。
反之如果Layer和Tier的数目太多了,那么导致政府机构太臃肿,办公效率极低。
u古代中国文人的学历大体分为两层:
秀才和举人。
这种划分太粗了(即Layer数目太少),对发展教育是很不利的。
很多老百姓读不起几年书,拿不到秀才毕业证书的人就被归类为文盲,不幸成为社会下层人物。
虽然社会上的秀才人数也不少,但是从秀才到举人的跨度太大、门槛太高,很多秀才考举人考了一辈子也考不上。
典型的例子是儒林外史里的范进,范进在青年时期就成为秀才,可惜他考举人考了几十年!
等他碰巧考上举人的时候,已经是个老头了,只给朝廷增加负担而没有贡献。
后人吸取了经验教训,于是逐步建立了现代的学历层次结构,将学历划分为5个层次:
小学、中学、学士、硕士、博士。
这样人们读书的选择面广了,工作面也广了。
u“层层次次结结构构”是是应应用用最最为为广广泛泛的的体体系系结结构构模模式式。
其其最最大大的的优优点点是是具具有有良良好好的的可可扩扩展展性性,人人们们在在扩扩充充或或修修改改功功能能时时,基基本本不不会会破破坏坏原原有有结结构构的的稳稳定定性性。
但但是是万万事事有有利利必必有有弊弊,层层次次结结构构的的系系统统的的主主要要缺缺点点是是:
管管理理多