梦里的题目:让我安全回家
并不是要说明做梦的神奇,确实是感觉这个题目非常有意思,所以拿出来和大家分享。
近日一次做梦,梦到做一张试卷。试卷上题目非常少。其他的题目不记得了,只是记得最后一道题目。这个题目是这样描述的:
请用计算机实现,只要我安全到家,任务就算完成。
我开始被这个题目搞得一塌糊涂。根本不知道啥意思。 这时候梦里有人有人提示符号。我突然有所醒悟。
这是一道类似于微软那些面试类型的题目。重点不在于结果如何,而是看你的分析过程。
-
用计算机实现,也就是使用软件工程方法来实现
-
任务就是需求,需求完成,软件就完成了。
好了,现在我们来运用我们的软件意识来完成这个任务。
首先,使用UML的用例来描述我们的需求:
现在是挖掘需求的时候:
-
安全是如何定义的
-
家在哪里
-
对时间有什么要求
-
回家过程中需要考虑吃饭和住宿问题吗
-
交通工具如何选择
-
如果没有安全回家,结果如何
这只是简单的对需求表面的挖掘。好的需求,会进行更深层次的挖掘。如果说上面要弄明白的是“是什么”的问题,那么高级需求会搞清楚“为什么”的问题。
- 为什么要回家,回家的目的是什么
- 安全对于回家有什么必然联系,为什么要有这个要求
- 回家的背景是什么,这个时候其他人都有什么需求
呵呵,怎么样?这些问题都需要回答,很难吧!
需求弄清楚之后,进行软件设计。先画一个类图,下面是我的设计,仅仅为个人理解,不是权威设计。主要为了表达意思。此图是业务逻辑图,不是实体类图。
这个时候你要开始考虑架构性的事情了。前面都可以认为是需求阶段。最多有一个需求转换过程。
- 本系统是单机还是网络
- SmartClient还是B/S
- 编程语言选择,需要考虑可编程性和程序员技能
- 持久化技术选择
- 有什么特殊要求,此一般为非功能性需求
下面最关键要考虑系统中什么地方可能变化。我姑且认为交通工具最容易变化,做以下分析
- 交通工具应该可以选择
- 中间是否可以切换交通工具
- 安全的定义是否可能变化
- 以后除了要“我”安全回家,还可能要求让更多的人回家
- 家是不是可能是夫妻双方式的家
- ...
架构师必须通过他敏锐的观察力去洞察这一切。做完决策之后,再制定出对应策略。
剩下就是我最擅长的编码工作了。什么?还有TDD?是的我知道的,呵呵,先写写测试用例。过程中,还要了解代码版本管理。过程中的需求管理。后期的发版管理。
唉,做软件,容易嘛!