软件设计的启发规则有哪些