Program complexity can generally be expressed in terms of time and space. Time complexities refer to the amount of time it takes an algorithm, or program, to complete its tasks and generate a result. Time complexities are usually expressed using big O notation, and have correlations with the input size. Space complexities describe the amount of physical memory space needed to complete a problem with a given algorithm or algorithms.
The project group should generate a tool that analyzes source code and determines time and space complexities. This should be accomplished without actually executing the source code. For simplicity, calculated time and space complexities can be isolated to individual functions/methods. These complexities should be given to the user, along with suggestions on how to increase efficiency in one or both cases. Finally, the optimization tool should have the ability to modify the analyzed source code.