重构，增加util,增加test