停车场Kata的代码和讨论

2 views
Skip to first unread message

Joseph Yao

unread,
Apr 15, 2014, 8:56:30 AM4/15/14
to agiles...@googlegroups.com, scrumga...@googlegroups.com, agile...@googlegroups.com
下面是我和Ben有关停车场Kata的代码实现和一些讨论,分享给大家,也欢迎大家的反馈。

谢谢,
Joseph
parking_Ben.rar

hkliya

unread,
Jun 2, 2014, 8:06:19 AM6/2/14
to scrumga...@googlegroups.com, agiles...@googlegroups.com, agile...@googlegroups.com
各位发过kata视频的前辈,去年我做了一个视频得到各位前辈的点评,受益匪浅。

但我们这个圈子太小,影响力的人也很有限。
所以,我做了一个网站,旨在“传播好的编码实践,提高编码效率” 。

为了保证原创性,我为各位作者注册了帐号并分享了视频,如果作者您认为不妥,请与我联系,即刻下架。

接下来我会:
把邮件中的讨论同步到网站上;
自己host视频,避免显示广告;
改善视频点评体验;

希望得到大家的反馈,一起把社区做好,把软件匠艺精神传播给更多的程序员。

-- 
hkliya
Sent with Sparrow

--
--
您收到此信息是由于您订阅了 Google 论坛“Scrum Gathering”论坛。
要在此论坛发帖,请发电子邮件到 scrumga...@googlegroups.com
要退订此论坛,请发邮件至 scrumgatherin...@googlegroups.com
问该论坛

---
You received this message because you are subscribed to the Google Groups "Scrum Gathering" group.
To unsubscribe from this group and stop receiving emails from it, send an email to scrumgatherin...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Begin forwarded message:

From: Joseph Yao <jos...@odd-e.com>
Subject: Re: 停车场的代码,求指导。 并请教sql-mapping的测试方法。
Date: April 15, 2014 at 12:12:49 PM GMT+8
To: "刘永鹏(Ben)" <LIUYONG...@pingan.com.cn>

Hi Ben,

我终于找到时间来回复你的这个Kata了,拖了很久,实在不好意思。本来我想看看你的代码就回复的,不过后来我还是决定自己做一遍这个Kata。这样,我的反馈会更加具体和实际一点。:)

我的代码在 https://github.com/JosephYao/KataParkingLot,每次提交我都写了注释。其中“TPP”指的是 Transformation Priority Premise,有关知识可以看 https://groups.google.com/forum/#!topic/agileshanghai/-NIrZ7SF3RM(需要科学上网)。另外值得注意的一点是,通过刚开始的那几个用例时,代码中每个函数都只有一行(想想我是如何用最简单的代码来通过这些测试的)。

我对你问题的回复,请看下面。

另外,你是否介意我把我们的代码和讨论发到 agiles...@googlegroups.com 这个讨论组呢?:)其实,以后这样的Kata代码都可以直接发布到这个讨论组里去,反馈和交流会更多一点。

谢谢,
Joseph

On Mar 20, 2014, at 10:03 AM, 刘永鹏(Ben) <LIUYONG...@pingan.com.cn> wrote:

姚老师,
 
      停车场的题目讲的很概括,只说要实现一个基本停车场的功能 1)能停车 2)充满不能停车 3 能取车。  作业见附件。

我对需求的理解可以看 https://github.com/JosephYao/KataParkingLot/blob/master/README.md。和你写的代码有一些不同:
  • 我考虑提供 isFull 这个方法给调用者。这样他们就可以自己来判断停车场是否已满,对于其他业务逻辑的实现也更加灵活(比如当停车场已满时显示什么样的信息)。而且,提供了 isFull 之后会使得我们的代码更加专注和简单,比如停车场满的时候不能再停车就应该由调用者的代码来负责控制。
  • 停车场满的时候停车和用无效的编号来取车都被视为异常情况处理

 
      我的几点考虑:
     
1)  有一个car 对象最理想,将车位  car 关联起来。 但我觉得如果不提供根据车位 查车牌,根据车牌查车位等功能,仅实现是否能继续停车、是否可以取车的话,增加一个car 类有过度设计的嫌疑。 

我觉得Car对象在这里的确是过度设计了

2)假设现在的设计是合理的,且后期由于各种原因,又需要增加car 类,并将车位与car 的对应关系作为返回值,那现在做的测试案例、代码都要全部重写, 

的确,后期有需求需要增加Car这个类也是有可能的。不过,从我现在的代码来看,我觉得对测试和代码的影响未必就很大,而且一定是可以一点点来重构的。

 
以上两点,是我对现在 的设计缺乏信心,很纠结但又找不到好的解决方案,求指导。
 
 
3)刚开始构建停车功能的测试案例的时候,如何设置返回值思考了好久。直观的讲,停车无法两种结果:成功、失败,返回值应该是布尔值,但如果使用boolean 很难使下一个案例总是失败,因为区分度太低了。最终选择了返回车位编码。  关于返回值的选择,有什么要注意的地方,也求指导 :)

我觉得让park返回车位编号是正确的,因为这是停车的核心功能。调用者本来就不应该通过park来判断是否可以继续停车这件事情,而是应该使用 isFull 这个方法。

 
4)这个案例需要求实现停车、取车 两个功能,之前做的练习都是针对一个功能不断演化的,对两个方法的testcase 是否应该写在一个文件中,有点吃不准,再求指导 :)

从我的代码中可以看到,我并没有把停车和取车的用例分开,因为我觉得这两个需求点是比较紧密相关的。不过,我最后一个提交把所有的异常情况处理单独分到了一个测试类中,因为我觉得异常处理是一个比较独立的需求点。实际上,如果调用者是其他团队成员的话,这些异常处理可以不要,而是通过Design by contract的方法来沟通和更早的暴露问题。

 
5)今天工作中发现,我们现有系统很多逻辑是在ibatis中通过SQL 实现,任何的修改只能通过打包、重新部署、页面测试的方式进行验证,验证成本极高。 关于这块的单元测试,有何好的方法没,--- 跪求指导。。。。。

我可能遇到过和你们类似的情况。既然使用ibatis,你们代码中应该有一些直接操作数据的类吧。如果有的话,你们可以考虑直接对这些类进行测试,虽然这样的测试比一般的单元测试要运行的慢一点,但他们还是比页面测试快多了。

 
 
谢谢。
 
     




********************************************************************************************************************************
The information in this email is confidential and may be legally privileged. If you have received this email in error or are not the intended recipient, please immediately notify the sender and delete this message from your computer. Any use, distribution, or copying of this email other than by the intended recipient is strictly prohibited. All messages sent to and from us may be monitored to ensure compliance with internal policies and to protect our business. 
Emails are not secure and cannot be guaranteed to be error free as they can be intercepted, amended, lost or destroyed, or contain viruses. Anyone who communicates with us by email is taken to accept these risks. 

收发邮件者请注意:
本邮件含保密信息,若误收本邮件,请务必通知发送人并直接删去,不得使用、传播或复制本邮件。
进出邮件均受到本公司合规监控。邮件可能发生被截留、被修改、丢失、被破坏或包含计算机病毒等不安全情况。 
********************************************************************************************************************************
<parking_Ben.rar>



Attachments:
- parking_Ben.rar

Bob Jiang (Gmail)

unread,
Jun 2, 2014, 10:55:29 AM6/2/14
to scrumga...@googlegroups.com, agiles...@googlegroups.com, agile...@googlegroups.com
分享一下网站?



Best Regards
姜信宝
13910939018
Bob Jiang | 新浪微博 | Agile Coach | 敏捷教练 | CSP | CSM | PMP | Agile1001公开课
====================================================
Change Myself, Change the World!
====================================================

hkliya

unread,
Jun 2, 2014, 11:04:38 AM6/2/14
to scrumga...@googlegroups.com, agiles...@googlegroups.com, agile...@googlegroups.com
Sorry : )


-- 
hkliya
Sent with Sparrow

"Ben Wu(伍斌)"

unread,
Jun 2, 2014, 8:33:09 PM6/2/14
to scrumga...@googlegroups.com, agiles...@googlegroups.com, agile...@googlegroups.com
Hi 小波

集各位同道修炼之精华于一处,功德无量!

请问我如何得到我在该网站的帐号的密码?

Ben


On 2014年06月02日 23:04, hkliya wrote:
Sorry : )


-- 
hkliya
Sent with Sparrow

On Monday, June 2, 2014 at 22:55, Bob Jiang (Gmail) wrote:

分享一下网站?



Best Regards
姜信宝
13910939018
Bob Jiang | 新浪微博 | Agile Coach | 敏捷教练 | CSP | CSM | PMP | Agile1001公开课
====================================================
Change Myself, Change the World!
====================================================

On Monday, June 2, 2014 at 8:06 PM, hkliya wrote:

各位发过kata视频的前辈,去年我做了一个视频得到各位前辈的点评,受益 匪浅。

但我们这个圈子太 小,影响力的人也很有限。
所以,我 做了一个网站,旨在“传播好的编码实践,提高编码效率” 。

为了保证原创性,我 为各位作者注册了帐号并分享了视频,如 果作者您认为不妥,请与我联系,即刻下架。

接下来我会:
把邮件中的讨论 同步到网站上;
自己host视 频,避免显示广告;
改善视频点评体 验;

希望得到大家的 反馈,一起把社区做好,把软件匠艺精神传播给更多的程序员。

Begin forwarded message:

Hi Ben,

我终于找到时间来回复你的这个Kata了,拖 了很久,实在不好意思。本来我想看看你的代码就回复 的,不过后来我还是决定自己做一遍这个Kata。这 样,我的反馈会更加具体和实际一点。:)

我的代码在 https://github.com/JosephYao/KataParkingLot, 每次提交我都写了注释。其中“TPP”指的是 Transformation Priority Premise,有关知识可以看 https://groups.google.com/forum/#!topic/agileshanghai/-NIrZ7SF3RM(需 要科学上网)。另外值得注意的一点是,通过刚开始的 那几个用例时,代码中每个函数都只有一行(想想我是 如何用最简单的代码来通过这些测试的)。

我对你问题的回复,请看下面。

另外,你是否介意我把我们的代码和讨论发到 agiles...@googlegroups.com 这个讨论组呢?:)其实,以后这样的Kata代码都 可以直接发布到这个讨论组里去,反馈和交流会更多一 点。

谢谢,
Joseph

On Mar 20, 2014, at 10:03 AM, 刘永鹏(Ben) <LIUYONG...@pingan.com.cn> wrote:

姚老师,
 
      停车场的题目讲的很 概括,只说要实现一个基本停车 场的功能 1)能停车 2)充满不能停车 3 能取车。  作业见附件。

我对需求的理解可以看 https://github.com/JosephYao/KataParkingLot/blob/master/README.md。 和你写的代码有一些不同:
  • 我考虑提供 isFull 这个方法给调用者。这样他们就可以自己来判断停车场是否已满,对于其他业务逻辑的实现也更加灵活(比如当停车场已满时显示什么样的信息)。而且,提供了 isFull 之后会使得我们的代码更加专注和简单,比如停车场满的时候不能再停车就应该由调用者的代码来负责控制。
  • 停车场满的时候停车和用无效的编号 来取车都被视为异常情况处理

 
      我的几点考虑:
     
1)  有一个car 对象最理想,将车位  car 关联起来。 但我觉得如果不提供 根据车位 查车牌,根据车牌查 车位等功能,仅实现是否能继续 停车、是否可以取车的话,增加 一个car 类有过度设计的嫌 疑。 

我觉得Car对象在这里的确是过度设计了

2)假设现在的设计是 合理的,且后期由于各种原因, 又需要增加car 类,并将车位与car 的对应关系作为返回 值,那现在做的测试案例、代码 都要全部重写, 

的确,后期有需求需要增加Car这个类也 是有可能的。不过,从我现在的代码来看,我觉得 对测试和代码的影响未必就很大,而且一定是可以 一点点来重构的。

 
以上两点,是我对现 在 的设计缺乏信心,很 纠结但又找不到好的解决方案, 求指导。
 
 
3)刚开始构建停车功 能的测试案例的时候,如何设置 返回值思考了好久。直观的讲, 停车无法两种结果:成功、失 败,返回值应该是布尔值,但如 果使用boolean 很难使下一个案例总 是失败,因为区分度太低了。最 终选择了返回车位编码。  关于返回值的选择, 有什么要注意的地方,也求指导 :)

我觉得让park返回车位编号是正确的, 因为这是停车的核心功能。调用者本来就不应该通 过park来判断是否可以继续停车这件事情,而 是应该使用 isFull 这个方法。

 
4)这个案例需要求实 现停车、取车 两个功能,之前做的 练习都是针对一个功能不断演化 的,对两个方法的testcase 是否应该写在一个文 件中,有点吃不准,再求指导 :)

从我的代码中可以看到,我并没有把停车和 取车的用例分开,因为我觉得这两个需求点是比较 紧密相关的。不过,我最后一个提交把所有的异常 情况处理单独分到了一个测试类中,因为我觉得异 常处理是一个比较独立的需求点。实际上,如果调 用者是其他团队成员的话,这些异常处理可以不 要,而是通过Design by contract的方法来沟通和更早的暴露问题。

 
5)今天工作中发现, 我们现有系统很多逻辑是在ibatis中通过SQL 实现,任何的修改只 能通过打包、重新部署、页面测 试的方式进行验证,验证成本极 高。 关于这块的单元测 试,有何好的方法没,--- 跪求指导。。。。。

我可能遇到过和你们类似的情况。既然使用 ibatis,你们代码中应该有一些直接操作数 据的类吧。如果有的话,你们可以考虑直接对这些 类进行测试,虽然这样的测试比一般的单元测试要 运行的慢一点,但他们还是比页面测试快多了。



Attachments:
- parking_Ben.rar

hkliya

unread,
Jun 2, 2014, 8:49:05 PM6/2/14
to scrumga...@googlegroups.com, agiles...@googlegroups.com
默认密码和用户名是一样的。可以在登录后修改。
用户名可以在帖子标题下方看到。

-- 
hkliya
Sent with Sparrow

Joseph Yao

unread,
Jun 3, 2014, 11:30:53 AM6/3/14
to scrumga...@googlegroups.com, agiles...@googlegroups.com
这两天在成都出差, 回复的晚了. 无论如何要赞一下小波的网站和付出. :)

Liao-Yuan Zhang

unread,
Jun 3, 2014, 9:06:53 PM6/3/14
to agiles...@googlegroups.com, scrumga...@googlegroups.com
谢谢小波同学,偶试试先...

./Eric


--
您收到此邮件是因为您订阅了Google网上论坛中的“agileshanghai”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到agileshangha...@googlegroups.com
要查看更多选项,请访问https://groups.google.com/d/optout



--
Cheers,
Liao-Yuan

twitter: http://twitter.com/zhangliaoyuan

hkliya

unread,
Jun 3, 2014, 10:40:49 PM6/3/14
to scrumga...@googlegroups.com, agiles...@googlegroups.com
感谢大家支持。

咱们这个小圈子的人将奠定此社区的基因。
希望把这个社区建设成为-高效软件工匠的聚焦地

初期以 原创视频分享+点评 为切入点,但传统的回复式评论不适合用于视频点评,我正在将弹幕技术应用到网站上。

-- 
hkliya
Sent with Sparrow

申健Jacky

unread,
Jun 4, 2014, 1:59:55 AM6/4/14
to scrumga...@googlegroups.com, agiles...@googlegroups.com
顶小波弹幕!


Br,
申健Jacky Shen
个人网站:www.JackyShen.com
| 敏捷教练 | Agile Coach | Scrum trainer | CSP | ATDD | XP | Facilitation | 软件匠艺 |
===============================================================











Reply all
Reply to author
Forward
0 new messages