首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >对软件系统建模与在代码中进行建模有什么好处呢?

对软件系统建模与在代码中进行建模有什么好处呢?
EN

Software Engineering用户
提问于 2017-08-15 12:57:48
回答 5查看 2.8K关注 0票数 21

我认识的大多数IT人员都认为,在编写代码之前用UML或其他类型的图表对软件建模是有益的。(我的问题不是专门针对UML的,它可能是对软件设计的任何图形或文本描述。)

我对此不太确定。主要原因是:代码不说谎。它由编译器或解释器检查。它希望有自动化的测试,并需要通过静态代码分析。如果一个模块与另一个模块没有正确的接口,它通常在代码中是显而易见的,因为您收到了错误消息。

所有这些都不能用图表和其他文档来完成。是的,有些工具可以检查UML,但是到目前为止我看到的一切都是非常有限的。因此,这些文件往往是不完整、不一致或简单虚假的。

即使图表本身是一致的,您也不能确定代码实际上实现了它们。是的,有代码生成器,但它们从不生成所有的代码。

我有时觉得对建模的痴迷源于这样一种假设,即代码不可避免地会成为架构师、设计师或其他高薪人士不应该处理的令人费解的乱局。否则就太贵了。因此,所有的设计决策都应该从代码中移开。代码本身应该留给专家(代码猴子),他们能够编写(或者可能阅读)它,但不需要处理任何其他事情。当汇编程序是唯一的选择时,这可能是有意义的,但现代语言允许您在非常高的抽象级别上进行编码。因此,我不认为有必要再建模。

我缺少什么建模软件系统的论据?

顺便说一句,我确实认为图表是记录和交流软件设计某些方面的一个很好的方法,但这并不意味着我们应该将软件设计建立在它们之上。

Clarification:

这个问题因不清楚而被搁置。因此,让我补充一些解释:

我想问的是,使用(非代码)文档将软件建模作为软件设计真相的主要来源是否有意义。如果代码的很大一部分是从这些文档自动生成的,我就不会想到这种情况。如果是这样的话,我会把文档本身看作是源代码,而不是模型。

我列举了这个过程的一些缺点,让我想知道为什么这么多人(在我的经验中)认为它是进行软件设计的最好方式。

EN

回答 5

Software Engineering用户

回答已采纳

发布于 2017-08-15 13:42:45

建模软件系统与所有代码的优点是:我可以将模型安装在白板上。

我非常相信在一张纸上交流的魔力。如果我试着把代码放在白板上,当我教我们的系统给新的程序员时,根本就没有适合白板的抽象级别的代码。

我知道你所指的对模特的痴迷。人们做事情是因为他们以前就是这样做的,不去想他们为什么要这么做。我是来称之为形式主义的。我更喜欢非正式的工作,因为很难把愚蠢隐藏在传统的背后。

这并不意味着我不会时不时地拿出一个UML草图。但我永远不会要求你在编码之前提交一个UML文档。我可能要求你花5分钟时间来解释你在做什么,因为我无法忍受只有一个人能理解的代码的存在。

福勒指出了人们使用UML的不同方式,他称之为UML模式。所有这些方法的危险之处在于,它们可以被用来躲避有用的工作。如果你是用鼠标编写代码的话,我见过很多次尝试。还没见过有人让它真正发挥作用。如果你这样做是为了沟通,你最好确保别人理解你。如果你这么做是为了设计,你最好在工作中找到并解决问题。如果一切进展顺利,而且你的大部分时间都花在了让箭看起来很漂亮的时候,那就关掉它,回去工作吧。

最重要的是,不要产生一天以上有效的图表。如果你能做到的话,你就失败了。因为软件应该是软的。不要花上几个星期的时间就能得到正确的图表。告诉我怎么回事。如果有必要,就用餐巾纸。

也就是说,我更喜欢知道他们的UML和设计模式的程序员。他们更容易沟通。只要他们知道制作图表不是一项全职工作。

票数 24
EN

Software Engineering用户

发布于 2017-08-16 02:03:42

我的问题是,使用(非代码)文档将软件建模为软件设计真相的主要来源是否有意义?

不是的。这一点都说不通。您的代码是您的主要设计文档(即“软件设计真相的主要来源”)。只有代码才能准确地描述应用程序在编译器接受该设计并从中创建应用程序时所做的工作。

无论如何,要使用图表作为辅助设计文档,但如果它们不是由代码自动生成的,请注意,它们讲述的是与实际设计不同的故事。如果UML在您的船上浮动,请使用它。如果不是的话,用点别的吧。

有些人发现,在开始编写代码之前,用图表的形式勾勒出他们的思想是有用的。但记住鲍勃叔叔在这件事上说过的话:

“所以,是的,有时图表可能是不合适的。它们什么时候不合适?当你在没有代码的情况下创建它们来验证它们,然后打算遵循它们。画一个图表来探索一个想法是没有错的。”

如果您确实使用UML来探索一个设计,那么在开始编写代码时将它们扔掉。编写一个测试,然后编写一些代码以使其通过。重复一遍。这样,您最终将得到一个经过验证的设计。UML永远不能为您提供相同级别的设计验证。

票数 6
EN

Software Engineering用户

发布于 2017-08-16 06:09:55

我想问的是,使用(非代码)文档将软件建模作为软件设计真相的主要来源是否有意义。如果代码的很大一部分是从这些文档自动生成的,我就不会想到这种情况。如果是这样的话,我会把文档本身看作是源代码,而不是模型。

大量的非代码文档作为蓝图是有用的。也就是说,设计的“真理”应该遵循这个方向。这是一种为设计必须实现的元素建模的方法。您可以称它们为需求文档,但在我可以给出的所有示例中,这可能太强了。我已经通过PlantUML通过PlantText.com来生产这些。

  • 用例图可以显示预期的特性和与用户或外部系统的交互。
  • 活动图可以显示软件需要支持的业务流程。
  • 状态图可以在网站上显示预期的动态:
  • 提出了四种设计模式的静态模型和动态模型。例如,Memento:

我列举了这个过程的一些缺点,让我想知道为什么这么多人(在我的经验中)认为它是进行软件设计的最好方式。

如果您在体验之外对一些有关UML使用的真实信息感兴趣,那么有一些研究已经完成(我试图找到指向非付费文章的链接):

票数 6
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/355733

复制
相关文章
试用 Azure Sql 数据库
我们的12月试用账号的免费服务里有一个Azure Sql服务,最近正好自己做一个小工具需要一个数据库,正好可以把它当测试库顺便体验一把Azure Sql。
MJ.Zhou
2020/10/26
2.3K0
试用 Azure Sql 数据库
Azure恢复服务-DPM联机备份SQL数据库
继上一步我们完成了DPM的Azure联机备份配置后,下面我们继续来看看DPM如何把数据备份到Azure备份保管库的。
李珣
2019/03/14
7890
sql语句查看MySQL数据库大小
参考链接:http://www.ttlsa.com/mysql/mysql-howto-find-the-database-and-table-size/
保持热爱奔赴山海
2019/09/18
8.8K0
查看数据库里阻塞和死锁情况.sql
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_who_lock]’) and OBJECTPROPERTY(id, N’IsProcedure’) = 1) drop procedure [dbo].[sp_who_lock] GO /*************************************************************************** //  创建 :
全栈程序员站长
2021/04/26
9750
Oracle 查看数据库文件 SQL语句
Oracle 数据库文件主要分为: 表空间数据文件(包括临时表空间和UNDO表空间) 控制文件 日志文件(包括重做日志和standby日志) 可以通过 SQL 来查询: set line222 col pagesize1000 select name from v$datafile union all select name from v$tempfile union all select member from v$logfile union all select name from v$contr
Lucifer三思而后行
2021/09/14
1.7K0
常用数据库 SQL 命令详解(上)
本文主要以 Mysql 数据库为基础,对常用 SQL 语句进行一次深度总结,由于篇幅较长,难免会有些遗漏的地方,欢迎网友留言指出!
Java极客技术
2022/12/04
6460
如何管理SQL数据库
安装SQL数据库时,需要添加,修改,删除和查询数据所需的所有命令。这个备忘单样式指南提供了一些最常用的SQL命令的快速参考。
圣人惠好可爱
2018/11/16
5.5K0
mysql查看数据隔离级别_如何查看mysql数据库隔离级别
该参数表示服务可以获取的最大 CPU 时间,value 为百分数形式,高于 100% 表示可使用 1 核以上的 CPU。与 cgroup cpu 控制器 cpu.cfs_quota_us 配置项对应。
全栈程序员站长
2022/08/24
12.6K0
【数据库新建的表如何查看以及保存】
magize
2023/07/11
3550
【数据库新建的表如何查看以及保存】
Azure上一键部署Azure Stack
方便在Azure Global上创建Azure Stack ASDK POC环境。可以访问以下github站点:
盆盆
2019/04/24
5410
Azure上一键部署Azure Stack
SQL 基础(一)创建、查看、修改、删除数据库
*注:数据库的分离与附加一般发生在数据库在不同机器迁移的情况下使用,当使用 Management Studio 操作时,可能会因权限问题导致附加失败,下面演示如何修改控制权限
攻城狮杰森
2022/06/03
1.7K0
SQL 基础(一)创建、查看、修改、删除数据库
PG数据库版本查看方法,sql语句查pg数据库版本方法
PG 数据库和 oracle 数据库的查看数据库版本的 sql 语句还不一样。 PG 数据库版本查看方法如下:
小蓝枣
2020/09/24
2.3K0
PG数据库版本查看方法,sql语句查pg数据库版本方法
sql2012数据库可疑如何修复_sql数据库mdf还原
大家好,又见面了,我是你们的朋友全栈君。 USE MASTER GO SP_CONFIGURE ‘ALLOW UPDATES’,1 RECONFIGURE WITH OVERRIDE GO ALTER DATABASE worker SET EMERGENCY GO sp_dboption ‘worker’, ‘single user’, ‘true’ GO DBCC CHECKDB(‘worker’,’REPAIR_ALLOW_DATA_LOSS’) GO ALTER DATABASE worker SET ONLINE GO sp_configure ‘allow updates’, 0 reconfigure with override GO sp_dboption ‘worker’, ‘single user’, ‘false’ GO
全栈程序员站长
2022/09/25
2.3K0
Azure上一键部署Azure Stack
要参加微信课堂以及日常技术交流,请给我们发微信(微信号:markpah),请注明加入以下哪个群:
盆盆
2019/03/05
3410
Azure上一键部署Azure Stack
将数据从 SQL Server 导入 Azure Storage Table
最近有个需求要将数据存储从 SQL Server 数据库切换到 Azure Storage 中的 Table。然而不管是 SSMS 还是 Azure Portal 都没有提供直接的导入功能,是不是又想自己写程序去导数据了?其实不用!没有点过数据库天赋的我996了一个晚上,终于找到了点点鼠标就搞定的方法,今天分享给大家。
Edi Wang
2020/06/15
2K0
sql数据库的基本介绍 sql数据库的作用
在如今的大数据时代中,对于数据的收集和整理就显得尤为重要。在这个过程中,数据库的作用是不容忽视的。数据库可以帮助人们将数据的收集、提取变得更简单、更方便。在大数据处理领域,一种名为sql数据库工具吸引着很多的人。那么这是一种什么工具?sql数据库究竟有什么作用?下面就来为大家介绍一下。
用户8739990
2021/07/16
5.4K0
sql数据库的基本介绍 sql数据库的作用
Azure Machine Learning 上如何选择合适的机器学习算法
Azure Machine Learning Studio 有着大量的机器学习算法,现在你可以使用它来构建预测分析解决方案。这些算法可用于一般的机器学习:回归分析、分类、聚类和异常检测,且每一个都可以
用户1737318
2018/06/05
6260
如何查看Django ORM执行的SQL语句
Django ORM对数据库操作的封装相当完善,日常大部分数据库操作都可以通过ORM实现。
BigYoung小站
2020/05/06
1.9K0
MySQL如何查看未提交的事务SQL
MySQL中经常遇到事务中的SQL正在执行或执行完成后未提交,如何找出对应的SQL?
俊才
2023/01/16
2.9K0
《sql基础教程》书里的sql文件如何导入数据库?
对于刚入门学习sql的,我只推荐一本书Mick的《SQL基础教程》。网上很多人推荐《SQL必知必会》,其实这本书更适合数据库运维,对刚入门的朋友来说,理解不了。而Mick的《SQL基础教程》的书通俗易懂,让你学起来有趣的多了。兴趣才是学下去的理由。
猴子数据分析
2021/05/03
1.9K0

相似问题

R包中的私有Bitbucket包依赖项

11

使用Flutter依赖项形成私有Bitbucket存储库

139

Bitbucket NPM私有包不安装依赖项

121

来自私有bitbucket回购的依赖项不还原

22

带有版本的package.json中的私有bitbucket存储库

32
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文