Understandability is considered as basic building block for delivering high quality and reliable software. It greatly influences cost, quality and reliability at the time of software evolution. In this paper, author highlights the importance of understandability early at requirement phase in general and as a factor of software testability. The paper quickly portrays the proposed model for understandability quantification of object oriented software [RUM OOS ] by establishing multiple linear regressions. Finally the proposed model has been validated using experimental tryout.

The paper shows the inability of current readability models in capturing readability improvements and recommends that other characteristics be taken into account to build more accurate models for readability changes. Our empirical study involved three Master’s degree students who carried out realistic maintenance tasks on 32 methods from two real-life Open Source Software applications. https://www.globalcloudteam.com/ We measured understandability as the time needed to correctly complete the maintenance tasks. We also collected several source code measures and investigated whether and to what extent they are correlated to the understandability measure. Based on our empirical study, it does not appear possible to build an understandability model based on structural code measures alone.

understandability in software engineering

Software readability models encompasses reading and understanding code in a given context on the abstract level of the language it is written. In this paper we define general understandability as a multi-layer model, including all parts of translating an idea from the computer programming component into natural language. The models we obtained in our empirical study show that code understandability is correlated with structural characteristics of code.

Understandability: the most important metric you’re not tracking

This complicates the design and increases the effort required to support new combinations. Therefore, Unnecessary Hierarchy impacts the extensibility of the design. They had inadvertently passed a flag requesting Google to include the full user profile within the login token.

  • However, those are not the use cases software engineering teams are tasked with, and those tools were never meant to help them.
  • Back in my early days at Rookout, I had the privilege of working with a large and well-known enterprise.
  • Stability refers to the degree to which software architecture is resistant to change.
  • These models are based on source code measures and, in their empirical study, Fakhoury et al. used the values of measures extracted by SourceMeter.
  • They had similar expertise concerning the programming language and the application domain, acquired through university courses.

A software architecture that is both stable and understandable will be easier to maintain, evolve, and extend over time, reducing the risk of errors and improving the overall quality of the system. The issue of the impact of nesting on source code complexity was addressed in software measurement literature prior to CoCo, especially with the goal of overcoming some limitations of McCC. Howatt and Baker (1989) provided a formal definition of nesting that can be applied to structured and unstructured programming. This formal definition was used as a framework for several nesting-based measures, such as the ones defined by Piwowarski (1982); Dunsmore and Gannon (1979); Harrison and Magel (1981a, 1981b). Chen (1978) defines an entropy-based complexity measure that also accounts for nesting of predicate nodes.

IEEE Account

Services, both first- and third-party, are becoming more interdependent. The internet is hell-bent on throwing the most bizarre and unexpected inputs our way. And so, with engineering turnover, we find more and more teams failing to understand the software they are responsible for developing and maintaining. As a sort of validation of CoCo, Campbell performed an investigation of the developers’ reaction to the introduction of CoCo in the measurement and analysis tool SonarCloud. In an analysis of 22 open-source projects, they assessed whether a development team “accepted” the measure, based on whether they fixed those code areas indicated by the tool as characterized by high CoCo.

To this end, we carried out an empirical study, in which we collected data about code understandability, and a set of structural measures, to be used as independent variables. Code readability and software complexity are considered essential components of software quality. They significantly impact software metrics, such as reusability and maintenance. The maintainability process consumes a high percentage of the software lifecycle cost, which is considered a very costly phase and should be given more focus and attention. For this reason, the importance of code readability and software complexity is addressed by considering the most time-consuming component in all software maintenance activities. This paper empirically studies the relationship between code readability and software complexity using various readability and complexity metrics and machine learning algorithms.

understandability in software engineering

Research on probabilistic causation in operational models, such as MDPs and Markov chains, is comparably rare. An exception is the work by Kleinberg [985,986], who formalized probabilistic causation in the context of temporal logics for Markov chains to infer complex causal relationships from data and to explain the occurrence of actual events. In [985], a notion of prima facie causes that relies on requirements formalized as formulas of Probabilistic Computation Tree Logic (PCTL) has been introduced. To reason about probabilistic causation in Markov chains, [985] combines standard PCTL model checking [584] with statistical hypothesis testing.

Of course, in the software industry, it is common knowledge that software complexity has to be minimized. The more complex the software, the more expensive it will be to develop new features and the overall quality of the system will be lower. Much has been written on how to build application software that keeps complexity to a minimum and allows systems and teams to scale better. This chapter discusses system understandability as it pertains to every stage of the system lifecycle. We start by discussing how to analyze and understand your systems according to invariants and mental models.

understandability

It doesn’t matter if it’s developing new features, tackling customer issues, or updating the system configuration. When you comprehend the software, you know how to execute in a consistent, reliable manner, without unnecessary back and forth. It can be seen that different participants obtained similar results for common methods, except for method nextValue and, to a lesser extent, for method objectToBigInteger.

understandability in software engineering

Whereas algorithmic reasoning following this approach is computationally hard in the general case [979,980], tractable instances for deciding causes and explanations could be identified in [981]. Probabilistic causation attempts to provide criteria for the stochastic evidence to treat C as a cause for another event E. As illustrated, e.g., in [974,982], various nuances of probabilistic causation have been defined in the literature. Most of them share the idea that causes raise the probabilities for their effects and rely on a formalization using conditional probabilities. Other probabilistic extensions of Halpern and Pearl’s structural-equation model have been considered recently under philosophical aspects [983] and in a logic-programming approach [984]. The models we obtained in our empirical study indicate that code understandability is correlated with the considered set of structural characteristics.

In short, it’s the dilemma developer’s face when they need to choose between needing data to write code or having to write code to get that data. Now, I know you’re probably thinking to yourself- well, understanding my code sounds pretty great – but where on earth do I start? Initially, David produced three FRG prototypes (starting from 1 ms response time) until he felt that the response time of 0.25 ms was good.

Our notion of readability arises directly from the judgments of actual human annotators who do not have context for the code they are judging. We present a descriptive model of software readability based on simple features that can be extracted automatically from programs. We carried out an empirical study with students who were asked to carry out realistic maintenance tasks on methods from real-life Open Source Software projects. We collected several data items, including the time needed to correctly complete the maintenance tasks, which we used to quantify method understandability. We investigated the presence of correlations between the collected code measures and code understandability by using several Machine Learning techniques. Software understandability is one of important characteristics of software quality because it can influence cost or reliability at software evolution in reuse or maintenance.

understandability in software engineering

If you ask a software engineer, debugging and constantly redeploying applications is just a dirty part of the job. It often creates what I like to call «the engineering dilemma,» when an engineer has to choose between moving forward with limited information or spending tons of time writing new code to try to get the data they need. I believe these problems will only get worse if we, as technology-driven leaders, don’t address them now. Engineers can spend hours each day just trying to understand their own code and debugging issues.

Changeability and Extensibility—When an abstraction “exposes” or “leaks” implementation details through its public interface, the clients of the abstraction may depend directly upon its implementation details. This direct dependency makes it difficult to change or extend the design without breaking the client code. A big part of that complexity is inherent, due to the simple fact that the number of business requirements is ever-growing. The rest of that complexity is unwanted, caused by the way the application has been repurposed over time as well as poor design choices and is commonly referred to as tech debt. Software engineering teams, on the other hand, have an in-depth knowledge of the inner workings of the system and are looking to understand more about how it works.