如果想搭一个狗窝,备好木料、钉子和一些基本工具(如锤子、锯和卷尺)之后,就可以开始工作了。从制定一点初步计划到完成一个满足适当功能的狗窝,可能不用别人帮助,在几个小时内就能够实现。只要狗窝够大且不太漏水,狗就可以安居。如果未能达到希望的效果,返工总是可以的,无非是让狗受点委屈。

  如果想为家庭建造一所房子,备好木料、钉子和一些基本工具之后,也能开始工作,但这将需要较长的时间,并且家庭对于房子的需求肯定比狗对于狗窝的需求要多。在这种情况下,除非曾经多次建造过房子,否则就需要事先制定出一些详细的计划,再开始动工,才能够成功。至少应该绘制一些表明房子是什么样子的简图。如果想建造一所能满足家庭的需要并符合当地建筑规范的合格房屋,就需要画一些建筑图,以便能想清楚房间的使用目的以及照明、取暖和水管装置的实际细节问题。做出这些计划后,就能对这项工作所需的时间和物料做出合理的估计。尽管自己也可能建造出这样的房屋,但若有其他人协作,并将工程中的许多关键部分转包出去或购买预制的材料,效率就会高得多。只要按计划行事,不超出时间和财务的预算,家庭多半会对这新房感到满意。如果不制定计划,新房就不会完全令人满意。因此,最好在早期就制定计划,并谨慎地处理好所发生的变化。

  如果你要建造一座高层办公大厦,若还是先备好木料、钉子和一些基本工具就开始工作,那将是非常愚蠢的。因为你所使用的资金可能是别人的,他们会对建筑物的规模、形状和风格做出要求。同时,他们经常会改变想法,甚至是在工程已经开工之后。由于失败的代价太高了,因此必须要做详尽的计划。负责建筑物设计和施工的是一个庞大的组织机构,你只是其中的一部分。这个组织将需要各种各样的设计图和模型,以供各方相互沟通。只要得到了合适的人员和工具,并对把建筑概念转换为实际建筑的过程进行积极的管理,将会建成这座满足使用要求的大厦。如果想继续从事建筑工作,那么一定要在使用要求和实际的建筑技术之间做好平衡,并且处理好建筑团队成员们的休息问题,既不能把他们置于风险之中,也不能驱使他们过分辛苦地工作以至于精疲力尽。

  奇怪的是,很多软件开发组织开始想建造一座大厦式的软件,而在动手处理时却好像他们正在仓促地造一个狗窝。

  有时你是幸运的。如果在恰当的时间有足够的合适人员,并且其他一切事情都很如意,你的团队有可能(仅是可能)推出一个令用户眼花缭乱的软件产品。然而,一般的情况下,不可能所有人员都合适(合适的人员经常供不应求),时间并不总是恰当的(昨天总是更好),其他的事情也并不尽如人意(常常由不得自己)。现在对软件开发的要求正在日益增加,而开发团队却还是经常单纯地依靠他们唯一真正知道如何做好的一件事——编写程序代码。英雄式的编程工作成为这一行业的传奇,人们似乎经常认为更努力地工作是面对开发中出现的各种危机的正常反应。然而,这未必能产生正确的程序代码,而且一些项目是非常巨大的,无论怎样延长工作时间,也不足以完成所需的工作。

  如果真正想建造一个相当于房子或大厦类的软件系统,问题可不是仅仅编写许多软件。事实上,关键是要编出正确的软件,并考虑如何少写软件。要生产合格的软件就要有一套关于体系结构、过程和工具的规范。即使如此,很多项目开始看起来像狗窝,但随后发展得像大厦,原因很简单,它们是自己成就的牺牲品。如果对体系结构、过程或工具的规范没有作任何考虑,总有一天狗窝会膨胀成大厦,并会由于其自身的重量而倒塌。狗窝的倒塌可能使你的狗恼怒;同理,不成功的大厦则将对大厦的租户造成严重的影响。

  不成功的软件项目失败的原因各不相同,而所有成功的项目在很多方面都是相似的。成功的软件组织有很多成功的因素,其中共同的一点就是对建模的采用。

  建模是一项经过检验并被广为接受的工程技术。建立房屋和大厦的建筑模型,能帮助用户得到实际建筑物的印象,甚至可以建立数学模型来分析大风或地震对建筑物造成的影响。

  建模不只适用于建筑业。如果不首先构造模型(从计算机模型到物理风洞模型,再到与实物大小一样的原型),就装配新型的飞机或汽车,那简直是难以想像的。新型的电气设备(从微处理器到电话交换系统)需要一定程度的建模,以便更好地理解系统并与他人交流思想。在电影业,情节串联板是产品的核心,这也是建模的一种形式。在社会学、经济学和商业管理领域也需要建模,以证实人们??的理论或用最小限度的风险和代价试验新的理论。

  那么,模型是什么?简单地说:

  模型是对现实的简化。

  模型提供了系统的蓝图。模型既可以包括详细的计划,也可以包括从很高的层次考虑系统的总体计划。一个好的模型包括那些有广泛影响的主要元素,而忽略那些与给定的抽象水平不相关的次要元素。每个系统都可以从不同的方面用不同的模型来描述,因而每个模型都是一个在语义上闭合的系统抽象。模型可以是结构性的,强调系统的组织。它也可以是行为性的,强调系统的动态方面。

  为什么要建模?一个基本理由是:

  建模是为了能够更好地理解正在开发的系统。

  通过建模,要达到4个目的:

  (1)模型有助于按照实际情况或按照所需要的样式对系统进行可视化。

  (2)模型能够规约系统的结构或行为。

  (3)模型给出了指导构造系统的模板。

  (4)模型对做出的决策进行文档化。 【第2章讨论UML如何完成这4件事情。】

  建模并不只是针对大的系统。甚至像狗窝那样的软件也能从一些建模中受益。然而,可以明确地讲,系统越大、越复杂,建模的重要性就越大,一个很简单的原因是:

  因为不能完整地理解一个复杂的系统,所以要对它建模。

  人对复杂问题的理解能力是有限的。通过建模,缩小所研究问题的范围,一次只着重研究它的一个方面,这就是Edsger Dijkstra几年前讲的“分而治之”的基本方法,即把一个困难问题划分成一系列能够解决的小问题;解决了这些小问题也就解决了这个难题。此外,通过建模可以增强人的智力。一个适当选择的模型可以使建模人员在较高的抽象层次上工作。

  任何情况下都应该建模的说法并没有落到实处。事实上,一些研究指出,大多数软件组织没有做正规的建模,即使做了也很少。按项目的复杂性划分一下建模的使用情况,将会发现:项目越简单,采用正规建模的就越少。

  这里强调的是“正规”这个词。实际上,开发者甚至对非常简单的项目也要做一些建模工作,虽然很不正规。开发者可能在一块黑板上或一小片纸上勾画出他的想法,以对部分系统进行可视化表示,或者开发组可能使用CRC卡片描述一个场景或某种机制的设计。使用任何一种这样的模型都没有什么错。如果它能行得通,就可以使用。然而,这些非正规的模型经常是太随意了,它没有提供一种容易让他人理解的共同语言。建筑业、电机工程业和数学建模都有通用的建模语言,在软件开发中使用一种共同的建模语言进行软件建模也能使开发组织获益匪浅。

  每个项目都能从一些建模中受益。即使在一次性的软件开发中——由于可视化编程语言的支持,可以轻而易举地扔掉不适合的软件。建模也能帮助开发组更好地对系统计划进行可视化,并帮助他们正确地进行构造,使开发工作进展得更快。如果根本不建模,项目越复杂,就越有可能失败或者构造出错误的东西。所有实用系统都有一个自然趋势:随着时间的推移变得越来越复杂。虽然今天可能认为不需要建模,但随着系统的演化,终将会对这个决定感到后悔,但那时为时已晚。

项目中为什么要用UML建模相关推荐

  1. UMLChina: trufun Plato是中国唯一的UML建模工具

      在UMLChina最新发布的"厂商"栏目中,Trufun Plato是唯一的中国人自己的UML建模工具:[url]http://www.umlchina.com/Tools/N ...

  2. 图解Visual Studio 2010中的UML建模功能

    Visual Studio 2010在架构和项目管理方面的功能增加让人眼前一亮,之前曾详细介绍过Visual Studio 2010新增的架构工具,包括通过可视化技术DGML提供直观的图表,依赖图,继 ...

  3. 对软件开发中uml建模的理解和图形整理(一)

    由于uml(统一建模语言)在开发中经常会用到,特别是在软件开发中的OOAD阶段,因此要理解和使用uml显得尤为重要.在uml开始之前,咱先回顾一个OOAD.OOP的主要特征. OOAD:根据面向对象的 ...

  4. 浅析软件工程中的UML建模技术

    一.基本信息 标题:浅析软件工程中的UML建模技术 时间:2018 出版源:电子世界 领域分类:软件工程:UML建模技术:需求分析 二.研究背景 问题定义:软件工程中UML建模技术的研究 难点:明确软 ...

  5. 建模大师怎么安装到revit中_全面解析Revit软件在装配式建筑项目中的建模思路...

    Revit软件在装配式建筑项目中的建模思路 Revit是Autodesk公司出品的一套软件,可帮助建筑设计师设计.建造和维护质量更好.能效更高的建筑,在建筑行业中的应用非常广泛. 在2019版的Rev ...

  6. UML建模中的关系画法

    UML建模中的关系包括:依赖.泛化.关联.实现.聚合.组合等. 很多人看到UML类图后都看不懂,为什么? 因为基础的关系没有掌握,各个框之间的关系是啥都不明白,怎么能懂类图呢.不管是类图.用例图.指示 ...

  7. UML建模系列文章总结

    一.为什么要学习UML 二.UML的历史 三.UML的特点 四.UML中的视图 五.UML建模工具 六.UML的应用领域 七.UML的构成 1.需求阶段如何书写Use Case 2.设计阶段如何画用例 ...

  8. 软件需求工程与UML建模——第九组原型系统总结

    自习通原型系统总结文档 目录 一.   功能点概述 二.   前端界面交互功能说明 三.   前后端数据交换功能说明 四.   人员分工说明 五.   进阶需求内容展示 第一部分 功能点实现情况 下图 ...

  9. UML建模系列文章总结 (转载)

    一.为什么要学习UML 二.UML的历史 三.UML的特点 四.UML中的视图 五.UML建模工具 六.UML的应用领域 七.UML的构成 1.需求阶段如何书写Use Case 2.设计阶段如何画用例 ...

最新文章

  1. vs2010 静态使用 opencv 2.46 库
  2. 中国在5G、AI等领域对美国紧追不舍,但设备工艺依旧落后
  3. 京东8.27算法笔试-滚雪球(动态规划python)
  4. java导出jar带第三方库_在.jar文件中导出java库
  5. mysql按select导出_mysql 导出select结果到文本的几种方式
  6. linux 内核模块发送udp,在内核模块级缓冲UDP的问题(当然不是SOCKET编程了。)
  7. MySQL 中视图和表的区别以及联系是什么?
  8. 专科python应届生工资多少-应届毕业生自述面试15K月薪的Python后端开发经历,希望对你有用...
  9. jumpserver 跳板机
  10. teechart绘制实时曲线_基于OpenCV的显著图绘制
  11. ARINC485和RS485的区别
  12. Oracle定时任务DBMS_JOB
  13. linux系统线程通信的几种方式,Linux的进程/线程通信方式总结
  14. win10登录时显示PIN码不可用,转到设置重新设置PIN码
  15. macOS 开发 - Move to Applications folder
  16. Python爬虫实例--新浪热搜榜[正则表达式]
  17. 【环境配置】虚拟机中配置C++环境
  18. 【转载】完全版线段树 by notonlysuccess大牛
  19. Electron桌面应用打包流程详情
  20. 最强蜗牛服务器维护祷告bug,最强蜗牛 这个游戏的玩家太难带了,竟然天天希望服务器有事...

热门文章

  1. 为何这电脑跑得比谁都快?Win10必做的9项优化
  2. 多层感知机详细讲解(附代码)
  3. 用pymysql制作一个同学录小程序
  4. win10 头像的路径
  5. Web自动化【selenium】基础知识
  6. Java简单代码验证三门问题
  7. 自定义View 实现字母快速索引控件
  8. SAS MACRO Debugging option
  9. OpenVINO整合TensorFlow实现推理加速
  10. 计算机学科教师职称答辩,教师职称论文答辩开场白及注意事项