Performance Testing: Identifying Bottlenecks and Optimizing Software