软件系统设计——帮助你从程序员上升为系统设计师——搞

上传人:ldj****22 文档编号:56844962 上传时间:2018-10-16 格式:PPT 页数:30 大小:132.50KB
返回 下载 相关 举报
软件系统设计——帮助你从程序员上升为系统设计师——搞_第1页
第1页 / 共30页
软件系统设计——帮助你从程序员上升为系统设计师——搞_第2页
第2页 / 共30页
软件系统设计——帮助你从程序员上升为系统设计师——搞_第3页
第3页 / 共30页
软件系统设计——帮助你从程序员上升为系统设计师——搞_第4页
第4页 / 共30页
软件系统设计——帮助你从程序员上升为系统设计师——搞_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《软件系统设计——帮助你从程序员上升为系统设计师——搞》由会员分享,可在线阅读,更多相关《软件系统设计——帮助你从程序员上升为系统设计师——搞(30页珍藏版)》请在金锄头文库上搜索。

1、软件系统设计 帮助你从程序员上升为系统设计师 搞清楚“设计什么”以及“如何设计” 林 锐 博士http:/ ,上 海 漫 索 计 算 机 科 技 有 限 公 司,目录,1. 软件系统设计基本概念 2. 体系结构设计 3. 用户界面设计 4. 数据库设计 5. 模块设计 6. 数据结构与算法设计 7. 小结 参考书:软件工程与项目管理解析,林锐 著,电子工业出版社,2003,1. 软件系统设计基本概念,1.1 基本概念 设计师与程序员的地位。系统设计的技术难度要比编程、测试的高。所以程序员、测试员称为“员”,而设计师尊称为“师”。 系统设计的好坏在根本上决定了软件系统的优劣。我们可以断言“差的系

2、统设计必定产生差的软件系统”,但是不能保证“好的系统设计必定产生好的软件系统”。因为在设计之前有需求开发工作,在设计之后还有编程、测试和维护工作,无论哪个环节出了差错,都会把好事搞砸了。 据说上帝把所有的女士都设计成天使,可是天使们在下凡的时候,有些人双脚先着地,有些人脸先着地。上帝的这一疏忽让很多女士伤透了心。所以我们在开发软件时,一定要吸取这个教训。 系统设计之源是软件需求,包括“功能性需求”与“非功能性需求”。系统设计的目标就是使所设计的系统能够被开发方顺利地实现,并且恰如其分地满足用户的需求,使开发方和用户的利益极大化。开发人员不万不能偏离需求,为了追求技术的先进性而开展系统设计工作。

3、 依据“分而治之”的思想,我们把系统设计过程划分为两个阶段:高层设计阶段和详细设计阶段。高层设计阶段的重点是体系结构设计。详细设计阶段的重点是用户界面设计、数据库设计、模块设计、数据结构与算法设计等。 著名3D游戏软件Quake设计师Michael Abrash 的总结:“所有真正杰出的设计一旦被设计好,看起来都是那么的简单和显而易见。但是在获得杰出设计的过程中,需要付出令人难以置信的努力。”,1. 软件系统设计基本概念,系统设计过程示意图,1. 软件系统设计基本概念,1.2 软件系统与人体的比喻 体系结构如同人的骨架。如果某个家伙的骨架是猴子,那么无论怎样喂养和美容,这家伙始终都是猴子,不会

4、成为人。人的身材大小取决于骨架大小,天生小个子的人基本上不可能成为威猛的大汉,后天再努力(例如锻炼和吃喝)也白搭。由此可见,体系结构乃是系统设计的重中之重。 用户界面如同人的外表,最容易让人一见钟情或一见恶心。象人类追求心灵美和外表美那样,软件系统也追求(内在的)功能强大和(外表的)界面友好。我们在设计软件时不要沉迷于技术,而要多多思考什么样的界面才能让用户更加喜欢。 数据库是存储和处理数据用的。人体的数据库是大脑,知识相当于数据,全存在大脑里。如果脑子里存储的知识很多,那么这个人就显得博学。如果脑子处理知识的速度很高,那么这个人就显得聪明。数据库设计的主要挑战是“高速处理大容量的数据”。 模

5、块如同人的器官。每个器官都具有特定的功能,器官们依附在骨架上。模块是软件系统的部件,它们安插在体系结构上(否则运行起来掉光光了)。在设计模块时要重视功能独立性,还要追求“高内聚、低耦合” 。 数据结构与算法如同人的神经和肌肉,它分布在全身,让器官具有生命并能发挥功能。人之所以能够全身运动,那是无数的神经和肌肉在起作用。如果局部的神经和肌肉失效了,那么会导致对应的器官残废。如果全局的神经和肌肉失效了,那么人就瘫痪了。同理,数据结构与算法也有全局和局部之分,都要慎重设计。,1. 软件系统设计基本概念,1.3 漫谈设计模式 20世纪90年代,面向对象(Object-Oriented)方法与技术在国内

6、软件业界十分火爆,人们热衷于谈论“对象”并引以为荣。十多年来,人们发表、出版了无数的文章和书籍。现在,该写的似乎都写完了,没有新花样玩了,真是一片无聊。设计模式(Design Pattern)及时问世,面向对象爱好者们终于有了新的追求。 1995年,Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides(戏称“四人帮”)出版了Design Patterns: Elements of Reusable Object-Oriented Software,该书的中译本已于2000年出版 . “四人帮”这本书的主要贡献是:确立了设计模式这个术语

7、,创导了一种新的面向对象设计思潮。该书出版后,全世界参与设计模式研究的人数呈爆炸性地增长。该书的负面效应是:这本书深奥无比,读者被分成两类,即“看得懂设计模式的”和“看不懂设计模式的”,后者居多。很多人刚入门时就被吓住了,知难而退。 何为“模式”和“设计模式” ?模式描述了在我们周围不断重复发生的问题,以及该问题的解决方案的核心,这样你就能一次又一次地使用该解决方案而不必重复劳动。 模式就是一种公式化的表现,究竟公式化是不是好事?(蔡学庸精辟的解释) 尽管软件技术发展非常快,但是仍然有非常多的设计模式可以让我们套用,包括体系结构模式、数据结构模式、接口模式等。 小结:设计模式的应用价值在于它能

8、帮助人们简便地复用以前成功的设计方案。设计模式不是凭空产生的,只有对应用域问题及其解决方案进行抽象和分析,发现本质,并按照一定的格式记录下来,才能成为可以被人们复用的设计模式。,2. 体系结构设计,2.1 体系结构设计原则 中国科学院的杨叔子院子如是言: 文学中有科学,音乐中有数学,漫画中有现代数学的拓扑学。漫画家可以“几笔”就把一个人画出来,不管怎么美化或丑化,就是活像。为什么?因为那“几笔”不是别的,而是拓扑学中的特征不变量,这是事物最本质的东西。 体系结构是指软件系统的基本和主体的形态,也就是软件系统中“最本质”的东西。一个软件系统的体系结构设计得好不好,可以用“合适性、结构稳定性、可扩

9、展性、可复用性”这些特征量来评估。 合适性:即体系结构是否适合于软件的“功能性需求”和“非功能性需求”。 设计师可以充分发挥主观能动性,根据需求的特征,通过推理和归纳的方法设计出合适的体系结构。经验不丰富的设计师往往把注意力集中在“功能性需求”而疏忽了“非功能性需求”,殊不知后者恰恰是最能体现设计水平的地方。 高水平的设计师高就高在“设计出恰好满足客户需求的软件,并且使开发方和客户方获取最大的利益,而不是不惜代价设计出最先进的软件。(以设计住宅为例) 对于软件系统而言,能够满足需求的设计方案可能有很多种,究竟该选哪一种?此时商业目标是决策依据,即选择能够为开发方和客户方带来最大利益的那个设计方

10、案。大部分软件开发人员天生有使用新技术的倾向,而这种倾向对开发商业产品而言可能是不利的,切记切记。,2. 体系结构设计,结构稳定性: 当前中国有几句流行的至理名言:“稳定压倒一切”、“发展是硬道理”。发展的前提条件是稳定,社会如此,开发软件产品也是如此。 体系结构一旦设计完成,应当在一定的时间内保持稳定不变,只有这样才能使后续工作顺利开展。如果体系结构经常变动,那么建筑在体系结构之上的用户界面、数据库、模块、数据结构等等也跟着经常变动,用“树倒猢狲散”来比喻很恰当,这将导致项目发生混乱。 高水平的设计师应当能够分析需求文档,判断出哪些需求是稳定不变的,哪些需求是可能变动的。于是根据那些稳定不变

11、的需求设计体系结构,而根据那些可变的需求设计软件的“可扩展性”。 可扩展性:可扩展性是指软件扩展新功能的容易程度。可扩展性越好,表示软件适应“变化”的能力越强。可扩展性越来越重要,这是由现代软件的商业模式决定的: 社会的商业越发达,需求变化就越快。 现代软件产品通常采用“增量开发模式”,开发商不断地推出软件产品的新版本,从而不断地获取增值利润。 稳定性和可扩展性之间存在辨证的关系:如果系统不可扩展的话,那么就没有发展前途,所以不能只关心稳定性而忽视可扩展性;而软件系统“可扩展”的前提条件是“保持结构稳定”,否则软件难以按计划开发出来,稳定性是使系统能够持续发展的基础。所以稳定性和可扩展性都是体

12、系结构设计的要素。 如果每次变化都导致体系结构发生大的变动,那简直就是“伤筋动骨”,这样的体系结构无疑是败笔之作。(例如房屋装修),2. 体系结构设计,可复用性 : 复用就是指“重复利用已经存在的东西”。被复用的对象可以是有形的物体,也可以是无形的知识财富。复用不是人类懒惰的表现而是智慧的表现。因为人类总是在继承了前人的成果,不断加以利用、改进或创新后才会进步。 复用的有利于提高产品的质量、提高生产率和降低成本。由经验可知,通常在一个新系统中,大部分的内容是成熟的,只有小部分内容是创新的。一般地可以相信成熟的东西总是比较可靠的(即具有高质量),而大量成熟的工作可以通过复用来快速实现(即具有高生

13、产率)。勤劳并且聪明的人们应该把大部分的时间用在小比例的创新工作上,而把小部分的时间用在大比例的成熟工作中,这样才能把工作做得又快又好。 复用的意义很容易理解,人们也乐意复用以前的成果,但是前提条件是该成果具有比较好的可复用性。可复用性是指成果被复用的容易程度。 可复用性是设计出来的,而不是偶然碰到的。要使体系结构具有良好的可复用性,设计师应当分析应用域的共性问题,然后设计出一种通用的体系结构模式,这样的体系结构才可以被复用。,2. 体系结构设计,2.2 体系结构设计流程 体系结构设计流程:6个步骤 体系结构设计报告模板见word文档,2. 体系结构设计,2.3 层次结构介绍 层次结构是最常见

14、的体系结构模式,它体现了“分而治之”的思想:当我们没法一口气解决复杂的原始问题时,就把该问题切割成许多个小的相对简单的问题,然后逐个解决。水平方向切割产生的层称为Layer,而竖直方向切割产生的层称为Tier。 层次结构在人类社会里随处可见。有个村长曾得意地向老婆吹牛:“全中国只有四个人比我的官儿大,乡长、县长、省长和国务院总理”。政府的行政结构应当划分为多个Layer和Tier。如果Layer和Tier的数目太少了,那么各级政府的领导人会非常劳累。反之如果Layer和Tier的数目太多了,那么导致政府机构太臃肿,办公效率极低。 古代中国文人的学历大体分为两层:秀才和举人。这种划分太粗了(即L

15、ayer数目太少),对发展教育是很不利的。很多老百姓读不起几年书,拿不到秀才毕业证书的人就被归类为文盲,不幸成为社会下层人物。虽然社会上的秀才人数也不少,但是从秀才到举人的跨度太大、门槛太高,很多秀才考举人考了一辈子也考不上。 典型的例子是儒林外史里的范进,范进在青年时期就成为秀才,可惜他考举人考了几十年!等他碰巧考上举人的时候,已经是个老头了,只给朝廷增加负担而没有贡献。后人吸取了经验教训,于是逐步建立了现代的学历层次结构,将学历划分为5个层次:小学、中学、学士、硕士、博士。这样人们读书的选择面广了,工作面也广了。 “层次结构”是应用最为广泛的体系结构模式。其最大的优点是具有良好的可扩展性,

16、人们在扩充或修改功能时,基本不会破坏原有结构的稳定性。但是万事有利必有弊,层次结构的系统的主要缺点是:管理多个Layer和Tier比较麻烦,运行效率可能比较低。所以,一个具备良好层次结构的系统,其Layer和Tier的数目要恰如其分。,3. 用户界面设计,3.1 什么是好的用户界面 通俗地讲,用户界面“好不好”主要看它是否“容易使用”和“美观”。 易用性是指用户使用软件的容易程度。现代人的生活节奏快,干啥事都想图个方便。谁都不乐意掏钱买很难用的东西,所以把易用性作为用户界面的重要属性对待无可非议。 除了要求软件易用之外,人们还希望用户界面美观。电影食神里的一段精彩故事情节可以帮助我们理解界面美

17、观的重要性。 美观的界面能消除用户由感觉引起的乏味、紧张和疲劳(情绪低落),大大提高用户的工作效率,从而进一步为发挥用户技能和为用户完成任务作出贡献。人们对美的向往和追求是与生俱有的。显然没有开发人员愿意丑化自己的软件,也没有用户嗜好丑陋的界面。软件开发者要设计美,用户要享受美,所以界面的美是开发者与用户的共同需求。 全世界无数人使用Microsoft公司的操作系统DOS, Windows 3.1, Windows 9x, Windows 2000和 Windows XP,这些操作系统的确是越来越好用了,并且越来越漂亮了。界面的“易用性”和“美”充分体现了人机交互作用中人的特性与意图,越来越多的用户将通过具有吸引力而令人愉快的人机界面与计算机打交道。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号