




























相信每一个人都希望让客户满意。而且现在已经知道写一个好的软件的第一步就是确定软件所作的是客户想让它做的。但是你如何确定什么是客户想要的?如何确定客户知道他们真正想要什么?
的确!在做项目项目的时候,我们常常被不确定的需求变化所困扰,当然如果说在开发时期要求需求一点不变化是不可能的,但是有些需求变化是致命的,会导致工作量成倍的上升,甚至是项目的失败。现在有个场景,我们看看如何做才能很好的挖掘用户的想法(这是编写成功软件的第一步)。
情景:有一个用户要给自己的小狗修一个Dog Door,以至于他们不用再睡觉后听到狗叫,然后起床给它开门。当然,这个Dog Door 并不是简单的一个塑料片,他们希望通过一个遥控器按钮使这个Dog Door打开或者关上。
public class DogDoor
{
private Boolean _isOpen;

public Boolean IsOpen
{
get { return _isOpen; }
}

public DogDoor()
{
_isOpen = false;
}

public void Open()
{
_isOpen = true;
Console.WriteLine("The dog door is opened.");
}

public void Close()
{
_isOpen = false;
Console.WriteLine("The dog door is closed");
}
}

public class Remote
{
private DogDoor _door;

public Remote(DogDoor door)
{
this._door = door;
}

public void pressButton()
{
if (_door.IsOpen)
{
_door.Close();
}
else
{
_door.Open();
}
}
}

class Test
{
static void Main(string[] args)
{
DogDoor door = new DogDoor();
Remote remote = new Remote(door);
Console.WriteLine("The dog is barking, he wanna
");
remote.pressButton();
Console.WriteLine("The dog is outside and
");
remote.pressButton();
Console.WriteLine("The dog is barking, he wanna inside");
remote.pressButton();
Console.WriteLine("The dog is inside");
remote.pressButton();
Console.Read();
}
}

客户忘记了用遥控器把门关上,结果很多小动物就进来了。看来这个们没有按照客户希望的工作。很显然,这个简单的软件并不符合客户的要求(当然这种意见他们原来并没有提出来)。现在我们回过头来重新审查我们对这个需求的理解,已确定我们的软件是客户想要的。现在一个问题产生了:什么是需求?
是系统为了工作正常而必须做的工作细节
根据他们所说的现在建立一个需求清单 1、 Dog door打开的时候至少12英寸高
2、 按遥控器上的按钮,当门关上的时候,门打开;否则,门关上
3、 一旦门打开了,在一定的时间后如果没有关闭的话,他将自动关闭
书上教给我们一个不错的办法,对于有问题的步骤,或者是描述不足的部分使用小号修改,不必把后面删掉重新排号。
public class Remote
{
private DogDoor _door;

Timer time;
TimerCallback callback;

public Remote(DogDoor door)
{
this._door = door;
}

public void pressButton()
{
if (_door.IsOpen)
{
_door.Close();
}
else
{
_door.Open();
callback = new TimerCallback(_door.Close);
time = new Timer(callback,_door,1000,0);
}
}
}

注意,这个地方的变化造成了一些修改,当然程序有很多种写法,这里就不再探讨这个问题了,造成修改的地方是:DogDoor类型中加入一个Close的重载方法:
public void Close(object source)
{
Close();
}
最后我们需要修改原来的测试代码,去掉开门后按按钮的动作,让门自动关闭,在测试代码中用线程休眠来表示Fido已经出去,测试代码如下:
static void Main(string[] args)
{
DogDoor door = new DogDoor();
Remote remote = new Remote(door);
Console.WriteLine("The dog is barking, he wanna
");
remote.pressButton();
Console.WriteLine("The dog is outside and
");
Thread.Sleep(10000);
//remote.pressButton();
Console.WriteLine("The dog is barking, he wanna inside");
remote.pressButton();
Console.WriteLine("The dog is inside");
//remote.pressButton();
Console.Read();
}

此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。