Обикновено се мерят параметри не на приложение като цяло, а на някои негови специфични части подлежащи на лесна промяна (която ще цели подобряване на параметрите). Например това обикновено са всички (или само предварително набелязани) функции, методи, модули. Параметрите които обикновено ни интересуват са най-често: Време на изпълнение (сумарно), Брой изплнения, Използвана памет за данни, Брой "неуспешни" четения от кеша на процесора (cache misses) и др.
Искам само да обърна внимание, че кои параметри мерим зависи от целта ни т.е. какво ще оптимизираме. Най-често целим подобряване на бързодействието на програмата като цяло или на някой нейни части: модули, класове, методи и т.н.
На този етап на развитие на областта на оптимизация на софтуерни приложения не се използват много от математическите методи за анализ на дани (а би трябвало). В момента стандартния подход е: 1. Измерваме съответен параметър/параметри (например времената на изпълнение на методите); 2. Сортираме методите по получените времена и получаваме един списък, в който най-времеотнемащите методи са малък брой; 3. За всеки от тези методи прилгаме основно "ръчни" методи на оптимизация т.е. преработваме кода на метода така, както смятаме че той ще е по-добър (за съжаление това в повечето случаи е "на шесто чувство"
); 4. Изпълняваме програмата отново и виждаме дали сме постигнали подобрение по отношение на измерваните параметри; 5. Ако не сме постигнали целта си отиваме на 1.
Само две неща още:
1. Обикновено програмата не е от типа: "Четат се някакви данни, прави някакви сметки и изписваме резултатите". Софтуера обикновено е интерактивен, може и да не се изпълнят всички негови функции при едно стартиране и т.н. Затова при една голяма система е добре да имаме тестови случаи/данни, с които да можем автоматизирано да изпълним всички части от системата, да се изпълнят с много и разнообразни данни и т.н. Това дава гаранция че: Ще сравняваме измерваните параметри за всички части от системата; Няма да бъдем заблудени и да развалим някой добре работещ метод поради недобре подбрани данни; Ще имаме повторимост на тестовете на параметрите преди и след промяната/оптимизацията.
2. В съвременните компилатори има набор от автоматични методи за оптимизция т.н. Profile-based optimizations (PBO). Те използват автоматично събраните данни за изпълнението, но това за сега има ограничена мощ. Все пак анализа на тези данните не може да реши да промени коренно алгоритъма, както би могъл програмиста да направи.