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....

Ausführliche Beschreibung

Gespeichert in:
Bibliographische Detailangaben
Veröffentlicht in:IEEE transactions on software engineering 1997-04, Vol.23 (4), p.246-259
Hauptverfasser: Lanubile, F., Visaggio, G.
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&amp;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 &amp; 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 &amp; Engineering Collection</collection><collection>ProQuest Central (Alumni Edition)</collection><collection>ProQuest Central UK/Ireland</collection><collection>Advanced Technologies &amp; 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 &amp; 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 &amp; 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 &amp; Aerospace Database</collection><collection>ProQuest Advanced Technologies &amp; 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