292:, testing it to ensure correctness, and making another small transformation. If at any point a test fails, the last small change is undone and repeated in a different way. Through many small steps the program moves from where it was to where you want it to be. For this very iterative process to be practical, the tests must run very quickly, or the programmer would have to spend a large fraction of their time waiting for the tests to finish. Proponents of
557:
253:
developers. Further code refactoring activities may require additional effort to regain this knowledge. Refactoring activities generate architectural modifications that deteriorate the structural architecture of a software system. Such deterioration affects architectural properties such as maintainability and comprehensibility which can lead to a complete re-development of software systems.
467:) has been proposed by Zeng and Huss. In their approach, refactoring preserves the simulated behavior of a hardware design. The non-functional measurement that improves is that refactored code can be processed by standard synthesis tools, while the original code cannot. Refactoring of digital hardware description languages, albeit manual refactoring, has also been investigated by
189:. It is easier to fix bugs because the source code is easy to read and the intent of its author is easy to grasp. This might be achieved by reducing large monolithic routines into a set of individually concise, well-named, single-purpose methods. It might be achieved by moving a method to a more appropriate class, or by removing misleading comments.
252:
Refactoring requires extracting software system structure, data models, and intra-application dependencies to get back knowledge of an existing software system. The turnover of teams implies missing or inaccurate knowledge of the current state of a system and about design decisions made by departing
135:
By continuously improving the design of code, we make it easier and easier to work with. This is in sharp contrast to what typically happens: little refactoring and a great deal of attention paid to expediently add new features. If you get into the hygienic habit of refactoring continuously, you'll
260:
when using tools and techniques providing data about algorithms and sequences of code execution. Providing a comprehensible format for the inner-state of software system structure, data models, and intra-components dependencies is a critical element to form a high-level understanding and then
203:
Performance engineering can remove inefficiencies in programs, known as software bloat, arising from traditional software-development strategies that aim to minimize an application's development time rather than the time it takes to run. Performance engineering can also tailor
239:
A method that balances preventive and corrective refactoring is "shared responsibility for refactoring". This approach splits the refactoring action into two stages and two roles. The original developer of the code just prepares the code for refactoring, and when the
316:'s refactoring book and website. Many development environments provide automated support for these micro-refactorings. For instance, a programmer could click on the name of a variable and then select the "Encapsulate field" refactoring from a
169:
For a long routine, one or more smaller subroutines can be extracted; or for duplicate routines, the duplication can be removed and replaced with one shared function. Failure to perform refactoring can result in accumulating
130:
in the system by simplifying the underlying logic and eliminating unnecessary levels of complexity. If done poorly, it may fail the requirement that external functionality not be changed, and may thus introduce new bugs.
320:. The IDE would then prompt for additional details, typically with sensible defaults and a preview of the code changes. After confirmation by the programmer it would carry out the required changes throughout the code.
118:, each of which is (usually) a tiny change in a computer program's source code that either preserves the behavior of the software, or at least does not modify its conformance to functional requirements. Many
122:
provide automated support for performing the mechanical aspects of these basic refactorings. If done well, code refactoring may help software developers discover and fix hidden or dormant
119:
1635:
1264:
Novais, Renato; Santos, José Amancio; Mendonça, Manoel (2017). "Experimentally assessing the combination of multiple visualization strategies for software evolution analysis".
111:. Another potential goal for refactoring is improved performance; software engineers face an ongoing challenge to write programs that perform faster or use less memory.
273:
should be set up before refactoring to ensure routines still behave as expected. Unit tests can bring stability to even large refactors when performed with a single
543:
Refactorings can also be reconstructed posthoc to produce concise descriptions of complex software changes recorded in software repositories like CVS or SVN.
1717:
456:
is used as a shorthand term for refactoring of code in hardware description languages. Since hardware description languages are not considered to be
536:
In extreme programming, the
Extract Method refactoring technique has essentially the same meaning as factoring in Forth; to break down a "word" (or
325:
312:
Here are some examples of micro-refactorings; some of these may only apply to certain languages or language types. A longer list can be found in
502:
systems. All of these resources provide a catalog of common methods for refactoring; a refactoring method has a description of how to apply the
1894:
1875:
1856:
1837:
1818:
1758:
1433:
1182:
1141:
1106:
987:
1485:
Bruntink, M.; van
Deursen, A.; Tourwe, T.; van Engelen, R. (2004). "An evaluation of clone detection techniques for crosscutting concerns".
1043:
Leiserson, Charles E.; Thompson, Neil C.; Emer, Joel S.; Kuszmaul, Bradley C.; Lampson, Butler W.; Sanchez, Daniel; Schardl, Tao B. (2020).
498:'s 1992 dissertation on the refactoring of object-oriented programs, although all the theory and machinery have long been available as
1563:; Johnson, Ralph E. (September 1990). "Refactoring: An Aid in Designing Application Frameworks and Evolving Object-Oriented Systems".
1302:
1012:
818:
669:
658:
487:
1674:
1337:
1327:
969:
640:
574:
509:
313:
196:
494:'s 1991 Ph.D. dissertation is one of the first major academic works on refactoring functional and procedural programs, followed by
893:
62:
31:
1530:
66:—without changing its external behavior. Refactoring is intended to improve the design, structure, and/or implementation of the
1122:
Haendler, Thorsten; Neumann, Gustaf (2019). "A Framework for the
Assessment and Training of Software Refactoring Competences".
621:
369:
1950:
1507:
1124:
Proceedings of the 11th
International Joint Conference on Knowledge Discovery, Knowledge Engineering and Knowledge Management
726:
593:
578:
348:
817:: Most dialects include powerful refactoring tools. Many use the original refactoring browser produced in the early '90s by
845:
756:
692:
449:
419:
379:
Componentization breaks code down into reusable semantic units that present clear, well-defined, simple-to-use interfaces.
460:
by most hardware engineers, hardware refactoring is to be considered a separate field from traditional code refactoring.
392:
into a new method. By breaking down code in smaller pieces, it is more easily understandable. This is also applicable to
1945:
859:
600:
520:
301:
278:
1612:
474:
Mike
Keating. His target is to make complex systems easier to understand, which increases the designers' productivity.
277:. A common strategy to allow safe and atomic refactors spanning multiple projects is to store all projects in a single
808:
798:
786:
746:
682:
425:
415:
1518:
Kaiping Zeng, Sorin A. Huss, "Architecture refinements by code refactoring of behavioral VHDL-AMS models". ISCAS 2006
1233:
Hassan, Ahmed E.; Xie, Tao (November 2010). "Software intelligence: the future of mining software engineering data".
1664:
297:
72:
607:
1940:
389:
166:
the source code, or transforming it into a new form that behaves the same as before but that no longer "smells".
127:
1527:
M. Keating :"Complexity, Abstraction, and the
Challenges of Designing Complex Systems", in DAC'08 tutorial
1091:
Proceedings of the 21st ACM SIGPLAN International
Conference on Generative Programming: Concepts and Experiences
224:
Preventive refactoring – the original developer of the code makes the code more robust when it is still free of
405:
330:
209:
482:
The first known use of the term "refactoring" in the published literature was in a
September, 1990 article by
589:
524:
928:
567:
918:
537:
499:
393:
289:
77:
1471:
913:
339:
257:
100:
85:
38:
1565:
Proceedings of the
Symposium on Object Oriented Programming Emphasizing Practical Applications (SOOPPA)
1457:
1169:. 2017 IEEE International Conference on Software Maintenance and Evolution (ICSME). pp. 261–272.
1921:
1629:
923:
888:
878:
457:
45:
1617:(Ph.D. thesis). University of Illinois at Urbana-Champaign. Archived from the original on 2019-12-16
529:
898:
662:
359:
353:
293:
1416:
Donglin, Linag; Harrold, M. J. (November 2008). "Slicing objects using system dependence graphs".
1797:
1439:
1398:
1246:
1188:
1147:
1089:
Fraivert, Dov; Lorenz, David H. (2022). "Language
Support for Refactorability Decay Prevention".
714:
706:
678:
448:
originally referred exclusively to refactoring of software code, in recent years code written in
411:
Rename method or rename field – changing the name into a new one that better reveals its purpose
722:
1890:
1871:
1852:
1833:
1814:
1789:
1754:
1670:
1429:
1333:
1308:
1298:
1178:
1137:
1102:
1066:
1008:
983:
614:
503:
698:
1781:
1649:
1490:
1421:
1388:
1273:
1238:
1215:
1170:
1127:
1094:
1056:
1045:"There's plenty of room at the Top: What will drive computer performance after Moore's law?"
661:
have automated refactoring support. Here is a list of a few of these editors, or so-called
342:- reverse engineers the initial state to understand existing intra-application dependencies
1534:
1235:
Proceedings of the FSE/SDP Workshop on Future of Software Engineering Research (FoSER '10)
903:
433:
212:
on which it runs, for example, to take advantage of parallel processors and vector units.
186:
96:
49:
979:
973:
672:(Implements large-scale refactoring for C, C++, C#, COBOL, Java, PHP and other languages)
174:; on the other hand, refactoring is one of the primary means of repaying technical debt.
1528:
1608:
1582:
1560:
782:
495:
483:
171:
159:
1219:
1934:
1801:
1578:
1151:
833:
827:
742:
491:
382:
288:
With unit testing in place, refactoring is then an iterative cycle of making a small
274:
195:. It is easier to extend the capabilities of the application if it uses recognizable
192:
108:
1731:
1703:
1443:
1192:
1250:
908:
317:
270:
123:
104:
1418:
Proceedings, International Conference on Software Maintenance (Cat. No. 98CB36272)
1402:
1206:
van Gurp, Jilles; Bosch, Jan (March 2002). "Design erosion: problems and causes".
1292:
883:
855:
736:
654:
556:
231:
Corrective refactoring – a subsequent developer performs refactoring to correct
89:
81:
57:
1494:
1277:
865:
794:
766:
241:
232:
225:
155:
1793:
1785:
1425:
1132:
182:
There are two general categories of benefits to the activity of refactoring.
162:
of another nearby method. Once recognized, such problems can be addressed by
37:
This article is about a behaviour-preserving change. Not to be confused with
1363:
1312:
1242:
1098:
1061:
1044:
814:
519:
The terms "factoring" and "factoring out" have been used in this way in the
1910:
1070:
27:
Restructuring existing computer code without changing its external behavior
1174:
17:
841:
804:
772:
762:
468:
464:
282:
244:
form, a subsequent developer carries out the actual refactoring action.
205:
67:
1680:
1393:
1376:
336:
System Dependence Graph - representation of procedure calls between PDG
158:. For example, the method at hand may be very long, or it may be a near
1487:
Proceedings, 20th IEEE International Conference on Software Maintenance
752:
732:
702:
581: in this section. Unsourced material may be challenged and removed.
199:, and it provides some flexibility where none before may have existed.
1925:
506:
and indicators for when you should (or should not) apply the method.
471:
1769:
1375:
Ferrante, Jeanne; Ottenstein, Karl J.; Warren, Joe D. (July 1987).
851:
688:
490:. Although refactoring code has been done informally for decades,
836:(addon for Visual Studio with refactoring support for C# and C++)
80:. Potential advantages of refactoring may include improved code
1167:
Revisiting Turnover-Induced Knowledge Loss in Software Projects
385:
moves part of the code from an existing class into a new class.
356:– force code to access the field with getter and setter methods
1537:"Bridging a Verification Gap: C++ to RTL for Practical Design"
776:
550:
114:
Typically, refactoring applies a series of standardized basic
1508:
Hardware description languages#HDL and programming languages
376:
Techniques for breaking code apart into more logical pieces
30:"Refactoring" redirects here. For its use on Knowledge, see
333:- explicit representation of data and control dependencies
99:
and create a simpler, cleaner, or more expressive internal
1916:
1377:"The program dependence graph and its use in optimization"
463:
Automated refactoring of analog hardware descriptions (in
362:– create more general types to allow for more code sharing
523:
community since at least the early 1980s. Chapter Six of
1294:
Refactoring : improving the design of existing code
1165:
Nassif, Matthieu; Robillard, Martin P. (November 2017).
685:, and to a lesser extent, C++, PHP, Ruby and JavaScript)
1584:
Program Restructuring as an Aid to Software Maintenance
404:
Move method or move field – move to a more appropriate
1364:
Refactoring techniques in Fowler's refactoring Website
1548:
Reuse Methodology Manual for System-on-a-Chip Designs
1381:
ACM Transactions on Programming Languages and Systems
261:
refined views of what needs to be modified, and how.
1669:. Fig Leaf Press, Forth Interest. pp. 171–196.
401:
Techniques for improving names and location of code
1650:"Martin Fowler, "MF Bliki: EtymologyOfRefactoring""
136:
find that it is easier to extend and maintain code.
1358:
1356:
975:Refactoring. Improving the Design of Existing Code
540:) into smaller, more easily maintained functions.
514:Refactoring: Improving the Design of Existing Code
300:describe this activity as an integral part of the
228:to prevent the formation of smells in the future.
1634:: CS1 maint: bot: original URL status unknown (
1458:"Replace type-checking code with State/Strategy"
154:Refactoring is usually motivated by noticing a
133:
1084:
1082:
1080:
365:Replace type-checking code with state/strategy
220:There are two possible times for refactoring.
256:Code refactoring activities are secured with
8:
946:
944:
1917:Martin Fowler's homepage about refactoring
1868:Professional Refactoring in C# and ASP.NET
1774:IEEE Transactions on Software Engineering
1392:
1131:
1060:
641:Learn how and when to remove this message
388:Extract method, to turn part of a larger
56:is the process of restructuring existing
1849:Professional Refactoring in Visual Basic
1590:(Ph.D. thesis). University of Washington
964:
962:
1472:"Replace conditional with polymorphism"
1332:. "O'Reilly Media, Inc.". p. 301.
1003:Suryanarayana, Girish (November 2014).
940:
1768:Mens, T.; Tourwe, T. (February 2004).
1627:
1614:Refactoring Object-Oriented Frameworks
1005:Refactoring for Software Design Smells
1732:"Overview | Qt Creator Documentation"
7:
1811:Working Effectively with Legacy Code
579:adding citations to reliable sources
533:(1984) is dedicated to the subject.
1887:Refactoring with Visual Studio 2010
1550:, Kluwer Academic Publishers, 1999.
1362:(these are only about OOP however).
452:has also been refactored. The term
1770:"A survey of software refactoring"
670:DMS Software Reengineering Toolkit
76:attributes), while preserving its
25:
1007:. Morgan Kaufmann. p. 258.
894:Decomposition (computer science)
555:
32:Knowledge:Refactoring talk pages
1297:. Reading, MA: Addison-Wesley.
1266:Journal of Systems and Software
1208:Journal of Systems and Software
566:needs additional citations for
347:Techniques that allow for more
324:Techniques that allow for more
868:(for C++, Objective-C and QML)
450:hardware description languages
424:Push down – in OOP, move to a
1:
1326:Smart, John Ferguson (2008).
1220:10.1016/S0164-1212(01)00152-2
516:is the canonical reference.
1866:Arsenovski, Danijel (2009).
1847:Arsenovski, Danijel (2008).
1809:Feathers, Michael C (2004).
1704:"What is code refactoring?"
978:. Addison-Wesley. pp.
416:object-oriented programming
1967:
1828:Kerievsky, Joshua (2004).
1420:. IEEE. pp. 319–349.
951:Kerievsky, Joshua (2004).
547:Automated code refactoring
302:software development cycle
298:agile software development
36:
29:
1749:Wake, William C. (2003).
1495:10.1109/ICSM.2004.1357804
1278:10.1016/j.jss.2017.03.006
368:Replace conditional with
216:Timing and responsibility
1786:10.1109/tse.2004.1265817
1546:M. Keating, P. Bricaud:
1426:10.1109/ICSM.1998.738527
1133:10.5220/0008350803070316
331:Program Dependence Graph
120:development environments
88:; these can improve the
1885:Ritchie, Peter (2010).
1830:Refactoring To Patterns
1718:"What's new in Xcode 9"
1291:Fowler, Martin (1999).
1243:10.1145/1882362.1882397
1099:10.1145/3564719.3568688
1062:10.1126/science.aam9744
1028:Martin, Robert (2009).
953:Refactoring to Patterns
929:Test-driven development
143:Refactoring to Patterns
919:Separation of concerns
500:program transformation
290:program transformation
147:
1951:Technology neologisms
1175:10.1109/ICSME.2017.64
914:Rewrite (programming)
824:Visual Studio based:
458:programming languages
340:Software intelligence
258:software intelligence
39:Rewrite (programming)
1911:What Is Refactoring?
1751:Refactoring Workbook
1663:Brodie, Leo (2004).
1237:. pp. 161–166.
1126:. pp. 307–316.
1093:. pp. 122–134.
924:Software peer review
889:Database refactoring
879:Amelioration pattern
663:refactoring browsers
575:improve this article
454:hardware refactoring
440:Hardware refactoring
46:computer programming
1946:Extreme programming
1683:on 16 December 2005
1579:Griswold, William G
1394:10.1145/24039.24041
1387:(3). ACM: 319–349.
899:Modular programming
294:extreme programming
1832:. Addison-Wesley.
1753:. Addison-Wesley.
1561:Opdyke, William F.
1533:2016-03-28 at the
1055:(6495): eaam9744.
830:(for .NET and C++)
715:Embarcadero Delphi
590:"Code refactoring"
141:Joshua Kerievsky,
116:micro-refactorings
1896:978-1-84968-010-3
1877:978-0-470-43452-9
1858:978-0-470-17979-6
1839:978-0-321-21335-8
1820:978-0-13-117705-5
1813:. Prentice Hall.
1760:978-0-321-10929-3
1702:Sokolov, Andriy.
1609:Opdyke, William F
1435:978-0-8186-8779-2
1184:978-1-5386-0992-7
1143:978-989-758-382-7
1108:978-1-4503-9920-3
989:978-0-201-48567-7
955:. Addison Wesley.
651:
650:
643:
625:
418:(OOP), move to a
354:Encapsulate field
16:(Redirected from
1958:
1941:Code refactoring
1913:(c2.com article)
1900:
1881:
1862:
1843:
1824:
1805:
1764:
1736:
1735:
1728:
1722:
1721:
1714:
1708:
1707:
1699:
1693:
1692:
1690:
1688:
1679:. Archived from
1660:
1654:
1653:
1646:
1640:
1639:
1633:
1625:
1623:
1622:
1605:
1599:
1598:
1596:
1595:
1589:
1575:
1569:
1568:
1557:
1551:
1544:
1538:
1525:
1519:
1516:
1510:
1505:
1499:
1498:
1482:
1476:
1475:
1468:
1462:
1461:
1454:
1448:
1447:
1413:
1407:
1406:
1396:
1372:
1366:
1360:
1351:
1350:
1348:
1346:
1329:Java Power Tools
1323:
1317:
1316:
1288:
1282:
1281:
1261:
1255:
1254:
1230:
1224:
1223:
1203:
1197:
1196:
1162:
1156:
1155:
1135:
1119:
1113:
1112:
1086:
1075:
1074:
1064:
1040:
1034:
1033:
1032:. Prentice Hall.
1025:
1019:
1018:
1000:
994:
993:
966:
957:
956:
948:
719:IntelliJ based:
646:
639:
635:
632:
626:
624:
583:
559:
551:
492:William Griswold
145:
94:
54:code refactoring
21:
1966:
1965:
1961:
1960:
1959:
1957:
1956:
1955:
1931:
1930:
1907:
1897:
1884:
1878:
1865:
1859:
1846:
1840:
1827:
1821:
1808:
1767:
1761:
1748:
1745:
1743:Further reading
1740:
1739:
1730:
1729:
1725:
1716:
1715:
1711:
1701:
1700:
1696:
1686:
1684:
1677:
1662:
1661:
1657:
1648:
1647:
1643:
1626:
1620:
1618:
1607:
1606:
1602:
1593:
1591:
1587:
1577:
1576:
1572:
1559:
1558:
1554:
1545:
1541:
1535:Wayback Machine
1526:
1522:
1517:
1513:
1506:
1502:
1484:
1483:
1479:
1470:
1469:
1465:
1456:
1455:
1451:
1436:
1415:
1414:
1410:
1374:
1373:
1369:
1361:
1354:
1344:
1342:
1340:
1325:
1324:
1320:
1305:
1290:
1289:
1285:
1263:
1262:
1258:
1232:
1231:
1227:
1205:
1204:
1200:
1185:
1164:
1163:
1159:
1144:
1121:
1120:
1116:
1109:
1088:
1087:
1078:
1042:
1041:
1037:
1027:
1026:
1022:
1015:
1002:
1001:
997:
990:
968:
967:
960:
950:
949:
942:
937:
904:Obfuscated code
875:
705:plugin for the
675:Eclipse based:
647:
636:
630:
627:
584:
582:
572:
560:
549:
480:
444:While the term
442:
434:clone detection
360:Generalize type
310:
267:
250:
235:as they occur.
218:
197:design patterns
187:Maintainability
180:
152:
146:
140:
128:vulnerabilities
97:maintainability
92:
50:software design
42:
35:
28:
23:
22:
15:
12:
11:
5:
1964:
1962:
1954:
1953:
1948:
1943:
1933:
1932:
1929:
1928:
1919:
1914:
1906:
1905:External links
1903:
1902:
1901:
1895:
1882:
1876:
1863:
1857:
1844:
1838:
1825:
1819:
1806:
1780:(2): 126–139.
1765:
1759:
1744:
1741:
1738:
1737:
1723:
1709:
1694:
1675:
1666:Thinking Forth
1655:
1641:
1600:
1570:
1552:
1539:
1520:
1511:
1500:
1477:
1463:
1449:
1434:
1408:
1367:
1352:
1338:
1318:
1304:978-0201485677
1303:
1283:
1256:
1225:
1214:(2): 105–119.
1198:
1183:
1157:
1142:
1114:
1107:
1076:
1035:
1020:
1014:978-0128013977
1013:
995:
988:
970:Fowler, Martin
958:
939:
938:
936:
933:
932:
931:
926:
921:
916:
911:
906:
901:
896:
891:
886:
881:
874:
871:
870:
869:
863:
849:
839:
838:
837:
831:
822:
812:
802:
792:
791:
790:
783:Android Studio
780:
770:
760:
750:
740:
730:
717:
712:
711:
710:
696:
686:
673:
653:Many software
649:
648:
563:
561:
554:
548:
545:
530:Thinking Forth
496:William Opdyke
484:William Opdyke
479:
476:
441:
438:
437:
436:
430:
429:
428:
422:
412:
409:
408:or source file
399:
398:
397:
386:
380:
374:
373:
372:
366:
363:
357:
345:
344:
343:
337:
334:
309:
306:
266:
263:
249:
246:
237:
236:
229:
217:
214:
201:
200:
190:
179:
176:
172:technical debt
151:
148:
138:
73:non-functional
60:—changing the
26:
24:
14:
13:
10:
9:
6:
4:
3:
2:
1963:
1952:
1949:
1947:
1944:
1942:
1939:
1938:
1936:
1927:
1923:
1920:
1918:
1915:
1912:
1909:
1908:
1904:
1898:
1892:
1888:
1883:
1879:
1873:
1869:
1864:
1860:
1854:
1850:
1845:
1841:
1835:
1831:
1826:
1822:
1816:
1812:
1807:
1803:
1799:
1795:
1791:
1787:
1783:
1779:
1775:
1771:
1766:
1762:
1756:
1752:
1747:
1746:
1742:
1733:
1727:
1724:
1719:
1713:
1710:
1705:
1698:
1695:
1682:
1678:
1676:0-9764587-0-5
1672:
1668:
1667:
1659:
1656:
1651:
1645:
1642:
1637:
1631:
1616:
1615:
1611:(June 1992).
1610:
1604:
1601:
1586:
1585:
1581:(July 1991).
1580:
1574:
1571:
1566:
1562:
1556:
1553:
1549:
1543:
1540:
1536:
1532:
1529:
1524:
1521:
1515:
1512:
1509:
1504:
1501:
1496:
1492:
1488:
1481:
1478:
1473:
1467:
1464:
1459:
1453:
1450:
1445:
1441:
1437:
1431:
1427:
1423:
1419:
1412:
1409:
1404:
1400:
1395:
1390:
1386:
1382:
1378:
1371:
1368:
1365:
1359:
1357:
1353:
1341:
1339:9781491954546
1335:
1331:
1330:
1322:
1319:
1314:
1310:
1306:
1300:
1296:
1295:
1287:
1284:
1279:
1275:
1271:
1267:
1260:
1257:
1252:
1248:
1244:
1240:
1236:
1229:
1226:
1221:
1217:
1213:
1209:
1202:
1199:
1194:
1190:
1186:
1180:
1176:
1172:
1168:
1161:
1158:
1153:
1149:
1145:
1139:
1134:
1129:
1125:
1118:
1115:
1110:
1104:
1100:
1096:
1092:
1085:
1083:
1081:
1077:
1072:
1068:
1063:
1058:
1054:
1050:
1046:
1039:
1036:
1031:
1024:
1021:
1016:
1010:
1006:
999:
996:
991:
985:
981:
977:
976:
971:
965:
963:
959:
954:
947:
945:
941:
934:
930:
927:
925:
922:
920:
917:
915:
912:
910:
907:
905:
902:
900:
897:
895:
892:
890:
887:
885:
882:
880:
877:
876:
872:
867:
864:
861:
857:
853:
850:
847:
843:
840:
835:
834:Visual Assist
832:
829:
828:Visual Studio
826:
825:
823:
820:
819:Ralph Johnson
816:
813:
810:
806:
803:
800:
796:
793:
788:
784:
781:
778:
774:
771:
768:
764:
761:
758:
754:
751:
748:
744:
743:IntelliJ IDEA
741:
738:
734:
731:
728:
724:
721:
720:
718:
716:
713:
708:
704:
700:
697:
694:
690:
687:
684:
680:
677:
676:
674:
671:
668:
667:
666:
664:
660:
656:
645:
642:
634:
623:
620:
616:
613:
609:
606:
602:
599:
595:
592: –
591:
587:
586:Find sources:
580:
576:
570:
569:
564:This section
562:
558:
553:
552:
546:
544:
541:
539:
534:
532:
531:
526:
522:
517:
515:
511:
510:Martin Fowler
507:
505:
501:
497:
493:
489:
488:Ralph Johnson
485:
477:
475:
473:
470:
466:
461:
459:
455:
451:
447:
439:
435:
431:
427:
423:
421:
417:
414:Pull up – in
413:
410:
407:
403:
402:
400:
395:
391:
387:
384:
383:Extract class
381:
378:
377:
375:
371:
367:
364:
361:
358:
355:
352:
351:
350:
346:
341:
338:
335:
332:
329:
328:
327:
326:understanding
323:
322:
321:
319:
315:
314:Martin Fowler
307:
305:
303:
299:
295:
291:
286:
284:
280:
276:
275:atomic commit
272:
264:
262:
259:
254:
247:
245:
243:
234:
230:
227:
223:
222:
221:
215:
213:
211:
207:
198:
194:
193:Extensibility
191:
188:
185:
184:
183:
177:
175:
173:
167:
165:
161:
157:
149:
144:
137:
132:
129:
125:
121:
117:
112:
110:
109:extensibility
106:
102:
98:
91:
87:
83:
79:
78:functionality
75:
74:
69:
65:
64:
59:
55:
51:
47:
40:
33:
19:
1886:
1867:
1848:
1829:
1810:
1777:
1773:
1750:
1726:
1712:
1697:
1685:. Retrieved
1681:the original
1665:
1658:
1644:
1619:. Retrieved
1613:
1603:
1592:. Retrieved
1583:
1573:
1564:
1555:
1547:
1542:
1523:
1514:
1503:
1486:
1480:
1466:
1452:
1417:
1411:
1384:
1380:
1370:
1343:. Retrieved
1328:
1321:
1293:
1286:
1269:
1265:
1259:
1234:
1228:
1211:
1207:
1201:
1166:
1160:
1123:
1117:
1090:
1052:
1048:
1038:
1029:
1023:
1004:
998:
974:
952:
909:Prefactoring
739:, C and C++)
652:
637:
628:
618:
611:
604:
597:
585:
573:Please help
568:verification
565:
542:
535:
528:
518:
513:
508:
481:
462:
453:
445:
443:
370:polymorphism
318:context menu
311:
287:
268:
255:
251:
238:
219:
202:
181:
168:
163:
153:
142:
134:
115:
113:
105:object model
101:architecture
84:and reduced
71:
61:
53:
43:
1922:Refactoring
1630:cite thesis
884:Code review
856:Objective-C
737:Objective-C
707:Eclipse IDE
446:refactoring
349:abstraction
281:, known as
242:code smells
233:code smells
164:refactoring
107:to improve
90:source code
82:readability
58:source code
1935:Categories
1621:2008-02-12
1594:2011-12-24
1030:Clean Code
935:References
866:Qt Creator
795:JDeveloper
767:JavaScript
601:newspapers
525:Leo Brodie
432:Automatic
420:superclass
308:Techniques
296:and other
279:repository
271:unit tests
269:Automatic
248:Challenges
156:code smell
150:Motivation
86:complexity
18:Refactored
1889:. Packt.
1802:206778272
1794:0098-5589
1272:: 56–71.
1152:204754665
815:Smalltalk
723:Resharper
631:July 2018
394:functions
160:duplicate
63:factoring
1870:. Wrox.
1851:. Wrox.
1531:Archived
1489:. IEEE.
1444:18160599
1313:41017370
1193:13147063
1071:32499413
972:(1999).
873:See also
854:(for C,
842:Wing IDE
805:NetBeans
789:and C++)
773:PhpStorm
763:WebStorm
538:function
527:'s book
512:'s book
469:Synopsys
465:VHDL-AMS
426:subclass
283:monorepo
210:hardware
206:software
178:Benefits
139:—
68:software
1345:26 July
1251:3485526
1049:Science
753:PyCharm
733:AppCode
703:Fortran
699:Photran
679:Eclipse
655:editors
615:scholar
478:History
265:Testing
208:to the
1926:Curlie
1893:
1874:
1855:
1836:
1817:
1800:
1792:
1757:
1673:
1567:. ACM.
1442:
1432:
1403:505075
1401:
1336:
1311:
1301:
1249:
1191:
1181:
1150:
1140:
1105:
1069:
1011:
986:
858:, and
846:Python
757:Python
693:Python
617:
610:
603:
596:
588:
504:method
472:fellow
390:method
226:smells
1798:S2CID
1687:3 May
1588:(PDF)
1440:S2CID
1399:S2CID
1247:S2CID
1189:S2CID
1148:S2CID
860:Swift
852:Xcode
844:(for
807:(for
797:(for
785:(for
775:(for
765:(for
755:(for
745:(for
735:(for
725:(for
691:(for
689:PyDev
681:(for
622:JSTOR
608:books
521:Forth
406:class
93:'
70:(its
1891:ISBN
1872:ISBN
1853:ISBN
1834:ISBN
1815:ISBN
1790:ISSN
1755:ISBN
1689:2020
1671:ISBN
1636:link
1430:ISBN
1347:2018
1334:ISBN
1309:OCLC
1299:ISBN
1179:ISBN
1138:ISBN
1103:ISBN
1067:PMID
1009:ISBN
984:ISBN
980:63ff
809:Java
799:Java
787:Java
747:Java
683:Java
659:IDEs
657:and
594:news
486:and
124:bugs
48:and
1924:at
1782:doi
1491:doi
1422:doi
1389:doi
1274:doi
1270:128
1239:doi
1216:doi
1171:doi
1128:doi
1095:doi
1057:doi
1053:368
777:PHP
701:(a
577:by
126:or
103:or
44:In
1937::
1796:.
1788:.
1778:30
1776:.
1772:.
1632:}}
1628:{{
1438:.
1428:.
1397:.
1383:.
1379:.
1355:^
1307:.
1268:.
1245:.
1212:61
1210:.
1187:.
1177:.
1146:.
1136:.
1101:.
1079:^
1065:.
1051:.
1047:.
982:.
961:^
943:^
727:C#
665:.
304:.
285:.
95:s
52:,
1899:.
1880:.
1861:.
1842:.
1823:.
1804:.
1784::
1763:.
1734:.
1720:.
1706:.
1691:.
1652:.
1638:)
1624:.
1597:.
1497:.
1493::
1474:.
1460:.
1446:.
1424::
1405:.
1391::
1385:9
1349:.
1315:.
1280:.
1276::
1253:.
1241::
1222:.
1218::
1195:.
1173::
1154:.
1130::
1111:.
1097::
1073:.
1059::
1017:.
992:.
862:)
848:)
821:.
811:)
801:)
779:)
769:)
759:)
749:)
729:)
709:)
695:)
644:)
638:(
633:)
629:(
619:·
612:·
605:·
598:·
571:.
396:.
41:.
34:.
20:)
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.