In the case of a java class, the class specification is a description of the interface between callers of the class and the implementation of the class. In the case of an application program the functional specification describes the interface between the user and the program.
Analysis involves figuring out what the application domain is like, mapping the territory.
Specifications are at the boundary between the application domain and the machine, defining how the relevant parts of both sides fit together. Design is the construction of the machine internals, which is further broken down into architecture and design . Requirements The trickiest part of software development is coming up with good requirements. The most common error is to include too much implementation bias in requirements, so that too much of the solution is assumed in the problem statement. When requirements are at the proper level, the designers are left with flexibility in coming up with the best solution.