There are 2 ways to analyze software, static & dynamic. Both methods have their own speciality and they have synergy and duality.
Static analysis examines program code and reasons over all possible behaviors that might arise at run time.
Compiler optimizations are standard static analyses.
Static analysis is conservative and sound.
Static analysis operates by building a model of the state of the program, then determining how the program reacts to this state.
Because there are many possible executions, the analysis must keep track of multiple different possible states.
Please note UnitTests are part of static analysis.
See Software Static Test Software Overview.
Dynamic analysis operates by executing a program and observing the executions. Testing and profiling are standard dynamic analyses. Dynamic analysis is precise because no approximation or abstraction need be done: the analysis can examine the actual, exact run-time behavior of the program.
The two approaches can be applied to a single problem, producing results that are useful in different contexts. Static analysis proofs correctness, safety, while dynamic analysis demonstrates the presence (or absence) of errors.
Static and dynamic analysis are seen as distinct and competing approaches with fundamentally different the techniques and technical machinery. The key observation is that both static and dynamic analysis are able to directly consider only a subset of program executions. Generalization from those executions is the source of unsoundness in dynamic analysis and imprecision in static analysis.
The above is a summery from the original article Static and dynamic analysis: synergy and duality, by Nichael D. Ernst, MIT Lab for Computer Science, Cambridge MA 02139 USA.
Software Development Process
A software development process is a structure imposed on the development of a software product. Synonyms include software life cycle and software process. There are several models for such processes, each describing approaches to a variety of tasks or activities that take place during the process.
A growing body of software development organizations implement process methodologies. Many of them are in the defense industry, which in the U.S. requires a rating based on 'process models' to obtain contracts. The international standard for describing the method of selecting, implementing and monitoring the life cycle for software is ISO 12207.
The Capability Maturity Model (CMM) is one of the leading models. Independent assessments grade organizations on how well they follow their defined processes, not on the quality of those processes or the software produced. CMM is gradually replaced by CMMI. ISO 9000 describes standards for formally organizing processes with documentation.
ISO 15504, also known as Software Process Improvement Capability Determination (SPICE), is a "framework for the assessment of software processes". This standard is aimed at setting out a clear model for process comparison. SPICE is used much like CMM and CMMI. It models processes to manage, control, guide and monitor software development. This model is then used to measure what a development organization or project team actually does during software development. This information is analyzed to identify weaknesses and drive improvement. It also identifies strengths that can be continued or integrated into common practice for that organization or team.
- DMOZ/ODP Agile, Directory MOZilla or Open Directory Project - Agile. Contains a list of links to famous websites for Development of Software.
- DSDM.org, Dynamic Systems Development Method (DSDM) Consortium Website for Rapid Application Development (RAD also know as RAD/IAD = InterActive Design (Cap Gemini/Volmac) development.
- MoSCoW Must have, Should have, Could have and Won't have, the principles for developing software you really need.
- Ratonal Unified Process, RUP by Rational (IBM).
- Scrum, A short introduction to Scrum
- Wikipedia Scrum description.