# Internal Quality Evolution of Open-Source Software Systems
## 3 Internal Quality of Software Systems  
Software quality is entangled with software evolution. The ISO/IEC 25010 Quality Model (2008) sets standards to guide the development of software products by identifying and evaluating quality requirements. Software quality is seen from three different perspectives: internal and external quality and the quality in use. Internal software quality is the degree to which a set of static attributes of a software product satisfies stated and implied needs for that software product. External software quality is the degree to which a software product enables the behavior of a system to meet expressed and implied requirements for that system. At the same time, quality in use is the degree to which specific users can use a product or system to meet their needs to achieve specific goals with effectiveness, efficiency, freedom from risk, and satisfaction in specific contexts of use. [PERSON] et al. [29] stated in their empirical study that the quality of the software system must be evaluated from the internal and external quality perspectives. Attributes of software quality have been divided into two major categories by the experts, internal and external [30]. External quality attributes are defined as those factors that represent the quality, which cannot be gauged through the knowledge of the software artifacts [31]. On the other hand, internal software quality attributes are defined as those attributes that can be gauged through the knowledge of software artifacts. Another critical difference between these two categories is that it is straightforward to measure internal attributes as compared to external attributes. Examples of internal software quality attributes include inheritance, complexity, coupling, size, and cohesion, which can be quantified after the development of the system. Internal quality attributes are also related to the external attributes before the release of software [32]. In addition to this, the internal software quality has a significant relationship with the software structure, which is not the case with external software quality. It must also be noted that the external quality of the software is more concerned with software behavior when it is used. End-user is not able to see the software structure but still has a major association with it as internal quality attributes have a major influence on the external quality attributes [33]. Internal quality attributes are a critical measure of code structural quality [31]. Various other indicators can be gauged through internal quality attributes, which include the size that quantifies the length of a software system. In addition, complexity is another measure that can be gauged through internal attributes, and it defines the overload of decisions and responsibilities of software. Moreover, coupling and cohesion can be measured using internal attributes. Coupling that defines the degree of interdependence between modules and classes can be measured using inheritance which is an internal quality attribute. On the contrary, cohesion is the extent to which internal module elements are interrelated. Since we are using software metrics in our study, we will be discussing them in more detail. There are four main categories of software metrics [34]. This classification is based on what they measure and what area of software development they focus on. At a very high level, software metrics can be classified as process metrics, project metrics, product metrics, and personnel metrics. Process metrics coincide with the software development process, encompassing the standards, activities, and methods used. They usually leverage historical project knowledge and assess the capability of the software engineering process. Examples of process metrics are prior defects, prior commits, and metrics for measuring project progress. For example, the efficiency of fault detection. Project metrics indicate how the project is planned and executed. The intent of these metrics is two-fold: minimize development schedule and assess product quality.