update docs and tests
重构部分代码，更详尽的注释