Titan Tang's Blog

Titan Tang's Blog

程序员自查表

  • 每一个输入框:是否需要验证,怎样验证
    • 对与每一个输入框后提示了必填的字段,是否业务上真的需要必填,如果需要则做必要性检查
    • 空值测试
    • 数字的输入需要scale和precision,检查上下限范围
    • 字符串输入需要检查长度,允许的字符
    • 日期输入需要做范围检查(begin < end),格式检查(yyyy-MM-dd)等
    • 主键是否可以录入,如果可以录入那么更新界面是否可以修改
    • 录入页面“重置”按钮的逻辑是否实现正确:录入界面清空所有输入框,更新界面重置至未修改状态。
    • 编辑界面是否可以修改主键,如果可以修改主键,那么修改主键之后,更新界面点重置是否会产生问题
    • 录入的数据是否在系统中是否可以查询到,如果不可以,测试人员如何确认数据已经正确录入
    • 界面大小是否会超出最终用户界面显示大小,如果超出是使用滚动条还是显示异常?
    • 下拉列表进入编辑界面时是否初始化好,更新界面是否已经选中原选中值
    • 数据库中的字段长度与界面上录入框的长度是否适配
    • 如存在导入,导入源格式允许的长度是否与数据库长度匹配,数字、日期等格式是否做了必要校验,空行如何处理
    • 其他业务相关逻辑
  • 对与新加入的功能或修改过的功能,与它相关联的功能是否进行了回归测试?
  • 安装手册;完全按照安装手册,在干净的与生产一致的环境上是否可以安装成功
  • 任何不确定、需要假设的地方,都是需要项目经理开发过程中需要确认的点,很可能是风险点

Macbook Pro Power False Break

Green light on the power adapter of Macbook pro don’t light up just now. Found some article saying it is a protection of the adapter. Disconnect the adapter and reconnect it after 1 minute, it works

Things Learned From Last Week

About CRUD actions

  1. The behavior of reset button on edit page: always reset the content in input controls to the original state, even after a validation postbak
  2. The back button on edit page, should go back to the search page with correct list data present. If the data has changed, the search page can be reset to initial state.
  3. Delete or other destructive actions should always give user a warning & confirmation.
  4. Make the interface informative and easy to use, even for people not familiar with the system.

About data processing scripts and data backup

  1. Always consider whether the data should be keeped. if not, delete it when the script ends.
  2. When doing data integration work concerning more than one servers, draw a network topology and check it with operation department other than make any assumptions about it.
  3. DO NOT change the interface if you are modifying a previous script, such as parameters or working folders.
  4. If you have to keep the data, write a document about the incremental speed, needed space and the period to clean the data.

About communicating

  1. Do preparation before communication
  2. Give thinking time to other people, because they have to listen to your needs and think about solutions.
  3. People can give quick answer if you can carefully prepare the question.
  4. When confirmation is needed, email is better than telephone.

Eclipse编辑器设置

今天无意中发现eclipse一个问题,就是我用delete键删除一行以后,原本在下一行的缩进空格被带到当前行行尾了。想起来上次用vim打开别人写得代码,抱怨代码格式排版烂。因为我的vim是显示空白的,看到代码是tab和space混用,又存在行尾空格,很不整洁。所以打开自己的代码一看,存在同样的问题,看来是eclipse的默认设置不太好的缘故。打开设置选项,在general-editors-text editor里面把insert spaces for tabs和show whitespace characters勾选,大功告成。

Skilldrick » Closures Explained With JavaScript

Skilldrick » Closures explained with JavaScript.

还没太想明白closure会不会造成内存泄露,如何避免这个问题,查到的关于closure造成的内存泄露大部分都是将ie的bug的

是不是说在函数式编程语言里面,function是一等公民这句话包含了一个含义,就是他也是个变量,在使用时被创建,在这个变量的范围结束时被回收?那么closure如果被返回到外层时又如何解释?

Why Drop the I if You’re Going to Just Add an Impl? « I Am Not Myself

Why drop the I if you’re going to just add an Impl?

via Why drop the I if you’re going to just add an Impl? « I Am Not Myself.

我是支持不加I前缀的,但是对于impl后缀没有特别的偏见,比如说对于dao实现,我可能有hibernate,ibatis实现等,所以我的dao实现可能叫xxxxHibernateImpl和xxxxIBatisImpl来做区分。对于一些不考虑抽换底层实现的项目,或许直接加上impl作为默认实现也无可厚非。但是需要作者知道为什么这么加。

原文中作者提到的SRP的接口是我们没有考虑的事情,其实我们很多时候dao都只是实现类的方法签名的集合,如果拆分的更细,应该会更容易实现重构service层的目的。但是估计也就无法避免service通过多个接口名称引用同一个实际对象的结果,不过几个reference的价格我们还是负担的起得。