一个软件设计的全过程(基于UML)

文/陈刚 at 2006年4月12日 from www.ChenGang.com.cn

前段时间把一个界面框架完成了,今天基于这个框架开发一个小模块,在这里把这个模块设计的全过程记录下来,希望大家讨论并指正。

一、起因

公司交给我一个任务,为测试员写一个手机模拟界面,以方便她们的手机短信测试。过去她们都是用MC4J直接调用公司服务器的MBean服务来模拟进行测试,以验证我们整个系统平台。这种测试主要是检查收发短信是否正常,而我的要做的工作就是,让她们在测试的时候更方便更直观。

二、需求

我和测试员陈MM(也就是软件的使用者)约定了一个时间,大家一起来讨论这个软件的需求。

1、首先,我大概了解了一下她们的测试工作,知道我要做个什么东东。

2、然后我回去思考了一下,再次找她详细了解其测试的具体步骤,并在一张白纸上以UML用例图的方式,记录下需求的功能。用例是什么?用例就是需求,就是你的软件应该具有的功能,当然用例图只是概括性的对功能进行了描述。

3、最后,我坐在我的电脑前开始用MagicDraw UML来画用例图(我不喜欢用Rose,那玩意太笨重了,界面友好性也不好)。在画用例图的时候,我发现了一些隐含的功能,这些是陈MM在和我做需求时没有考虑到的(注:开发者应该为用户挖掘隐含需求)。我和陈MM一一确定了这些我新发现的需求,最后得到如下的用例图。

(1)手机前台测试操作的用例图(说明:include是指某用例包含(include)子用例)


 (2)后台管理

三、界面设计

接下来是界面设计。既然是手机模拟,我很自然就拿我的motorola手机的操作界面来做参考。不过这里应该注意到,手机操作环境和电脑操作环境不尽相同(比如说电脑有鼠标,还有键盘可以输入文字),所以没有必要唯妙唯肖的完全模枋,还是以使用者操作方便为主。

界面设计是很重要的一步,不要一上来就写程序,一定要先做到心中有个大概,否则返工的可能性就很大。而且,把界面拿出来给客户看,客户也就能做到心中有数,还能尽早提出一些新需求和意见来。千万不要等到软件做完了再拿给客户看,到时客户看了如果要修改,那就做太多白费工了。

由于软件界面相对简单,陈MM基本没有提修改意见,但这不是个好兆头。不过极限编程就是要拥抱变化不是^_^。咱不怕她改,只要大致的界面她能定下来就行了。

界面我喜欢用Visio来画,当然也听说有人喜欢用VB来快速构建界面原型的,看个人喜好了。整个界面如下:

这个是后台管理界面

四、类图

类图反映了软件的数据模型。在设计数据模型,我参考了界面设计图和用例图,找出一个个的类。然后参照用例图的一个个功能,设计出了各类的属性和方法。设计初始的类图当然不可能很详细,但至少应该看到个大概。有错误不要紧,后期可以慢慢修正,但大体关系就算定下来了。

Neil(公司CTO,一个40岁左右的真正的资深程序员)说:看一个软件的设计主要看两个类:类图和时序图。类图确定了软件数据模型的静态关型,时序图则是数据模型的动态关系。

类图如下,看英文大致可以知道类/属性/方法的含义和作用了,就不一一介绍了。

五、时序图

时序图是本文最后一个图,时序图表明了用例图中各功能的实现方案,同时也反应了类图中各类的交互关系。以后程序的逻辑和时序图基本一致。不过,有些人会去画得很详细的时序图,详细到都快赶上伪代码级别了,我觉得这没必要。我把时序图看做反映自己思路的大概过程,所以也就画个大概。

我认为时序图要简洁易懂,这样以后你的后继维护者,拿到这个软件的时序图(当然也包括用例图、类图),就能明白你的大概设计思路。另外,画时序图也能整理自己的思路,同时还可以对类图的设计进行验证。在画这个时序图的过程中,我就纠正了在类图中的几处考虑不周的地方。

总结:时序图可以(1)整理思路(2)验证类的设计(3)是很好的软件文档,对维护者理解代码很有帮助。

这里仅给出其中几个时序图(实际上我也没有把用例都画完,有些类似的简单的,就忽略了)

(1)新增一个手机号码

(2)关机

(3)开机

(4)发送短信

到这里设计阶段就完成了,用时一天。下一步是编码,将应用TDD先写测试代码的方式来写代码,下次再介绍了。

作者简介

陈刚,广西桂林人,著作有《Eclipse从入门到精通》
您可以通过其博客了解更多信息和文章:http://www.ChenGang.com.cn
版权声明:本博客所有文章仅适用于非商业性转载,并请在转载时注明出处及作者的署名。

posted on 2006-04-12 16:51 陈刚 阅读(217) 评论(4)  编辑 收藏 收藏至365Key 所属分类: 项目日记

评论

re: 一个软件设计的全过程(基于UML)

建议使用摘要方式发布,如何使用摘要,请博客园FAQ第4项: 。

2006-04-12 19:18 |

re: 一个软件设计的全过程(基于UML)


这样开发干净利落、思路清淅
对我很有帮助,看了这篇文章,觉得要好好学习一下UML的作图

希望多看到些这样的文章

2006-04-12 20:09 |

re: 一个软件设计的全过程(基于UML)

拜读过您的大作《Eclipse从入门到精通》,学习Eclipse过程中确实帮助相当大。
此篇好文,学习ing

2006-04-12 23:02 |

re: 一个软件设计的全过程(基于UML)

受益,
谢谢,作者,
希望能看到更多作品,给大家分享,:0)

2006-04-13 09:51 |

转载于:https://www.cnblogs.com/MEYEGG/archive/2006/04/13/374128.html

[转]一个软件设计的全过程(基于UML)相关推荐

  1. android流量监控软件设计与实现,基于android平台的流量监控系统的设计与实现

    摘要: 为了解决流量超额使用,恶意流量吸费的非法插件以及软件恶意联网的问题,帮助用户安全放心使用手机,本文设计并实现了一款基于Android平台的流量监控系统. 本文以Android系统为平台,分别从 ...

  2. 关于Excel操作编写的一个软件设计构思案例[连载] --如何打开Excel文件,获取需要列的数据显示到表格内做修改

    如何打开Excel文件,获取需要列的数据显示到表格内做修改? DataSet 读取表格数据 = new DataSet(); Thread 读取, 更新; int 计数 = 0, 定位 = 0, 原条 ...

  3. 关于Excel操作编写的一个软件设计构思案例[连载] --如何把处理好后的数据导出Excel文件中(含背景\字体颜色设置)

    导出数据到Excel文件中二种方法四种形式:其一是创建新的Excel文件实例写入数据:其二是打开已有Excel文档对其执行更新或插入数据:保存文档方法有:直接保存(2种).另存.间接保存.接下来分别介 ...

  4. 基于文档对象模型的软件设计

    基于文档对象模型的软件设计 文档对象模型是一种较为抽象的系统设计模式,就是将要处理的信息进行整理和抽象,运用面向对象软件设计方法,确定各种信息的组织关系和继承关系,形成一种树状结构来精确描述业务数据. ...

  5. 【软件设计】如何了解一个软件的设计?

    如何了解一个软件的设计? 首先是模型,它是一个软件的核心部分,也有人称之为抽象.设计最关键的就是构建出模型. 而理解一个设计中的模型,可以帮助我们建立起对这个软件整体的认知. 比如: 你在编写分布式计 ...

  6. 如何了解一个软件的设计?

    刚入职,接手新项目,面对一个全新项目,怎么快速研究它? 很多人直接看源码,一头扎入代码,很快就迷失其中,最初那股子探索精神,也会逐渐被迷茫所替.有多少次你满怀激情打开一个开源项目,结果多半坚持不了就放 ...

  7. visual studio 设计器不显示_面向国际市场的装置开发运维软件设计与实现

    南京南瑞继保电气有限公司的研究人员陈宏君.张磊.徐睿.曾凯.刘坤,在2019年第3期<电气技术>上撰文,分析了面向国际市场的用户软件现状与问题,介绍了新一代控制保护平台PCS-S系列装置配 ...

  8. 软件设计的三重境界:守-破-离

    规矩礼仪,务必先尽守之,然后破之,离之,然皆不可忘本矣. 理解守破离 "守破离"最初起源于日本剑道,是一种学习剑道的方法,后来,这种方法被发展到了整个日本武术界,乃至其他各个行业, ...

  9. 软件设计是决定软件性能的关键

    大家更多的是关注测试工具,测试技巧,而少有人去从根本上来分析.测试软件.一个优秀的软件性能测试工程师要具有宏观和微观的软件测试观.他要分析软件的 架构,了解软件的运行模式,了解通讯协议,更是一个软件开 ...

  10. 【设计模式系列24】GoF23种设计模式总结及软件设计7大原则

    设计模式总结及软件设计七大原则 设计模式系列总览 前言 软件设计7大原则 开闭原则(Open-Closed Principle,OCP) 里氏替换原则(Liskov Substitution Prin ...

最新文章

  1. 让html:error只显示第一条错误信息
  2. mySQL Slow Query Log Rotation(慢查询日志轮循设置)
  3. bzoj4830 hnoi2017 抛硬币
  4. Oracle中EXECUTE IMMEDIATE的使用技巧
  5. Java 微服务框架对比:Dubbo 和 Spring Cloud
  6. 【详谈 Delta Lake 】系列技术专题 之 Streaming(流式计算)
  7. Linux下MySQL 5.5.11编译安装笔记(待验证)
  8. 什么是AWT_Swing_Scroll面板,上!!!
  9. 计网实验1--配置路由
  10. 红蓝宝书1000题 新日本语能力考试N1文字.词汇.文法 练习+详解
  11. python-回调函数
  12. google提供的blog搜索网址
  13. nokia专业显示器测试软件,Nokia Monitor Test(
  14. 安全技术 密钥安全_硬件安全密钥不断被人们追忆; 他们安全吗?
  15. 全球及中国汽车扬声器粘合剂行业市场发展状况与竞争格局分析报告2022-2028年
  16. 一步一回头撞在了南墙上
  17. 单片机程序运行在哪里
  18. 大数据学习路线及全套视频教程
  19. Bootstrap 字体图标和自定义矢量图标
  20. 二进制运算的运用:异或(XOR)

热门文章

  1. java Iterator源码
  2. Linux嵌入式开发_主设备号与次设备号详解
  3. c/c++_消除非标准警告
  4. 神经损伤怎么康复好 成都顾连康复医院专科专治
  5. 数据绑定(九)Binding的数据校验
  6. Service Worker 全面进阶
  7. [USB-Blaster] Error (209040): Can't access JTAG chain
  8. 电商平台实战经验:电商中的Hadoop生态系统应用
  9. netframework 4.5官网下载路径
  10. Orchard核心机制