梦里的题目:让我安全回家

并不是要说明做梦的神奇,确实是感觉这个题目非常有意思,所以拿出来和大家分享。

近日一次做梦,梦到做一张试卷。试卷上题目非常少。其他的题目不记得了,只是记得最后一道题目。这个题目是这样描述的:

请用计算机实现,只要我安全到家,任务就算完成。

我开始被这个题目搞得一塌糊涂。根本不知道啥意思。 这时候梦里有人有人提示符号。我突然有所醒悟。

这是一道类似于微软那些面试类型的题目。重点不在于结果如何,而是看你的分析过程。

  1. 用计算机实现,也就是使用软件工程方法来实现
  2. 任务就是需求,需求完成,软件就完成了。

好了,现在我们来运用我们的软件意识来完成这个任务。

首先,使用UML的用例来描述我们的需求:


现在是挖掘需求的时候:

  1. 安全是如何定义的
  2. 家在哪里
  3. 对时间有什么要求
  4. 回家过程中需要考虑吃饭和住宿问题吗
  5. 交通工具如何选择
  6. 如果没有安全回家,结果如何

这只是简单的对需求表面的挖掘。好的需求,会进行更深层次的挖掘。如果说上面要弄明白的是“是什么”的问题,那么高级需求会搞清楚“为什么”的问题。

  1. 为什么要回家,回家的目的是什么
  2. 安全对于回家有什么必然联系,为什么要有这个要求
  3. 回家的背景是什么,这个时候其他人都有什么需求

呵呵,怎么样?这些问题都需要回答,很难吧!

需求弄清楚之后,进行软件设计。先画一个类图,下面是我的设计,仅仅为个人理解,不是权威设计。主要为了表达意思。此图是业务逻辑图,不是实体类图。


这个时候你要开始考虑架构性的事情了。前面都可以认为是需求阶段。最多有一个需求转换过程。

  1. 本系统是单机还是网络
  2. SmartClient还是B/S
  3. 编程语言选择,需要考虑可编程性和程序员技能
  4. 持久化技术选择
  5. 有什么特殊要求,此一般为非功能性需求

下面最关键要考虑系统中什么地方可能变化。我姑且认为交通工具最容易变化,做以下分析

  1. 交通工具应该可以选择
  2. 中间是否可以切换交通工具
  3. 安全的定义是否可能变化
  4. 以后除了要“我”安全回家,还可能要求让更多的人回家
  5. 家是不是可能是夫妻双方式的家
  6. ...

架构师必须通过他敏锐的观察力去洞察这一切。做完决策之后,再制定出对应策略。

剩下就是我最擅长的编码工作了。什么?还有TDD?是的我知道的,呵呵,先写写测试用例。过程中,还要了解代码版本管理。过程中的需求管理。后期的发版管理。

唉,做软件,容易嘛!

posted on 2007-04-03 23:01  ohmyjava  阅读(161)  评论(0编辑  收藏  举报

导航