论坛首页 Java企业应用论坛

一段弱智代码引发的一些思考(我们是不是该进行BDD了?)

浏览 32628 次
该帖已经被评为精华帖
作者 正文
   发表时间:2012-03-31  
youarestupid 写道
devroller2 写道
devroller2 写道
lz你的if条件并不是很难理解,原因是只有&&,人理解还是比较容易,所以你的第一个方法是可行的。

那种既包含&&又包含||、()的,让人读了半天绕不过来的才需要重构,否则格式化一下代码就可以了。


当然,你项目中有很多相同的这段逻辑,那么重构为一个方法是一定的。

如果是同一层次,if()条件内写得再多,也是可以的,如下代码:

int num = 1;
if((num == 12 || num == 13 || num == 14 || num == 15) && (num > testNum)){
    System.out.println("你好," + num);
}

上面这段代码中,if()条件内看似很乱,很多,很复杂,但是其实是同一层次的判断,所以写在一个if()判断语句中是可行的。


嗯,道理是这样的!

1、但什么是不可读的 什么是可读的 没有很明晰的界限,因此应该有工具帮我们分析!
2、造成我说的问题的根本原因 是 没有测试用例,如果我有一个测试用例 测试到所有分支,也不会找老半天找不到
3、应用程序不同于 框架 和 工具,需求变化太快,可能上午是A模样,下午可能变成B,那应该如何写测试?

因此

   我想要表达的是 面对变化如此之快的需求,尤其表现层,我们应该写 面向需求的测试(given  when then ,given when then)   、而不是 单元测试。

0 请登录后投票
   发表时间:2012-03-31  
有自己独特的见解是好事,但更多的是,要经历大量实践的考验
0 请登录后投票
   发表时间:2012-03-31  
yjingzeming 写道
jinnianshilongnian 写道
yjingzeming 写道
一同事写了个window.location.href="....?XXOO=1&&eql=1";


这个还真没试过 会出现什么问题?

警告: Parameters: Invalid chunk ignored.
兄弟你一眼还没看出问题所在看来你WEB搞得不多哇


并不是所有的应用服务器会出现异常信息
0 请登录后投票
   发表时间:2012-03-31  
KimHo 写道
有自己独特的见解是好事,但更多的是,要经历大量实践的考验


所以希望 有这方面经验的大哥 出来谈谈见解 学习学习

而且现在可能太盲目追求TDD,忽略了BDD,BDD更适合复杂可变的业务。
0 请登录后投票
   发表时间:2012-03-31  
还好啦,刚开始我还常把label和table写错。。。
0 请登录后投票
   发表时间:2012-03-31  
jinnianshilongnian 写道
KimHo 写道
有自己独特的见解是好事,但更多的是,要经历大量实践的考验


所以希望 有这方面经验的大哥 出来谈谈见解 学习学习

而且现在可能太盲目追求TDD,忽略了BDD,BDD更适合复杂可变的业务。

这方面的经验,老马最多(martin fowler大师也)
0 请登录后投票
   发表时间:2012-03-31  
KimHo 写道
jinnianshilongnian 写道
KimHo 写道
有自己独特的见解是好事,但更多的是,要经历大量实践的考验


所以希望 有这方面经验的大哥 出来谈谈见解 学习学习

而且现在可能太盲目追求TDD,忽略了BDD,BDD更适合复杂可变的业务。

这方面的经验,老马最多(martin fowler大师也)


哈哈哈,真希望有经验的人出来讨论下! 解惑!

一定要实践一段时间BDD 来看看适不适合! 实践出真知!
0 请登录后投票
   发表时间:2012-03-31  
chrhust 写道
saleOrder.getOrder().getState()这种我一般分开写,
Order order = saleOrder.getOrder();
if(order!=null && order.getState()...)虽然觉得很麻烦


正解,我一般也这样写。我始终觉得把“&&”写成“&”的可能性很小,不知楼主是故意的还是...
0 请登录后投票
   发表时间:2012-03-31  
jinnianshilongnian 写道
icelander 写道
一个方法里最好只有一个return


当然 越少越好,但实际可能吗?


这很难吗,编程规范最基本的东西

private boolean canPay(List<SaleOrderModel> saleOrderList) {  
       if (CollectionUtils.isEmpty(saleOrderList)) {  
           return false;  
       }  
       SaleOrderModel saleOrder = saleOrderList.get(0);  
       if (saleOrder.getOrderUuid() <= 0) {  
           return false;  
       }  
       if (saleOrder.getOrder().getState() != OrderStateEnum.wait_pay.getType()) {  
           return false;  
       }  
       return true;  
   }  


private boolean canPay(List<SaleOrderModel> saleOrderList) {  
       boolean canPay = true;
       if (CollectionUtils.isEmpty(saleOrderList)) {  
           canPay = false;  
       }  
       SaleOrderModel saleOrder = saleOrderList.get(0);  
       if (saleOrder.getOrderUuid() <= 0) {  
           canPay = false;  
       }  
       if (saleOrder.getOrder().getState() != OrderStateEnum.wait_pay.getType()) {  
           canPay = false;  
       }  
       return canPay;  
   }  
0 请登录后投票
   发表时间:2012-03-31  
Frankie199 写道
chrhust 写道
saleOrder.getOrder().getState()这种我一般分开写,
Order order = saleOrder.getOrder();
if(order!=null && order.getState()...)虽然觉得很麻烦


正解,我一般也这样写。我始终觉得把“&&”写成“&”的可能性很小,不知楼主是故意的还是...


肯定不是故意的,,我想要的重点不是这 而是想引出 什么情况使用TDD 什么情况使用 BDD? 希望牛人指点
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics