软件详细设计包括哪些方面