Hi @bayram,
Whilst having internal state variables would make things easier, it would break encapsulation. I believe the code overriding functions using rate make it clearer what is being changed.
Good to hear that you have tests for your contract. A thorough test suite is very important. The following article on testing is worth a read: Test smart contracts like a rockstar
I recommend reading the following checklist for before an audit:
I found reading past audits very useful: https://blog.openzeppelin.com/security-audits/
Regards auditing, OpenZeppelin performs audits, see the website for details: https://openzeppelin.com/security-audits/