Knowledge

Code refactoring

Source 📝

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
1933: 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. 524: 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
119: 543:
Refactorings can also be reconstructed posthoc to produce concise descriptions of complex software changes recorded in software repositories like CVS or SVN.
1635: 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
529: 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
1507: 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).
722: 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". 698: 1327: 494:'s 1991 Ph.D. dissertation is one of the first major academic works on refactoring functional and procedural programs, followed by 325: 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: 1894: 1875: 1856: 1837: 1818: 1758: 1433: 1182: 1141: 1124:
Proceedings of the 11th International Joint Conference on Knowledge Discovery, Knowledge Engineering and Knowledge Management
1106: 987: 593: 817:: Most dialects include powerful refactoring tools. Many use the original refactoring browser produced in the early '90s by 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
600: 1612: 1302: 1012: 818: 669: 658: 487: 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 1674: 1518:
Kaiping Zeng, Sorin A. Huss, "Architecture refinements by code refactoring of behavioral VHDL-AMS models". ISCAS 2006
1337: 1233:
Hassan, Ahmed E.; Xie, Tao (November 2010). "Software intelligence: the future of mining software engineering data".
969: 640: 574: 509: 313: 196: 1664: 893: 62: 31: 607: 369: 166:
the source code, or transforming it into a new form that behaves the same as before but that no longer "smells".
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
1967: 726: 578: 348: 482:
The first known use of the term "refactoring" in the published literature was in a September, 1990 article by
845: 756: 692: 589: 449: 419: 1962: 859: 520: 301: 278: 1471: 808: 798: 786: 746: 682: 425: 415: 17: 1565:
Proceedings of the Symposium on Object Oriented Programming Emphasizing Practical Applications (SOOPPA)
1457: 297: 72: 1169:. 2017 IEEE International Conference on Software Maintenance and Evolution (ICSME). pp. 261–272. 1957: 1938: 389: 127: 1617:(Ph.D. thesis). University of Illinois at Urbana-Champaign. Archived from the original on 2019-12-16 405: 330: 209: 1416:
Donglin, Linag; Harrold, M. J. (November 2008). "Slicing objects using system dependence graphs".
1089:
Fraivert, Dov; Lorenz, David H. (2022). "Language Support for Refactorability Decay Prevention".
928: 567: 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
918: 537: 499: 393: 289: 77: 614: 274: 913: 339: 257: 100: 85: 38: 1649: 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
1629: 923: 888: 878: 457: 342:- reverse engineers the initial state to understand existing intra-application dependencies 45: 1235:
Proceedings of the FSE/SDP Workshop on Future of Software Engineering Research (FoSER '10)
212:
on which it runs, for example, to take advantage of parallel processors and vector units.
8: 979: 973: 898: 672:(Implements large-scale refactoring for C, C++, C#, COBOL, Java, PHP and other languages) 662: 359: 353: 293: 174:; on the other hand, refactoring is one of the primary means of repaying technical debt. 1528: 1797: 1582: 1439: 1398: 1246: 1188: 1147: 714: 706: 678: 1219: 1890: 1871: 1852: 1833: 1814: 1801: 1789: 1754: 1670: 1429: 1333: 1308: 1298: 1178: 1151: 1137: 1102: 1066: 1008: 983: 503: 288:
With unit testing in place, refactoring is then an iterative cycle of making a small
195:. It is easier to extend the capabilities of the application if it uses recognizable 1731: 1703: 1443: 1192: 1781: 1490: 1421: 1388: 1273: 1250: 1238: 1215: 1170: 1127: 1094: 1056: 1418:
Proceedings, International Conference on Software Maintenance (Cat. No. 98CB36272)
1402: 1206:
van Gurp, Jilles; Bosch, Jan (March 2002). "Design erosion: problems and causes".
1928: 1534: 1292: 903: 433: 186: 96: 49: 231:
Corrective refactoring – a subsequent developer performs refactoring to correct
1608: 1560: 782: 495: 483: 171: 159: 1494: 1277: 1951: 1923: 1793: 1785: 1578: 1425: 1132: 833: 827: 742: 491: 382: 192: 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
108: 37:
This article is about a behaviour-preserving change. Not to be confused with
1363: 1312: 1242: 1098: 1061: 1044: 519:
The terms "factoring" and "factoring out" have been used in this way in the
1910: 1070: 908: 317: 270: 123: 104: 27:
Restructuring existing computer code without changing its external behavior
1174: 883: 855: 736: 654: 244:
form, a subsequent developer carries out the actual refactoring action.
89: 81: 57: 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
865: 794: 766: 581: in this section. Unsourced material may be challenged and removed. 241: 232: 225: 155: 199:, and it provides some flexibility where none before may have existed. 814: 506:
and indicators for when you should (or should not) apply the method.
1484: 556: 1769: 1375:
Ferrante, Jeanne; Ottenstein, Karl J.; Warren, Joe D. (July 1987).
841: 804: 772: 762: 468: 464: 282: 205: 67: 490:. Although refactoring code has been done informally for decades, 836:(addon for Visual Studio with refactoring support for C# and C++) 752: 732: 702: 80:. Potential advantages of refactoring may include improved code 1942: 1167:
Revisiting Turnover-Induced Knowledge Loss in Software Projects
471: 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" 114:
Typically, refactoring applies a series of standardized basic
1042: 851: 688: 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 1695: 776: 523:
community since at least the early 1980s. Chapter Six of
1374: 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
1559: 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. 1263: 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. 1949: 1634:: CS1 maint: bot: original URL status unknown ( 1458:"Replace type-checking code with State/Strategy" 1571: 1353: 1164: 1121: 154:Refactoring is usually motivated by noticing a 1415: 1088: 1084: 1082: 1080: 365:Replace type-checking code with state/strategy 220:There are two possible times for refactoring. 1601: 1205: 1002: 546: 256:Code refactoring activities are secured with 215: 1077: 946: 944: 1917:Martin Fowler's homepage about refactoring 1868:Professional Refactoring in C# and ASP.NET 1865: 1846: 1767: 1827: 1774:IEEE Transactions on Software Engineering 1642: 1392: 1232: 1131: 1060: 950: 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 1932:) is being considered for deletion. See 1849:Professional Refactoring in Visual Basic 1808: 1590:(Ph.D. thesis). University of Washington 1577: 1553: 964: 962: 941: 1884: 1472:"Replace conditional with polymorphism" 1332:. "O'Reilly Media, Inc.". p. 301. 1003:Suryanarayana, Girish (November 2014). 439: 14: 1950: 1768:Mens, T.; Tourwe, T. (February 2004). 1662: 1614:Refactoring Object-Oriented Frameworks 1607: 1290: 1027: 1005:Refactoring for Software Design Smells 968: 1732:"Overview | Qt Creator Documentation" 1325: 1021: 959: 1811:Working Effectively with Legacy Code 1748: 579:adding citations to reliable sources 550: 533:(1984) is dedicated to the subject. 1887:Refactoring with Visual Studio 2010 1701: 1550:, Kluwer Academic Publishers, 1999. 1362:(these are only about OOP however). 452:has also been refactored. The term 24: 1770:"A survey of software refactoring" 1742: 670:DMS Software Reengineering Toolkit 76:attributes), while preserving its 25: 1979: 1936:to help reach a consensus. › 1904: 1007:. Morgan Kaufmann. p. 258. 894:Decomposition (computer science) 555: 32:Knowledge:Refactoring talk pages 1724: 1710: 1656: 1540: 1521: 1512: 1501: 1478: 1464: 1450: 1409: 1368: 1319: 1297:. Reading, MA: Addison-Wesley. 1284: 1266:Journal of Systems and Software 1257: 1226: 1208:Journal of Systems and Software 566:needs additional citations for 347:Techniques that allow for more 324:Techniques that allow for more 1199: 1158: 1115: 1036: 996: 868:(for C++, Objective-C and QML) 450:hardware description languages 424:Push down – in OOP, move to a 13: 1: 1921: 1326:Smart, John Ferguson (2008). 1220:10.1016/S0164-1212(01)00152-2 934: 516:is the canonical reference. 307: 247: 149: 1866:Arsenovski, Danijel (2009). 1847:Arsenovski, Danijel (2008). 1809:Feathers, Michael C (2004). 7: 1704:"What is code refactoring?" 978:. Addison-Wesley. pp.  872: 416:object-oriented programming 177: 10: 1984: 1828:Kerievsky, Joshua (2004). 1420:. IEEE. pp. 319–349. 951:Kerievsky, Joshua (2004). 547:Automated code refactoring 477: 302:software development cycle 298:agile software development 264: 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 1934:templates for discussion 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: 1968:Technology neologisms 1175:10.1109/ICSME.2017.64 914:Rewrite (programming) 824:Visual Studio based: 458:programming languages 340:Software intelligence 258:software intelligence 133: 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 1963: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 1975: 1958: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: 1983: 1982: 1978: 1977: 1976: 1974: 1973: 1972: 1948: 1947: 1937: 1907: 1897: 1878: 1859: 1840: 1821: 1761: 1745: 1743:Further reading 1740: 1739: 1730: 1729: 1725: 1716: 1715: 1711: 1700: 1696: 1686: 1684: 1677: 1661: 1657: 1648: 1647: 1643: 1627: 1626: 1620: 1618: 1606: 1602: 1593: 1591: 1587: 1576: 1572: 1558: 1554: 1545: 1541: 1535:Wayback Machine 1526: 1522: 1517: 1513: 1506: 1502: 1483: 1479: 1470: 1469: 1465: 1456: 1455: 1451: 1436: 1414: 1410: 1373: 1369: 1361: 1354: 1344: 1342: 1340: 1324: 1320: 1305: 1289: 1285: 1262: 1258: 1231: 1227: 1204: 1200: 1185: 1163: 1159: 1144: 1120: 1116: 1109: 1087: 1078: 1041: 1037: 1026: 1022: 1015: 1001: 997: 990: 967: 960: 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: 1981: 1971: 1970: 1965: 1960: 1946: 1945: 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: 9: 6: 4: 3: 2: 1980: 1969: 1966: 1964: 1961: 1959: 1956: 1955: 1953: 1944: 1940: 1935: 1931: 1930: 1925: 1920: 1918: 1915: 1912: 1909: 1908: 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: 1733: 1727: 1719: 1713: 1705: 1698: 1682: 1678: 1676:0-9764587-0-5 1672: 1668: 1667: 1659: 1651: 1645: 1637: 1631: 1616: 1615: 1611:(June 1992). 1610: 1604: 1586: 1585: 1581:(July 1991). 1580: 1574: 1566: 1562: 1556: 1549: 1543: 1536: 1532: 1529: 1524: 1515: 1509: 1504: 1496: 1492: 1488: 1481: 1473: 1467: 1459: 1453: 1445: 1441: 1437: 1431: 1427: 1423: 1419: 1412: 1404: 1400: 1395: 1390: 1386: 1382: 1378: 1371: 1365: 1359: 1357: 1341: 1339:9781491954546 1335: 1331: 1330: 1322: 1314: 1310: 1306: 1300: 1296: 1295: 1287: 1279: 1275: 1271: 1267: 1260: 1252: 1248: 1244: 1240: 1236: 1229: 1221: 1217: 1213: 1209: 1202: 1194: 1190: 1186: 1180: 1176: 1172: 1168: 1161: 1153: 1149: 1145: 1139: 1134: 1129: 1125: 1118: 1110: 1104: 1100: 1096: 1092: 1085: 1083: 1081: 1072: 1068: 1063: 1058: 1054: 1050: 1046: 1039: 1031: 1024: 1016: 1010: 1006: 999: 991: 985: 981: 977: 976: 971: 965: 963: 954: 947: 945: 940: 930: 927: 925: 922: 920: 917: 915: 912: 910: 907: 905: 902: 900: 897: 895: 892: 890: 887: 885: 882: 880: 877: 876: 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: 544: 541: 539: 534: 532: 531: 526: 522: 517: 515: 511: 510:Martin Fowler 507: 505: 501: 497: 493: 489: 488:Ralph Johnson 485: 475: 473: 470: 466: 461: 459: 455: 451: 447: 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 305: 303: 299: 295: 291: 286: 284: 280: 276: 275:atomic commit 272: 262: 259: 254: 245: 243: 234: 230: 227: 223: 222: 221: 213: 211: 207: 198: 194: 193:Extensibility 191: 188: 185: 184: 183: 175: 173: 167: 165: 161: 157: 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: 1927: 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: 1939:Refactoring 1922:‹ The 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 18:Refactoring 1952: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 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 1924:template 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 1926:below ( 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 1943:Curlie 1929: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 1941: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 1954:: 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:)

Index

Refactoring
Knowledge:Refactoring talk pages
Rewrite (programming)
computer programming
software design
source code
factoring
software
non-functional
functionality
readability
complexity
source code
maintainability
architecture
object model
extensibility
development environments
bugs
vulnerabilities
code smell
duplicate
technical debt
Maintainability
Extensibility
design patterns
software
hardware
smells
code smells

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.