Program slicing: Difference between revisions

Content deleted Content added
m Simplified hatnote syntax
Citation bot (talk | contribs)
Add: s2cid, authors 1-1. Removed parameters. Some additions/deletions were parameter name changes. | Use this bot. Report bugs. | Suggested by Whoop whoop pull up | Category:Debugging | #UCB_Category 37/62
Line 4:
In [[computer programming]], '''program slicing''' is the computation of the set of program statements, the '''program slice''', that may affect the values at some point of interest, referred to as a '''slicing criterion'''. Program slicing can be used in [[debugging]] to locate source of errors more easily. Other applications of slicing include [[software maintenance]], [[Optimization (computer science)|optimization]], [[Program analysis (computer science)|program analysis]], and [[Non-interference (security)|information flow control]].
 
Slicing techniques have been seeing a rapid development since the original definition by [[Mark Weiser]]. At first, slicing was only static, i.e., applied on the source code with no other information than the source code. [[Bogdan Korel]] and [[Janusz Laski]] introduced ''dynamic slicing'', which works on a specific execution of the program (for a given execution trace).<ref>{{cite journal |last1=Korel |first1=Bogdan |last2=Laski |first2=Janusz |title=Dynamic Program Slicing |journal=Information Processing Letters |date=1988 |volume=29 |issue=3 |pages=155–163 |doi=10.1016/0020-0190(88)90054-3 |citeseerx=10.1.1.158.9078 }}</ref> Other forms of slicing exist, for instance path slicing.<ref>{{Cite book|lastlast1=Jhala|firstfirst1=Ranjit|last2=Majumdar|first2=Rupak|date=2005|title=Path Slicing|journal=Proceedings of the 2005 ACM SIGPLAN Conference on Programming Language Design and Implementation|series=PLDI '05|___location=New York, NY, USA|publisher=ACM|pages=38–47|doi=10.1145/1065010.1065016|isbn=9781595930569|s2cid=5065847 }}</ref>
 
== Static slicing ==
Line 50:
 
== Lightweight forward static slicing approach ==
A very fast and scalable, yet slightly less accurate, slicing approach is extremely useful for a number of reasons. Developers will have a very low cost and practical means to estimate the impact of a change within minutes versus days. This is very important for planning the implementation of new features and understanding how a change is related to other parts of the system. It will also provide an inexpensive test to determine if a full, more expensive, analysis of the system is warranted. A fast slicing approach will open up new avenues of research in metrics and the mining of histories based on slicing. That is, slicing can now be conducted on very large systems and on entire version histories in very practical time frames. This opens the door to a number of experiments and empirical investigations previously too costly to undertake.<ref>{{Cite journal|lastlast1=Alomari|firstfirst1=Hakam W.|last2=Collard|first2=Michael L.|last3=Maletic|first3=Jonathan I.|last4=Alhindawi|first4=Nouh|last5=Meqdadi|first5=Omar|date=2014-05-19|title=srcSlice: very efficient and scalable forward static slicing|journal=Journal of Software: Evolution and Process|language=en|volume=26|issue=11|pages=931–961|doi=10.1002/smr.1651|issn=2047-7473|citeseerx=10.1.1.641.8891|s2cid=18520643 }}</ref>
 
== Dynamic slicing ==