Home Languages Data Structures/Algorithms Analysis About Me

Guides to Testing, Analysis, and Optimization

Topics

Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.
-Donald Knuth, Structured Programming with goto Statements

Before you can optimize your program, you must first analyze it. Testing will help verify that your program produces the correct output. Analysis will identify where it can be improved. Optimization will make it run fast. These resources should help you find the hotspots in your code, and to design more efficient programs.


Testing

Testing Excellence has a good introductory tutorial in software testing. It teaches the fundamentals of testing, life cycle models, and testing techniques. Since a program must be correct before it can be optimized, you should definitely take testing to heart. In addition to the tutorial articles, the main site has posts about specific topics in solving problems in a particular language or utilizing software to conduct testing.

Tips for use:

Top

Analysis

Abstract interpretation and static analysis is a course in static analysis. It provides a series of four lectures and an exam. Static analysis is performed on the source code to formally prove the correctness of the program. This is especially important in fields such as avionics and medical software. The lectures cover abstraction, abstract interpretation, the mechanics of static analysis, and applications of static analysis.

Tips for use:

Top

Optimization

Agner Fog's Software optimization resources provides five manuals for optimization of software. He covers optimization techniques for programs in C++ for Windows, Linux and Mac, and for programs in assembly. There are additional resources for testing and examination of test results, and a list of useful links to learn x86 assembly. He also links to the rest of his blog, which includes a forum where recent computer architecture developments are discussed.

Tips for use:

Top
Home Languages Data Structures/Algorithms Analysis About Me