Extracting reusable functions by flow graph based program slicing
An alternative approach to developing reusable components from scratch is to recover them from existing systems. We apply program slicing, a program decomposition method, to the problem of extracting reusable functions from ill structured programs. As with conventional slicing first described by M....
Gespeichert in:
Veröffentlicht in: | IEEE transactions on software engineering 1997-04, Vol.23 (4), p.246-259 |
---|---|
Hauptverfasser: | , |
Format: | Artikel |
Sprache: | eng |
Schlagworte: | |
Online-Zugang: | Volltext bestellen |
Tags: |
Tag hinzufügen
Keine Tags, Fügen Sie den ersten Tag hinzu!
|
container_end_page | 259 |
---|---|
container_issue | 4 |
container_start_page | 246 |
container_title | IEEE transactions on software engineering |
container_volume | 23 |
creator | Lanubile, F. Visaggio, G. |
description | An alternative approach to developing reusable components from scratch is to recover them from existing systems. We apply program slicing, a program decomposition method, to the problem of extracting reusable functions from ill structured programs. As with conventional slicing first described by M. Weiser (1984), a slice is obtained by iteratively solving data flow equations based on a program flow graph. We extend the definition of program slice to a transform slice, one that includes statements which contribute directly or indirectly to transform a set of input variables into a set of output variables. Unlike conventional program slicing, these statements do not include either the statements necessary to get input data or the statements which test the binding conditions of the function. Transform slicing presupposes the knowledge that a function is performed in the code and its partial specification, only in terms of input and output data. Using domain knowledge we discuss how to formulate expectations of the functions implemented in the code. In addition to the input/output parameters of the function, the slicing criterion depends on an initial statement, which is difficult to obtain for large programs. Using the notions of decomposition slice and concept validation we show how to produce a set of candidate functions, which are independent of line numbers but must be evaluated with respect to the expected behavior. Although human interaction is required, the limited size of candidate functions makes this task easier than looking for the last function instruction in the original source code. |
doi_str_mv | 10.1109/32.588543 |
format | Article |
fullrecord | <record><control><sourceid>proquest_RIE</sourceid><recordid>TN_cdi_proquest_miscellaneous_27433563</recordid><sourceformat>XML</sourceformat><sourcesystem>PC</sourcesystem><ieee_id>588543</ieee_id><sourcerecordid>27433563</sourcerecordid><originalsourceid>FETCH-LOGICAL-c364t-9b80208192b707b1865826ab41ff030d89f82350230a2cb7242d65553f6e85b83</originalsourceid><addsrcrecordid>eNqFkL1PwzAQxS0EEqUwsDJFCCExpJztnGOPVVU-pEosMEd2apdUaVLsRND_HlepOrAwne7ud-_0HiHXFCaUgnrkbIJSYsZPyIgqrlKODE7JCEDJFFGqc3IRwhoAMM9xRKbzn87rsquaVeJtH7SpbeL6Jk7aJiRml7i6_U5WXm8_E6ODXSZb38Z2k4S6KuPZJTlzug726lDH5ONp_j57SRdvz6-z6SItuci6VBkJDCRVzOSQGyoFSia0yahzwGEplZOMIzAOmpUmZxlbCkTkTliJRvIxuR904_-v3oau2FShtHWtG9v2oWCSUcpE_j-YZ5yj4BG8_QOu29430URBFWKOwPdqDwNU-jYEb12x9dVG-11BodhHXnBWDJFH9u4gqEOpa-d1U1bheMBENE1FxG4GrLLWHrcHjV8F8oV_</addsrcrecordid><sourcetype>Aggregation Database</sourcetype><iscdi>true</iscdi><recordtype>article</recordtype><pqid>195575037</pqid></control><display><type>article</type><title>Extracting reusable functions by flow graph based program slicing</title><source>IEEE Electronic Library (IEL)</source><creator>Lanubile, F. ; Visaggio, G.</creator><creatorcontrib>Lanubile, F. ; Visaggio, G.</creatorcontrib><description>An alternative approach to developing reusable components from scratch is to recover them from existing systems. We apply program slicing, a program decomposition method, to the problem of extracting reusable functions from ill structured programs. As with conventional slicing first described by M. Weiser (1984), a slice is obtained by iteratively solving data flow equations based on a program flow graph. We extend the definition of program slice to a transform slice, one that includes statements which contribute directly or indirectly to transform a set of input variables into a set of output variables. Unlike conventional program slicing, these statements do not include either the statements necessary to get input data or the statements which test the binding conditions of the function. Transform slicing presupposes the knowledge that a function is performed in the code and its partial specification, only in terms of input and output data. Using domain knowledge we discuss how to formulate expectations of the functions implemented in the code. In addition to the input/output parameters of the function, the slicing criterion depends on an initial statement, which is difficult to obtain for large programs. Using the notions of decomposition slice and concept validation we show how to produce a set of candidate functions, which are independent of line numbers but must be evaluated with respect to the expected behavior. Although human interaction is required, the limited size of candidate functions makes this task easier than looking for the last function instruction in the original source code.</description><identifier>ISSN: 0098-5589</identifier><identifier>EISSN: 1939-3520</identifier><identifier>DOI: 10.1109/32.588543</identifier><identifier>CODEN: IESEDJ</identifier><language>eng</language><publisher>New York, NY: IEEE</publisher><subject>Applied sciences ; Code reuse ; Computer science; control theory; systems ; Computer Society ; Data mining ; Data models ; Decomposition ; Equations ; Exact sciences and technology ; Flow graphs ; Input variables ; Legacy systems ; Programming profession ; Reverse engineering ; Software ; Software engineering ; Software quality ; Software reusability ; Software systems ; Studies ; Transforms ; Variables</subject><ispartof>IEEE transactions on software engineering, 1997-04, Vol.23 (4), p.246-259</ispartof><rights>1997 INIST-CNRS</rights><rights>Copyright Institute of Electrical and Electronics Engineers, Inc. (IEEE) Apr 1997</rights><lds50>peer_reviewed</lds50><woscitedreferencessubscribed>false</woscitedreferencessubscribed><citedby>FETCH-LOGICAL-c364t-9b80208192b707b1865826ab41ff030d89f82350230a2cb7242d65553f6e85b83</citedby><cites>FETCH-LOGICAL-c364t-9b80208192b707b1865826ab41ff030d89f82350230a2cb7242d65553f6e85b83</cites></display><links><openurl>$$Topenurl_article</openurl><openurlfulltext>$$Topenurlfull_article</openurlfulltext><thumbnail>$$Tsyndetics_thumb_exl</thumbnail><linktohtml>$$Uhttps://ieeexplore.ieee.org/document/588543$$EHTML$$P50$$Gieee$$H</linktohtml><link.rule.ids>309,310,314,776,780,785,786,792,23909,23910,25118,27901,27902,54733</link.rule.ids><linktorsrc>$$Uhttps://ieeexplore.ieee.org/document/588543$$EView_record_in_IEEE$$FView_record_in_$$GIEEE</linktorsrc><backlink>$$Uhttp://pascal-francis.inist.fr/vibad/index.php?action=getRecordDetail&idt=2686516$$DView record in Pascal Francis$$Hfree_for_read</backlink></links><search><creatorcontrib>Lanubile, F.</creatorcontrib><creatorcontrib>Visaggio, G.</creatorcontrib><title>Extracting reusable functions by flow graph based program slicing</title><title>IEEE transactions on software engineering</title><addtitle>TSE</addtitle><description>An alternative approach to developing reusable components from scratch is to recover them from existing systems. We apply program slicing, a program decomposition method, to the problem of extracting reusable functions from ill structured programs. As with conventional slicing first described by M. Weiser (1984), a slice is obtained by iteratively solving data flow equations based on a program flow graph. We extend the definition of program slice to a transform slice, one that includes statements which contribute directly or indirectly to transform a set of input variables into a set of output variables. Unlike conventional program slicing, these statements do not include either the statements necessary to get input data or the statements which test the binding conditions of the function. Transform slicing presupposes the knowledge that a function is performed in the code and its partial specification, only in terms of input and output data. Using domain knowledge we discuss how to formulate expectations of the functions implemented in the code. In addition to the input/output parameters of the function, the slicing criterion depends on an initial statement, which is difficult to obtain for large programs. Using the notions of decomposition slice and concept validation we show how to produce a set of candidate functions, which are independent of line numbers but must be evaluated with respect to the expected behavior. Although human interaction is required, the limited size of candidate functions makes this task easier than looking for the last function instruction in the original source code.</description><subject>Applied sciences</subject><subject>Code reuse</subject><subject>Computer science; control theory; systems</subject><subject>Computer Society</subject><subject>Data mining</subject><subject>Data models</subject><subject>Decomposition</subject><subject>Equations</subject><subject>Exact sciences and technology</subject><subject>Flow graphs</subject><subject>Input variables</subject><subject>Legacy systems</subject><subject>Programming profession</subject><subject>Reverse engineering</subject><subject>Software</subject><subject>Software engineering</subject><subject>Software quality</subject><subject>Software reusability</subject><subject>Software systems</subject><subject>Studies</subject><subject>Transforms</subject><subject>Variables</subject><issn>0098-5589</issn><issn>1939-3520</issn><fulltext>true</fulltext><rsrctype>article</rsrctype><creationdate>1997</creationdate><recordtype>article</recordtype><sourceid>8G5</sourceid><sourceid>BENPR</sourceid><sourceid>GUQSH</sourceid><sourceid>M2O</sourceid><recordid>eNqFkL1PwzAQxS0EEqUwsDJFCCExpJztnGOPVVU-pEosMEd2apdUaVLsRND_HlepOrAwne7ud-_0HiHXFCaUgnrkbIJSYsZPyIgqrlKODE7JCEDJFFGqc3IRwhoAMM9xRKbzn87rsquaVeJtH7SpbeL6Jk7aJiRml7i6_U5WXm8_E6ODXSZb38Z2k4S6KuPZJTlzug726lDH5ONp_j57SRdvz6-z6SItuci6VBkJDCRVzOSQGyoFSia0yahzwGEplZOMIzAOmpUmZxlbCkTkTliJRvIxuR904_-v3oau2FShtHWtG9v2oWCSUcpE_j-YZ5yj4BG8_QOu29430URBFWKOwPdqDwNU-jYEb12x9dVG-11BodhHXnBWDJFH9u4gqEOpa-d1U1bheMBENE1FxG4GrLLWHrcHjV8F8oV_</recordid><startdate>19970401</startdate><enddate>19970401</enddate><creator>Lanubile, F.</creator><creator>Visaggio, G.</creator><general>IEEE</general><general>Institute of Electrical and Electronics Engineers</general><general>IEEE Computer Society</general><scope>IQODW</scope><scope>AAYXX</scope><scope>CITATION</scope><scope>3V.</scope><scope>7WY</scope><scope>7WZ</scope><scope>7X7</scope><scope>7XB</scope><scope>87Z</scope><scope>88E</scope><scope>88F</scope><scope>88I</scope><scope>88K</scope><scope>8AL</scope><scope>8FE</scope><scope>8FG</scope><scope>8FI</scope><scope>8FJ</scope><scope>8FK</scope><scope>8FL</scope><scope>8G5</scope><scope>ABJCF</scope><scope>ABUWG</scope><scope>AFKRA</scope><scope>ARAPS</scope><scope>AZQEC</scope><scope>BENPR</scope><scope>BEZIV</scope><scope>BGLVJ</scope><scope>CCPQU</scope><scope>DWQXO</scope><scope>FRNLG</scope><scope>FYUFA</scope><scope>F~G</scope><scope>GHDGH</scope><scope>GNUQQ</scope><scope>GUQSH</scope><scope>HCIFZ</scope><scope>JQ2</scope><scope>K60</scope><scope>K6~</scope><scope>K7-</scope><scope>K9.</scope><scope>L.-</scope><scope>L6V</scope><scope>M0C</scope><scope>M0N</scope><scope>M0S</scope><scope>M1P</scope><scope>M1Q</scope><scope>M2O</scope><scope>M2P</scope><scope>M2T</scope><scope>M7S</scope><scope>MBDVC</scope><scope>P5Z</scope><scope>P62</scope><scope>PQBIZ</scope><scope>PQBZA</scope><scope>PQEST</scope><scope>PQQKQ</scope><scope>PQUKI</scope><scope>PRINS</scope><scope>PTHSS</scope><scope>Q9U</scope><scope>7SC</scope><scope>8FD</scope><scope>L7M</scope><scope>L~C</scope><scope>L~D</scope></search><sort><creationdate>19970401</creationdate><title>Extracting reusable functions by flow graph based program slicing</title><author>Lanubile, F. ; Visaggio, G.</author></sort><facets><frbrtype>5</frbrtype><frbrgroupid>cdi_FETCH-LOGICAL-c364t-9b80208192b707b1865826ab41ff030d89f82350230a2cb7242d65553f6e85b83</frbrgroupid><rsrctype>articles</rsrctype><prefilter>articles</prefilter><language>eng</language><creationdate>1997</creationdate><topic>Applied sciences</topic><topic>Code reuse</topic><topic>Computer science; control theory; systems</topic><topic>Computer Society</topic><topic>Data mining</topic><topic>Data models</topic><topic>Decomposition</topic><topic>Equations</topic><topic>Exact sciences and technology</topic><topic>Flow graphs</topic><topic>Input variables</topic><topic>Legacy systems</topic><topic>Programming profession</topic><topic>Reverse engineering</topic><topic>Software</topic><topic>Software engineering</topic><topic>Software quality</topic><topic>Software reusability</topic><topic>Software systems</topic><topic>Studies</topic><topic>Transforms</topic><topic>Variables</topic><toplevel>peer_reviewed</toplevel><toplevel>online_resources</toplevel><creatorcontrib>Lanubile, F.</creatorcontrib><creatorcontrib>Visaggio, G.</creatorcontrib><collection>Pascal-Francis</collection><collection>CrossRef</collection><collection>ProQuest Central (Corporate)</collection><collection>ABI/INFORM Collection</collection><collection>ABI/INFORM Global (PDF only)</collection><collection>Health & Medical Collection</collection><collection>ProQuest Central (purchase pre-March 2016)</collection><collection>ABI/INFORM Global (Alumni Edition)</collection><collection>Medical Database (Alumni Edition)</collection><collection>Military Database (Alumni Edition)</collection><collection>Science Database (Alumni Edition)</collection><collection>Telecommunications (Alumni Edition)</collection><collection>Computing Database (Alumni Edition)</collection><collection>ProQuest SciTech Collection</collection><collection>ProQuest Technology Collection</collection><collection>Hospital Premium Collection</collection><collection>Hospital Premium Collection (Alumni Edition)</collection><collection>ProQuest Central (Alumni) (purchase pre-March 2016)</collection><collection>ABI/INFORM Collection (Alumni Edition)</collection><collection>Research Library (Alumni Edition)</collection><collection>Materials Science & Engineering Collection</collection><collection>ProQuest Central (Alumni Edition)</collection><collection>ProQuest Central UK/Ireland</collection><collection>Advanced Technologies & Aerospace Collection</collection><collection>ProQuest Central Essentials</collection><collection>ProQuest Central</collection><collection>Business Premium Collection</collection><collection>Technology Collection</collection><collection>ProQuest One Community College</collection><collection>ProQuest Central Korea</collection><collection>Business Premium Collection (Alumni)</collection><collection>Health Research Premium Collection</collection><collection>ABI/INFORM Global (Corporate)</collection><collection>Health Research Premium Collection (Alumni)</collection><collection>ProQuest Central Student</collection><collection>Research Library Prep</collection><collection>SciTech Premium Collection</collection><collection>ProQuest Computer Science Collection</collection><collection>ProQuest Business Collection (Alumni Edition)</collection><collection>ProQuest Business Collection</collection><collection>Computer Science Database</collection><collection>ProQuest Health & Medical Complete (Alumni)</collection><collection>ABI/INFORM Professional Advanced</collection><collection>ProQuest Engineering Collection</collection><collection>ABI/INFORM Global</collection><collection>Computing Database</collection><collection>Health & Medical Collection (Alumni Edition)</collection><collection>Medical Database</collection><collection>Military Database</collection><collection>Research Library</collection><collection>Science Database</collection><collection>Telecommunications Database</collection><collection>Engineering Database</collection><collection>Research Library (Corporate)</collection><collection>Advanced Technologies & Aerospace Database</collection><collection>ProQuest Advanced Technologies & Aerospace Collection</collection><collection>One Business (ProQuest)</collection><collection>ProQuest One Business (Alumni)</collection><collection>ProQuest One Academic Eastern Edition (DO NOT USE)</collection><collection>ProQuest One Academic</collection><collection>ProQuest One Academic UKI Edition</collection><collection>ProQuest Central China</collection><collection>Engineering Collection</collection><collection>ProQuest Central Basic</collection><collection>Computer and Information Systems Abstracts</collection><collection>Technology Research Database</collection><collection>Advanced Technologies Database with Aerospace</collection><collection>Computer and Information Systems Abstracts Academic</collection><collection>Computer and Information Systems Abstracts Professional</collection><jtitle>IEEE transactions on software engineering</jtitle></facets><delivery><delcategory>Remote Search Resource</delcategory><fulltext>fulltext_linktorsrc</fulltext></delivery><addata><au>Lanubile, F.</au><au>Visaggio, G.</au><format>journal</format><genre>article</genre><ristype>JOUR</ristype><atitle>Extracting reusable functions by flow graph based program slicing</atitle><jtitle>IEEE transactions on software engineering</jtitle><stitle>TSE</stitle><date>1997-04-01</date><risdate>1997</risdate><volume>23</volume><issue>4</issue><spage>246</spage><epage>259</epage><pages>246-259</pages><issn>0098-5589</issn><eissn>1939-3520</eissn><coden>IESEDJ</coden><abstract>An alternative approach to developing reusable components from scratch is to recover them from existing systems. We apply program slicing, a program decomposition method, to the problem of extracting reusable functions from ill structured programs. As with conventional slicing first described by M. Weiser (1984), a slice is obtained by iteratively solving data flow equations based on a program flow graph. We extend the definition of program slice to a transform slice, one that includes statements which contribute directly or indirectly to transform a set of input variables into a set of output variables. Unlike conventional program slicing, these statements do not include either the statements necessary to get input data or the statements which test the binding conditions of the function. Transform slicing presupposes the knowledge that a function is performed in the code and its partial specification, only in terms of input and output data. Using domain knowledge we discuss how to formulate expectations of the functions implemented in the code. In addition to the input/output parameters of the function, the slicing criterion depends on an initial statement, which is difficult to obtain for large programs. Using the notions of decomposition slice and concept validation we show how to produce a set of candidate functions, which are independent of line numbers but must be evaluated with respect to the expected behavior. Although human interaction is required, the limited size of candidate functions makes this task easier than looking for the last function instruction in the original source code.</abstract><cop>New York, NY</cop><pub>IEEE</pub><doi>10.1109/32.588543</doi><tpages>14</tpages></addata></record> |
fulltext | fulltext_linktorsrc |
identifier | ISSN: 0098-5589 |
ispartof | IEEE transactions on software engineering, 1997-04, Vol.23 (4), p.246-259 |
issn | 0098-5589 1939-3520 |
language | eng |
recordid | cdi_proquest_miscellaneous_27433563 |
source | IEEE Electronic Library (IEL) |
subjects | Applied sciences Code reuse Computer science control theory systems Computer Society Data mining Data models Decomposition Equations Exact sciences and technology Flow graphs Input variables Legacy systems Programming profession Reverse engineering Software Software engineering Software quality Software reusability Software systems Studies Transforms Variables |
title | Extracting reusable functions by flow graph based program slicing |
url | https://sfx.bib-bvb.de/sfx_tum?ctx_ver=Z39.88-2004&ctx_enc=info:ofi/enc:UTF-8&ctx_tim=2025-01-30T14%3A09%3A17IST&url_ver=Z39.88-2004&url_ctx_fmt=infofi/fmt:kev:mtx:ctx&rfr_id=info:sid/primo.exlibrisgroup.com:primo3-Article-proquest_RIE&rft_val_fmt=info:ofi/fmt:kev:mtx:journal&rft.genre=article&rft.atitle=Extracting%20reusable%20functions%20by%20flow%20graph%20based%20program%20slicing&rft.jtitle=IEEE%20transactions%20on%20software%20engineering&rft.au=Lanubile,%20F.&rft.date=1997-04-01&rft.volume=23&rft.issue=4&rft.spage=246&rft.epage=259&rft.pages=246-259&rft.issn=0098-5589&rft.eissn=1939-3520&rft.coden=IESEDJ&rft_id=info:doi/10.1109/32.588543&rft_dat=%3Cproquest_RIE%3E27433563%3C/proquest_RIE%3E%3Curl%3E%3C/url%3E&disable_directlink=true&sfx.directlink=off&sfx.report_link=0&rft_id=info:oai/&rft_pqid=195575037&rft_id=info:pmid/&rft_ieee_id=588543&rfr_iscdi=true |