Professional Documents
Culture Documents
4, JULY/AUGUST 2010
Abstract—In this paper, we explore the concept of code readability and investigate its relation to software quality. With data collected
from 120 human annotators, we derive associations between a simple set of local code features and human notions of readability.
Using those features, we construct an automated readability measure and show that it can be 80 percent effective and better than a
human, on average, at predicting readability judgments. Furthermore, we show that this metric correlates strongly with three measures
of software quality: code changes, automated defect reports, and defect log messages. We measure these correlations on over
2.2 million lines of code, as well as longitudinally, over many releases of selected projects. Finally, we discuss the implications of this
study on programming language design and engineering practice. For example, our data suggest that comments, in and of
themselves, are less important than simple blank lines to local judgments of readability.
Index Terms—Software readability, program understanding, machine learning, software maintenance, code metrics, FindBugs.
1 INTRODUCTION
software engineers can only control accidental difficulties: . An additional experiment which compares read-
implying that readability can be addressed more easily than ability to cyclomatic complexity. This experiment
intrinsic complexity. serves to validate our claim that our notion of
While software complexity metrics typically take into readability is largely independent from traditional
account the size of classes and methods and the extent of measures of code complexity.
their interactions, the readability of code is based primarily . An additional longitudinal experiment showing how
on local, line-by-line factors. Our notion of readability arises changes in readability can correlate with changes in
directly from the judgments of actual human annotators defect density as a program evolves. For 10 versions
who do not have context for the code they are judging. of each of 5 programs, we find that projects with
Complexity factors, on the other hand, may have little unchanging readability have similarly unchanging
relation to what makes code understandable to humans. defect densities, while a project that experienced a
Previous work [31] has shown that attempting to correlate sharp drop in readability was subject to a corre-
artificial code complexity metrics directly to defects is sponding rise in defect density.
difficult, but not impossible. Although both involve local
factors such as indentation, readability is also distinct from There are a number of possible uses for an automated
coding standards (e.g., [2], [6], [38]), conventions primarily readability metric. It may help developers to write more
intended to facilitate collaboration by maintaining unifor- readable software by quickly identifying code that scores
mity between code written by different developers. poorly. It can assist project managers in monitoring and
In this study, we have chosen to target readability directly maintaining readability. It can serve as a requirement for
both because it is a concept that is independently valuable acceptance. It can even assist inspections by helping to
and also because developers have great control over it. We target effort at parts of a program that may need
show, in Section 5, that there is indeed a significant improvement. Finally, it can be used by other static analyses
correlation between readability and quality. The main to rank warnings or otherwise focus developer attention on
contributions of this paper are: sections of the code that are less readable and thus more
likely to contain bugs. The readability metric presented in
. A technique for the construction of an automatic this paper has already been used successfully to aid a static
software readability metric based on local code specification mining tool [24]—in that setting, knowing
features. whether a code path was readable or not had over twice the
. A survey of 120 human annotators on 100 code predictive power (as measured by ANOVA F -score) as
snippets that forms the basis of the metric presented knowing whether a code path was feasible or not.
and evaluated in this paper. We are unaware of any The structure of this paper is as follows: In Section 2, we
published software readability study of comparable present a study of readability involving 120 human annota-
size (12,000 human judgments). We directly evaluate tors. We present the results of that study in Section 3, and in
the performance of our model on this data set. Section 4, we determine a small set of features that is
. A set of experiments which reveals significant sufficient to capture the notion of readability for a majority of
correlations between our metric for readability and annotators. In Section 5, we discuss the correlation between
external notions of software quality including defect
our readability metric and external notions of software
density.
quality. We discuss some of the implications of this work on
. A discussion of the features involved in our metric
programming language design in Section 6, discuss potential
and their relation to software engineering and
threats to validity in Section 7, discuss possibilities for
programming language design.
extension in Section 8, and conclude in Section 9.
Some of these main points were previously presented [5].
This paper also includes:
2 STUDY METHODOLOGY
. A broader base of benchmark programs for empiri-
A consensus exists that readability is an essential determin-
cal experiments linking our readability metric with
ing characteristic of code quality [1], [4], [8], [9], [10], [16],
notions of software quality. In particular, we [31], [32], [33], [34], [35], [41], but not about which factors
evaluate on over two million lines of code compared contribute to human notions of software readability the
to over one million in previous work. most. A previous study by Tenny looked at readability by
. A reporting of the primary results of our analysis in testing comprehension of several versions of a program
terms of five correlation statistics as compared to one [39]. However, such an experiment is not sufficiently fine-
in the previous presentation. grained to extract precise features. In that study, the code
. An additional experiment correlating our readability samples were large, and thus, the perceived readability
metric with a more natural notion of software arose from a complex interaction of many features,
quality and defect density: explicit human mentions potentially including the purpose of the code. In contrast,
of bug repair. Using software version control we choose to measure the software readability of small (7.7
repository information, we coarsely separate lines on average) selections of code. Using many short code
changes made to address bugs from other changes. selections increase our ability to tease apart which features
We find that low readability correlates more strongly are most predictive of readability. We now describe an
with this direct notion of defect density than it does experiment designed to extract a large number of read-
with the previous approach of using potential bugs ability judgments over short code samples from a group of
reported by static analysis tools. human annotators.
Authorized licensed use limited to: University of Punjab. Downloaded on October 31,2023 at 05:46:38 UTC from IEEE Xplore. Restrictions apply.
548 IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, VOL. 36, NO. 4, JULY/AUGUST 2010
Fig. 2. The complete data set obtained for this study. Each box 3 STUDY RESULTS
corresponds to a judgment made by a human annotator. Darker colors
correspond to lower readability scores (e.g., 1 and 2); the lighter ones Our 120 annotators each scored 100 snippets for a total of
correspond to higher scores. The vertical bands, which occur much 12,000 distinct judgments. Fig. 2 provides a graphical
more frequently here than in a figure with random coloration, indicate
snippets that were judged similarly by many annotators. Our metric for representation of this publicly available data.2 The distribu-
readability is derived from these 12,000 judgments. tion of scores can be seen in Fig. 3.
First, we consider inter-annotator agreement and evaluate
current snippet; however, it was used very infrequently whether we can extract a single coherent model from this data
(15 times in 12,000). Snippets were not modified from the set. For the purpose of measuring agreement, we consider
source, but they were syntax highlighted to better simulate several correlation statistics. One possibility is Cohen’s ,
the way code is typically viewed.1 Finally, clicking on a which is often used as a measure of inter-rater agreement for
“help” link reminded users that they should score the categorical items. However, the fact that our judgment data
snippets “based on [their] estimation of readability” and that are ordinal (i.e., there is a qualitative relationship and total
“readability is [their] judgment about how easy a block of order between categories) is an important statistical con-
code is to understand.” Readability was intentionally left sideration. Since the annotators did not receive precise
formally undefined in order to capture the unguided and guidance on how to score snippets, absolute score differences
intuitive notions of participants. are not as important as relative ones. If two annotators both
gave snippet X a higher score than snippet Y , then we
2.3 Study Participation consider them to be in agreement with respect to those two
The study was advertised at several computer science snippets, even if the actual numerical score values differ.
courses at The University of Virginia. As such, participants Thus, in this study, we tested a linear-weighted version of
had varying experience reading and writing code: 17 were (which conceptually gives some credit for rankings that are
taking first-year courses, 63 were taking second-year “close”). In addition, we considered Kendall’s (i.e., the
courses, 30 were taking third or fourth-year courses, and number of bubble-sort operations to order one list in the same
10 were graduate students. In total, 120 students partici- way as a second), Pearson’s r (measures the degree of linear
pated. The study ran from 23 October to 2 November 2008. dependence), and Spearman’s (the degree of dependence
Participants were told that all respondents would receive with any arbitrary monotonic function, closely related to
$5 USD, but that the 50 people who started (not finished) the Pearson’s r) [37]. For these statistics, a correlation of 1
survey the earliest would receive $10 USD. The use of start indicates perfect correlation and 0 indicates no correlation
time instead of finish time encouraged participation without (i.e., uniformly random scoring with only random instances
placing any time pressure on the activity itself (e.g., there of agreement). In the case of Pearson, a correlation of 0.5
was no incentive to make rushed readability judgments); this would arise, for example, if two annotators scored half of the
setup was made clear to participants. All collected data were snippets exactly the same way, and then scored the other
kept carefully anonymous, and participants were aware of half randomly.
this fact: completing the survey yielded a randomly We can combine our large set of judgments into a single
generated code that could be monetarily redeemed. In model simply by averaging them. Because each of the
correlation statistics compares the judgments of two
1. Both syntax highlighting and the automatic formatting of certain IDEs annotators at a time, we extend it by finding the average
(e.g., Eclipse) may change the perceived readability of code. In our opinion,
the vast majority of editors feature syntax highlighting, but while automatic correlation between our unified model and each annotator;
formatting is often available and is prevalent in some editors, it is not as
universally used. We thus present snippets with syntax highlighting but 2. The data set and our tool are available at http://www.cs.virginia.edu/
without changing the formatting. ~weimer/readability.
Authorized licensed use limited to: University of Punjab. Downloaded on October 31,2023 at 05:46:38 UTC from IEEE Xplore. Restrictions apply.
550 IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, VOL. 36, NO. 4, JULY/AUGUST 2010
Fig. 10. Benchmark programs used in our experiments. The “Maturity” column indicates a self-reported SourceForge project status. *Used as a
snippet source.
Note that some projects present multiple releases at code. Our third experiment investigates the relationship
different maturity levels; in such cases, we selected the between readability and defects that have actually been
release for the maturity level indicated. noted by developers. It has become standard software
Running our readability tool (including feature detec- engineering practice to use version control repositories to
tion and the readability judgment) was quite rapid. For manage modifications to a code base. In such a system,
example, the 98 K lines of code in SoapUI took less than when a change is made, the developer typically includes a
16 seconds to process (about 6 K LOC per second) on a log message describing the change. Such log messages
machine with a 2 GHz processor and disk with a may describe a software feature addition, an optimization,
maximum 150 MBytes/sec transfer rate. or any number of other potential changes. In some cases,
log messages even include a reference to a “bug”—often,
5.1 Readability Correlations but not always, using the associated bug tracking number
Our first experiment tests for a correlation between defects from the project’s bug database. In this third experiment,
detected by FindBugs with our readability metric at the we use our metric for readability to predict whether a
function level. We first ran FindBugs on the benchmark,
function has been modified with a log message that
noting defect reports. Second, we extracted all of the
mentions a bug.
functions and partitioned them into two sets: those contain-
Twelve of our 15 benchmarks feature publicly accessible
ing at least one reported defect and those containing none.
version control systems with at least 500 revisions (most
To avoid bias between programs with varying numbers of
reported defects, we normalized the function set sizes. We have thousands). For the most recent version of each
then ran the already-trained classifier on the set of program, for each line of code, we determine the last
functions, recording an f-measure for “contains a bug” revision to have changed that line (e.g., this is similar to the
with respect to the classifier judgment of “less readable.” common cvs blame tool). We restrict our evaluation to the
The purpose of this experiment is to investigate the extend most recent 1,000 revisions of each benchmark and find
to which our model correlates with an external notion of 5,087 functions with reported bugs out of 111,670 total. We
code quality in aggregate. then inspect the log messages for the word “bug” to
Our second experiment tests for a similar correlation determine whether a change was made to address a defect
between “code churn” and readability. Version-to-version or not. We partition all functions into two sets: those where
changes capture another important aspect of code quality. at least one line was last changed to deal with a bug and
This experiment used the same setup as the first, but used those where no lines were last changed to deal with a bug.
readability to predict which functions will be modified Fig. 11 summarizes the results of these three experiments.
between two successive releases of a program. For this The average f-measure over our benchmarks for the Find-
experiment, “successive release” means the two most recent Bugs correlation is 0.62 (precision ¼ 0:90, recall ¼ 0:48); for
stable versions. In other words, instead of “contains a bug” version changes, it is 0.63 (precision ¼ 0:89, recall ¼ 0:49);
we attempt to predict “is going to change soon.” We consider and for log messages indicating a bug fix in the 12 applicable
a function to have changed in any case where the text is not benchmarks, the average f-measure is 0.65 (precision ¼ 0:92,
exactly the same, including changes to whitespace. White- recall ¼ 0:51). It is important to note that our goal is not
space is normally ignored in program studies, but since we perfect correlation with FindBugs or any other source of
are specifically focusing on readability, we deem it relevant. defect reports: Projects can run FindBugs directly rather
While our first experiment looks at output from a bug than using our metric to predict its output. Instead, we argue
finder, such output may not constitute true defects in that our readability metric has general utility and is
Authorized licensed use limited to: University of Punjab. Downloaded on October 31,2023 at 05:46:38 UTC from IEEE Xplore. Restrictions apply.
554 IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, VOL. 36, NO. 4, JULY/AUGUST 2010
Fig. 11. f-measure for using readability to predict functions that: show a FindBugs defect, have change between releases, and have a defect
referenced in a version control log message. For log messages, “Data Unavailable” indicates that not enough version control information was
available to conduct the experiment on that benchmark.
Fig. 12. Mean ratio of the classifier probabilities (predicting “less readable”) assigned to functions that contained a FindBugs defect, that will change
in the next version, or that had a defect reported in a version control log. For example, FreeCol functions with FindBug errors were assigned a
probability of “less readable” that was nearly 150 percent greater on average than the probabilities assigned to functions without such defects.
correlated with multiple notions of software quality. This is bathtub or uniform random distribution than a normal one.
best shown by our strong performance when correlating As a result, standard inferences about the implications of
with bug-mentioning log messages: Code with low read- the standard deviation do not apply. However, the mean
ability is significantly more likely to be changed by of such a distribution does well characterize the ratio of
developers later for the purposes of fixing bugs. methods from the lower half of the distribution to the upper
A second important consideration is the magnitude of half (i.e., it characterizes the population of “less readable”
the difference. We claim that classifier probabilities (i.e., methods compared to “more readable” ones).
continuous output versus discrete classifications) are For each of these three external quality indicators, we
useful in evaluating readability. Fig. 12 presents this data found that our tool exhibits a substantial degree of
in the form of a ratio, the mean probability assigned by the correlation. Predicting based on our readability metric
classifier to functions positive for FindBugs defects or yields an f-measure over 0.8 in some case. Again, our goal
version changes to functions without these features. A is not a perfect correlation with version changes and code
ratio over 1 (i.e., >100%) for many of the projects indicates churn. These moderate correlations do, however, add
that the functions with these features tend to have lower support to the hypothesis that a substantial connection
readability scores than functions without them. For exists between code readability, as described by our model,
example, in the jMencode and SoapUI projects, functions and defects and upcoming code changes.
judged less readable by our metric were dramatically
more likely to contain FindBugs defect reports, and in the 5.2 Readability and Complexity
JasperReports project, less readable methods were very In this paper, we defined readability as the “accidental”
likely to change in the next version. component of code understandability, referring to the idea
As a brief note: We intentionally do not report standard that it is an artifact of writing code and not closely related to
deviations for readability distributions. Both the underlying the complexity of the problem that the code is meant to
score distribution that our metric is based on (see Fig. 5) and solve. Our short snippet selection policy masks complexity,
the output of our tool itself are bimodal. In fact, the tool helping to tease it apart from readability. We also selected a
output on our benchmarks more closely approximates a set of surface features designed to be agnostic to the length
Authorized licensed use limited to: University of Punjab. Downloaded on October 31,2023 at 05:46:38 UTC from IEEE Xplore. Restrictions apply.
BUSE AND WEIMER: LEARNING A METRIC FOR CODE READABILITY 555
Fig. 13. Pearson Product moment correlation between Cyclomatic complexity and readability as well as between Cyclomatic complexity and method
length (number of statements in the method). Readability is at most weakly correlated with complexity in an absolute sense. In a relative sense,
compared to method length, readability is effectively uncorrelated with complexity. These results imply that readability captures an aspect of code
that is not well modeled by a traditional complexity measure.
Fig. 14. (a) The average readability metric of all functions in a project as a function of project lifetime. (b) The FindBugs defect density in a project as
a function of project lifetime for the same projects and releases. Note that the projects with flat readabilities have corresponding flat defect densities,
while jUnit (described in the text) becomes significantly less readable and significantly more buggy starting at release five.
of any selection of code. Nonetheless, some of the features defects. Fig. 14 shows a longitudinal study of how read-
still may capture some amount of complexity. We now test ability and defect rates tend to change over the lifetime of a
the hypothesis that readability and complexity are not project. To construct this figure, we selected several projects
closely related. with rich version histories and calculated the average
We use McCabe’s Cyclomatic measure [27] as an readability level over all of the functions in each. Each of
indicative example of an automated model of code the projects shows a linear relationship at a statistical
complexity. We measured the Cyclomatic complexity and significance level (p-value) of better than 0.05 except for
readability of each method in each benchmark. Since both defect density with jFreeChart.
quantities are ordinal (as opposed to binary, as in our three Note that newly released versions for open source
previous experiments), we computed Pearson’s r between projects are not always more stable than their predecessors.
them. We also computed, for use as a baseline, the Projects often undergo major overhauls or add additional
correlation between Cyclomatic complexity and method crosscutting features. Consider jUnit, which has recently
length. Fig. 13 shows that readability is not closely related to adopted a “completely different API . . . [that] depends on
this traditional notion of complexity. Method length, on the new features of Java 5.0 (annotations, static import. . . )” [20].
other hand, is much more strongly related to complexity. Fig. 14b plots FindBugs-reported defect density over
We thus conclude that while our notion of readability is not multiple project releases. Most projects, such as Hibernate
orthogonal to complexity, it is in large part modeling a and SoapUI, show a relatively flat readability profile. These
distinct phenomena. projects experience a similarly flat defect density. The jUnit
project, however, shows a sharp decline in readability from
5.3 Software Life Cycle releases five to zero (as the new API is introduced) and a
To further explore the relation of our readability metric to corresponding increase in defect density from releases five to
external factors, we investigate changes over long periods of zero. For jUnit, we observe that 58.9 percent of functions have
time. We hypothesize that an observed trend in the read- readability below 0.5 in the earliest version we tested and
ability of a project will manifest as a similar trend in project 71.4 percent in the most recent (an increase of 12.5 percent).
Authorized licensed use limited to: University of Punjab. Downloaded on October 31,2023 at 05:46:38 UTC from IEEE Xplore. Restrictions apply.
556 IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, VOL. 36, NO. 4, JULY/AUGUST 2010
[7] T.Y. Chen, F.-C. Kuo, and R. Merkel, “On the Statistical Properties [39] T. Tenny, “Program Readability: Procedures versus Comments,”
of the F-Measure,” Proc. Int’l Conf. Quality Software, pp. 146-153, IEEE Trans. Software Eng., vol. 14, no. 9, pp. 1271-1279, Sept. 1988.
2004. [40] A. Watters, G. van Rossum, and J.C. Ahlstrom, Internet Program-
[8] L.E. Deimel, Jr., “The Uses of Program Reading,” ACM SIGCSE ming with Python. MIS Press/Henry Holt, 1996.
Bull., vol. 17, no. 2, pp. 5-14, 1985. [41] E.J. Weyuker, “Evaluating Software Complexity Measures,” IEEE
[9] E.W. Dijkstra, A Discipline of Programming. Prentice Hall PTR, Trans. Software Eng., vol. 14, no. 9, pp. 1357-1365, 1988.
1976.
[10] J.L. Elshoff and M. Marcotty, “Improving Computer Program Raymond P.L. Buse received the BS degree in
Readability to Aid Modification,” Comm. ACM, vol. 25, no. 8, computer science from The Johns Hopkins
pp. 512-521, 1982. University and the MCS degree from the
[11] R.F. Flesch, “A New Readability Yardstick,” J. Applied Psychology, University of Virginia, where he is currently a
vol. 32, pp. 221-233, 1948. graduate student. His main research interests
[12] F.P. Brooks, Jr., “No Silver Bullet: Essence and Accidents of include static analysis techniques and the
Software Engineering,” Computer, vol. 20, no. 4, pp. 10-19, Apr. underlying human factors related to program-
1987. ming language design and software engineering
[13] L.L. Giventer, Statistical Analysis in Public Administration. Jones practice.
and Bartlett, 2007.
[14] J. Gosling, B. Joy, and G.L. Steele, The Java Language Specification.
Addison-Wesley, 1996.
[15] R. Gunning, The Technique of Clear Writing. McGraw-Hill, 1952.
[16] N.J. Haneef, “Software Documentation and Readability: A Westley R. Weimer received the BA degree in
Proposed Process Improvement,” ACM SIGSOFT Software Eng. computer science and mathematics from Cornell
Notes, vol. 23, no. 3, pp. 75-77, 1998. University and the MS and PhD degrees from
[17] A.E. Hatzimanikatis, C.T. Tsalidis, and D. Christodoulakis, the University of California, Berkeley. He is
“Measuring the Readability and Maintainability of Hyperdocu- currently an assistant professor at the University
ments,” J. Software Maintenance, vol. 7, no. 2, pp. 77-90, 1995. of Virginia. His main research interests include
[18] G. Holmes, A. Donkin, and I. Witten, “WEKA: A Machine static and dynamic analyses and program
Learning Workbench,” Proc. Australia and New Zealand Conf. transformations to improve software quality.
Intelligent Information Systems, 1994.
[19] D. Hovemeyer and W. Pugh, “Finding Bugs Is Easy,” ACM
SIGPLAN Notices, vol. 39, no. 12, pp. 92-106, 2004.
[20] jUnit.org, “jUnit 4.0 Now Available,” http://sourceforge.net/
forum/forum.php?forum_id=541181, Feb. 2006. . For more information on this or any other computing topic,
[21] J.P. Kinciad and E.A. Smith, “Derivation and Validation of the please visit our Digital Library at www.computer.org/publications/dlib.
Automated Readability Index for Use with Technical Materials,”
Human Factors, vol. 12, pp. 457-464, 1970.
[22] J.C. Knight and E.A. Myers, “Phased Inspections and Their
Implementation,” ACM SIGSOFT Software Eng. Notes, vol. 16,
no. 3, pp. 29-35, 1991.
[23] R. Kohavi, “A Study of Cross-Validation and Bootstrap for
Accuracy Estimation and Model Selection,” Proc. Int’l Joint Conf.
Artificial Intelligence, vol. 14, no. 2, pp. 1137-1145, 1995.
[24] C. Le Goues and W. Weimer, “Specification Mining with Few
False Positives,” Proc. 15th Int’l Conf. Tools and Algorithms for the
Construction and Analysis of Systems, 2009.
[25] R. Likert, “A Technique for the Measurement of Attitudes,”
Archives of Psychology, vol. 140, pp. 44-53, 1932.
[26] S. MacHaffie, R. McLeod, B. Roberts, P. Todd, and L. Anderson,
“A Readability Metric for Computer-Generated Mathematics,”
technical report, Saltire Software, http://www.saltire.com/
equation.html, 2007.
[27] T.J. McCabe, “A Complexity Measure,” IEEE Trans. Software Eng.,
vol. 2, no. 4, pp. 308-320, Dec. 1976.
[28] G.H. McLaughlin, “Smog Grading—A New Readability,”
J. Reading, vol. 12, no. 8, pp. 639-646, May 1969.
[29] R.J. Miara, J.A. Musselman, J.A. Navarro, and B. Shneiderman,
“Program Indentation and Comprehensibility,” Comm. ACM,
vol. 26, no. 11, pp. 861-867, 1983.
[30] T. Mitchell, Machine Learning. McGraw Hill, 1997.
[31] N. Nagappan and T. Ball, “Use of Relative Code Churn Measures
to Predict System Defect Density,” Proc. 27th Int’l Conf. Software
Eng., pp. 284-292, 2005.
[32] C.V. Ramamoorthy and W.-T. Tsai, “Advances in Software
Engineering,” Computer, vol. 29, no. 10, pp. 47-58, Oct. 1996.
[33] D.R. Raymond, “Reading Source Code,” Proc. Conf. Center for
Advanced Studies on Collaborative Research, pp. 3-16, 1991.
[34] P.A. Relf, “Tool Assisted Identifier Naming for Improved
Software Readability: An Empirical Study,” Proc. Int’l Symp.
Empirical Software Eng., Nov. 2005.
[35] S. Rugaber, “The Use of Domain Knowledge in Program Under-
standing,” Ann. Software Eng., vol. 9, nos. 1-4, pp. 143-192, 2000.
[36] C. Simonyi, “Hungarian Notation,” MSDN Library, Nov. 1999.
[37] S.E. Stemler, “A Comparison of Consensus, Consistency, and
Measurement Approaches to Estimating Interrater Reliability,”
Practical Assessment, Research and Evaluation, vol. 9, no. 4, 2004.
[38] H. Sutter and A. Alexandrescu, C++ Coding Standards: 101 Rules,
Guidelines, and Best Practices. Addison-Wesley Professional, 2004.
Authorized licensed use limited to: University of Punjab. Downloaded on October 31,2023 at 05:46:38 UTC from IEEE Xplore. Restrictions apply.