EMA (standing for EMpirical Analysis of algorithms) is a tool created for providing an effortless way to assess the performance of algorithms. EMA may be handy in many scenarios, including:
  • checking whether the algorithm's usage of resources agrees with its theoretical complexity (for instance, a poor choice of data structures may lead the complexity of an algorithm out of the goal);
  • empirically measuring an algorithm's complexity (which might be unknown analytically);
  • having some nice graphs of the algorithm's performance automatically plotted for you. 
The aggregated value of EMA is to automatically deal with many of the operational technical issues that must be addressed in every experimental analysis of algorithms. Among those issues, we might mention:
  • Simulations:
    • Determining the convenient sample of variable values for which to execute the algorithm (the runs should last neither too short, nor too long);
    • Avoiding that the allocated memory grows beyond free memory (otherwise, the costs of OS' memory paging generally breaks the assumption that the RAM model is a good model for the actual machine)
    • Providing a framework for the creation of input instances for the problem and managing the disk usage for storing such inputs. EMA keeps such inputs to be used later in other executions and makes sure that they do not grow beyond a given threshold.
  • Analysis:
    • Choosing/configuring a tool for the presentation of graphs, including the design of those graphs themselves;
    • Choosing/configuring a tool for working out the complexity of the algorithm (potentially applying some machine learning techniques); 
    • Compiling some statistics on the best, worst, and average time and space complexities.
Other aspects of EMA you might be interested to know:
  • free software;
  • open source;
  • multi platform;
  • can be easily integrated to any executable program;
  • in beta version; any issue or suggestion related to EMA? Please, let me know.