In battery-driven embedded systems and mobile devices design areas, energy consumption has become one of the most critical constraints. In order to design the embedded systems with high performance and low power, it is necessary to consider optimization techniques from both hardware and software perspectives and pursue the optimal tradeoff between performance and energy consumption. This paper presents a concept of software energy consumption and the characteristics of software-based low energy techniques, and focuses on the software-based low energy techniques during the system development stages. Software-based optimization techniques for reducing system energy consumption in development stage include instruction-level optimization, algorithm-level optimization, and software architectural-level optimization. The primal issues and recent research progresses on software energy consumption optimization are presented.As a key supporting technique for low energy software development, software energy consumption evaluation techniques are also analyzed in detail, which include how to estimate software energy consumed by the processor and by the whole system. The instruction-level energy consumption model, architectural-level energy consumption model, and the macro-based energy consumption model for processor energy consumption estimation are discussed in detail. Finally, several challenges and open issues in software energy consumption research are summarized.