- 浏览: 495563 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1028)
- [发布至博客园首页] (826)
- [随笔分类]个人生活随笔 (14)
- [网站分类]首页候选区 (26)
- [网站分类]SharePoint (15)
- [网站分类]其他技术区 (6)
- [随笔分类]批处理技巧 (6)
- [随笔分类].net 2.0 (3)
- [随笔分类]SharePoint2007(MOSS2007) (0)
- [网站分类].NET新手区 (6)
- [网站分类]ASP.NET (6)
- [网站分类]架构设计 (18)
- [网站分类]程序人生 (2)
- [网站分类]SQL Server (2)
- WCF (3)
- 编程技巧 (2)
- 模式架构 (2)
- 分析设计 (4)
- 生活随笔 (0)
- 软件工程 (1)
- Android实例 (2)
最新评论
-
zilong0536:
楼主您好:
请问发表博文支持图片的功能怎么实现啊,一直没有思路 ...
新浪微博开放平台开发-android客户端(3) -
nicegege:
小弟 学习了
帮助中国移动设计10086的排队小模块 -
zl7824516:
用什么技术没说啊
通告(公告),消息(站内短信),提醒的设计:通告 -
virusswb:
源码下载: SinaWeibo2 源码下载之后,将后缀改为ra ...
新浪微博开放平台开发-android客户端(3) -
Jimmyxu0311:
找不到源码下载
新浪微博开放平台开发-android客户端(3)
Head.First.Object-Oriented.Design.and.Analysis《深入浅出面向对象的分析与设计》读书笔记(二)
- 博客分类:
- [发布至博客园首页]
今天的话题是收集需求。
Gathering Requirements
每个人都喜欢满意的客户。我们已经知道做一个好的软件的第一步是确保软件做了客户想要做的事情。但是你如何理解客户到底想要什么呢?如何确保客户知道他们自己想要什么呢?
个人认知:
个人觉得有时候用户也不太确定他们想要系统做什么具体的功能,也就是说他们也提不出来什么需求。但是他们有问题要解决,他们上系统的目的是解决问题。他们可以说明白的就是问题,具体的需求可能需要需求分析人员来分析问题,针对具体客户的具体问题,得出客户可能的需求,帮助客户梳理问题,同时梳理需求,达到共识。最后确定需求,产生需求文档,记录双方都认同的需求。
下面是一段用户自己的问题需求
每天晚上,用户的小狗Fido都会在门旁边一直的叫,直到用户起床把它放出去。用户不喜欢在夜里起床,他的爱人在夜里又不会起床,你可以帮助我们吗?
他们想要一个狗门,想用按钮就可以进行操作狗门的打开和关闭。
构造下面的一个狗门类
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BeautyCode.Common.ConApp.Head.First.OO.Design
{
public class DogDoor
{
private bool _open;
public DogDoor()
{
_open = false;
}
public void Open()
{
Console.WriteLine("the dog door opens");
this._open = true;
}
public void Close()
{
Console.WriteLine("the dog door closes");
this._open = false;
}
public bool IsOpen()
{
return _open;
}
}
}
我们还需要一个操作类,Remote,因为用户希望使用遥控器的按钮来操作,而不是起床手动操作。
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BeautyCode.Common.ConApp.Head.First.OO.Design
{
public class Remote
{
private DogDoor _door;
public Remote(DogDoor door)
{
this._door = door;
}
public void PressButton()
{
Console.WriteLine("pressing the remote control button....");
if (_door.IsOpen())
{
_door.Close();
}
else
{
_door.Open();
}
}
}
}
这下好了,现在用户只需要使用遥控器,然后再任何地方操作狗门的打开和关闭了,不用再起床了。
remote.PressButton();
用户比较满意了,回去使用了一段时间。但是新的问题又来了,小狗Fido进来之后,其他的小动物也从狗门进入了家门。
代码没有问题,是用户错误的使用了遥控器,在Fido进来之后没有及时的关闭狗门。
但是用户不这么认为,用户认为这个狗门和遥控器没有达到他的要求,不是他想要的。他们不想再Fido出去之后还要按一下按钮让门关闭,他们想只在Fido需要出去的时候按一下按钮就可以了。
这就是我们常说的用户的反复,需求的反复。就是用户对于他们的具体需求不能描述的很清楚,需要迭代,在实际场景中用户才会碰到更多的问题,才会提出更加具体的需求。这也是我们经常头疼的地方,其实可以换个思考的角度,用户的需求越多,给我们的机会就越大,如果用户没有需求了,那我们就没有生存的余地了。只是我们需要引导客户说出他们的具体需求,进行合理的设计开发,提供复用性,减少耦合性,就会使得我们可以更好的面对需求的变更。
面对新需求的时候,最好的办法是首先听客户描述他们的问题所在。他们分析出系统需要做什么,可以想出系统如何来做。
用户又提出来新的需求,希望门在打开几秒之后自动关闭。而且他们家的小狗Fido的高度是一只脚的长度,希望在它出门的时候不要伤害到它。
这时候你得出一个清单:
1、小狗叫了,他想出去
2、用户听到狗叫的声音
3、用户按下遥控器的按钮
4、狗门打开
5、小狗出去
6、在外面玩
7、小狗回来了
8、门自动关闭
然后针对这个清单进行分析,看看里面有没有什么潜在的问题。
1、小狗叫,狗叫不一定就是想出去,也可能是饿了。
2、听到狗叫声,听不到呢?主人不在家呢?
3、狗叫不是因为饿了,还需要打开门吗?
4、狗门打开,如果发生故障怎么办?硬件故障?
5、小狗出去,如果小狗没有出去呢?怎么办?
6、小狗玩耍
7、小狗回来了,可是门在这时候已经关闭了怎么办呢?
8、如果小狗还在外面,用户能否听见狗叫,然后打开门让它进来呢?
上面的清单需要局部的修改。
1、小狗叫了,他想出去
2、用户听到狗叫的声音
3、用户按下遥控器的按钮
4、狗门打开
5、小狗出去
6、在外面玩
6.1 狗门自动关闭
6.2 小狗又叫了,想要回来
6.3 用户又听到叫声
6.4 再次按下遥控器按钮
6.5 狗门再次打开
7、小狗回来了
8、门自动关闭
其实你一直在写用例。在写下这些步骤的时候,你实际上就是在做用例了。
用例就是系统实现某一个功能的步骤。用例就是在达到用户目标的时候,你的系统需要做的事情。
一个好的用例,包括三个部分:
- 用例对于系统来说必须是清晰的。如果用例不能帮助用户达到目标,这个用例就没有意义。
- 开始和结束。一个用例必须有开始点,然后再满足某一个条件之后,达到完成。
- 外部的发起者。每个用例都会由系统外的发起者发起,发起者有可能是人,也可能是外部系统。
上面的小狗Fido就是发起者,第一次的叫就是开始,最后一步的门关闭就是结束。
然后对着需求再次检查用例是否有问题,以及需求是否被满足。
有一些步骤是不需要你来实现的,在用例中找到并且标示出来。
让我们来更新一下代码,需要加入门的自动关闭功能。
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BeautyCode.Common.ConApp.Head.First.OO.Design
{
public class Remote
{
private DogDoor _door;
public Remote(DogDoor door)
{
this._door = door;
}
public void PressButton()
{
Console.WriteLine("pressing the remote control button....");
if (_door.IsOpen())
{
_door.Close();
}
else
{
_door.Open();
}
System.Threading.Thread.Sleep(5000);
_door.Close();
}
}
}
结论
OOA&D工具:需求和用例。
好的需求确保你的系统运行在客户预期的范围。确保需求覆盖了用例中的所有步骤。使用用例找出用户忘记告诉你的一些内容。用例可以揭示一些你需要加入系统的,未完成或者是容易丢失的需求。
发表评论
-
NET 应用架构指导 V2 学习笔记(十六) 服务层设计指导
2010-06-04 00:13 547如果你的应用是通 ... -
NET 应用架构指导 V2 学习笔记(十七) 组件设计指导
2010-06-05 00:48 669组件提供了一种将 ... -
NET 应用架构指导 V2 学习笔记(十八) 表现层组件设计指导
2010-06-05 21:09 528本章讲述的是你在设计用户界面组件和表现层逻辑组件的时候应该 ... -
NET 应用架构指导 V2 学习笔记(十九) 表现层组件设计指导
2010-06-06 06:15 5915 决定数据绑定的 ... -
NET 应用架构指导 V2 学习笔记(二十) 业务组件设计指导
2010-06-07 06:58 614前言 业务组件 ... -
微软企业库5.0学习笔记(四十二)异常处理模块
2010-06-14 00:04 835企业库的异常处理 ... -
关于程序员在30岁、35岁之后怎么办的新思考
2010-06-14 10:40 624首先给大家问个好 ... -
NET 应用架构指导 V2 学习笔记(二十四) 跨层关注问题
2010-06-17 20:00 594概况 大部分的 ... -
微软企业库5.0学习笔记(四十三)数据验证模块
2010-06-19 08:07 996概况 任何接受用户或者是其他系统输入的应用,一定要确保 ... -
关于项目进度慢的思考----如何提高整体开发效率
2010-06-21 23:42 803我们都是软件行业 ... -
微软企业库5.0学习笔记(四十四)实战数据验证模块
2010-06-23 19:22 8381 在业务对象上添加验证 添加对程序集【Microso ... -
微软企业库5.0学习笔记(四十五)实战数据验证模块----高级篇
2010-06-24 19:41 9691、添加自定义的提示信息 验证失败的提示信息可以自定义 ... -
面向对象类设计的五大原则(一)单一职责原则Single Responsibility Principle
2010-06-29 15:45 777引言 面向对象类设计,或者说是面向对象设计,有五大原则 ... -
《深入浅出设计模式-中文版》读书笔记 开篇乱弹(一)
2010-07-01 06:42 650oreilly的《Head.First ... -
《深入浅出设计模式-中文版》读书笔记-继承与组合(三)
2010-07-03 16:53 605经过上一次的改造 ... -
《深入浅出设计模式-中文版》读书笔记-观察者模式(四)
2010-07-06 06:34 633今天要接触的是观 ... -
利用attribute实现简单的ORM
2010-07-09 15:27 682我不知道NH的ORM具 ... -
系统内部模块(子系统)之间的耦合以及模块(子系统)划分
2010-07-14 13:02 807题外话 最近已经在努力学习了,学习基本功,学习设计模式 ... -
《深入浅出设计模式-中文版》读书笔记-工厂模式(五)
2010-07-16 12:46 699今天给大家带来的是:工厂模式。 我们在代码中创建一个对 ... -
Head.First.Object-Oriented.Design.and.Analysis《深入浅出面向对象的分析与设计》读书笔记(一)
2010-07-18 21:47 670题外话 又是一本Head.First系列的书,这个系列 ...
相关推荐
深入浅出面向对象的分析与设计Head.First.Object-Oriented.Design.and.Analysis这本书以较轻快的语气为我们讲述了面向对象的分析与设计,适合精读,多读,仔细揣摩其中的思想
深入浅出面向对象的分析与设计,Head.First.Object-Oriented.Design
深入浅出面向对象的分析与设计Head.First.Object-Oriented.Design.and.Analysis 从自己做起 OOAD真正应用在你的项目中
“《深入浅出面向对象分析与设计》对OOA&D这个主题的探讨令人耳目一新。 本书与众不同之处在于它将焦点摆在学习上,本书的诸位作者让从业人员对OOA&D的内涵不再感到遥不可及,而且它在实际工作中确实有用。” ...
Head.First.Object-Oriented.Design.and.Analysis.part5
“《深入浅出面向对象分析与设计》对OOA&D这个主题的探讨令人耳目一新。 本书与众不同之处在于它将焦点摆在学习上,本书的诸位作者让从业人员对OOA&D的内涵不再感到遥不可及,而且它在实际工作中确实有用。” ...
Head.First.Object-Oriented.Design.and.Analysis.part4
Head.First.Object-Oriented.Design.and.Analysis.part1
Head.First.Object-Oriented.Design.and.Analysis.part2
Head.First.Object-Oriented.Design.and.Analysis.part3
Head.First-深入浅出面向对象分析与设计-中文.part08
“《深入浅出面向对象分析与设计》对OOA&D这个主题的探讨令人耳目一新。 本书与众不同之处在于它将焦点摆在学习上,本书的诸位作者让从业人员对OOA&D的内涵不再感到遥不可及,而且它在实际工作中确实有用。” ...
Head.First 面向对象编程原汁原味英文版
《Head First 对象导向分析与设计》是一本旨在帮助读者深入理解对象导向分析与设计(Object-Oriented Analysis and Design,简称 OOA&D)核心概念的专业书籍。该书通过丰富的图形和实例来阐述复杂的理论知识,使学习...
Head First Object-Oriented Design and Analysis 英文版,共3个文件