FOP
Feature-oriented programming (FOP) is a programming paradigm for developing software product lines.

This approach is based on the features of a software system, which are taken into account in the design and implementation as first-level elements. They represent extensions of the program functionality. Here, features of cross-cutting concerns are different in that they reflect needs of program users directly.

Features represent the basic principle to describe the variability of a software product line. Every involved person which is called a stakeholder uses feature as a common form to describe characteristics, which are comprehensible to all participates.
 
FOSD
Feature-oriented software development (FOSD) is used to plan and implement software product lines in the phase of the domain engineering, as well as to select features to configure and generate a concrete software product during the application engineering.

FeatureIDE supports FOSD within the following four phases.
  1. Domain analysis:
    The result of this analysis is covered in a feature model, which describes the variabilities and commonalities of a software system based on its given domain.
  2. Domain implementation:
    The implementation of the described software product line is accomplished for the entire code base. Every feature is mapped into code artefacts, which are contained within the code base.
  3. Requirements analysis:
    Tailoring a software system to customer needs is done based on the domain and the features. The requirements are mapped onto features, which are selected as needed to form a configuration of a concrete product.
  4. Software generation:
    FeatureIDE builds a concrete selected variation automatically.
Domain implementation and software generation highly depend on each other. To implement a product line lots of techniques exist. They describe code artefacts which are used to generate a tailored software system.