A hybrid approach to testing for nonfunctional faults in embedded systems using genetic algorithms

Summary Embedded systems are challenging to program correctly, because they use an interrupt‐driven programming paradigm and run in resource‐constrained environments. This leads to various classes of nonfunctional faults that can be detected only by customized verification techniques. These nonfunct...

Ausführliche Beschreibung

Gespeichert in:
Bibliographische Detailangaben
Veröffentlicht in:Software testing, verification & reliability verification & reliability, 2018-11, Vol.28 (7), p.n/a
Hauptverfasser: Yu, Tingting, Srisa‐an, Witawas, Cohen, Myra B., Rothermel, Gregg
Format: Artikel
Sprache:eng
Schlagworte:
Online-Zugang:Volltext
Tags: Tag hinzufügen
Keine Tags, Fügen Sie den ersten Tag hinzu!
container_end_page n/a
container_issue 7
container_start_page
container_title Software testing, verification & reliability
container_volume 28
creator Yu, Tingting
Srisa‐an, Witawas
Cohen, Myra B.
Rothermel, Gregg
description Summary Embedded systems are challenging to program correctly, because they use an interrupt‐driven programming paradigm and run in resource‐constrained environments. This leads to various classes of nonfunctional faults that can be detected only by customized verification techniques. These nonfunctional faults are specifically related to usage of resources such as time and memory. For example, the presence of interrupts can induce delays in interrupt servicing and in system execution time. Such delays can occur when multiple interrupt service routines and interrupts of different priorities compete for resources on a given CPU. As another example, stack overflows are caused when the combination of active methods and interrupt invocations on the stack grows too large, and these can lead to data loss and other significant device failures. To detect these types of nonfunctional faults, developers need to estimate worst‐case resource usage. Most existing approaches for calculating such estimates are based on static analysis; however, these have a tendency to overapproximate the resources needed. Dynamic techniques such as random testing, in contrast, often underapproximate resource usage. In this article, we present SimEspresso, a framework that uses a combination of static analysis and a test case generation algorithm to estimate worst‐case resource usage. There are three different worst‐case resource usage scenarios that we consider: (1) worst‐case execution times, (2) worst‐case interrupt latencies, and (3) worst‐case stack usage. SimEspresso first uses static analysis to identify program paths and interrupt interleavings that potentially lead to worst‐case scenarios. It then uses a genetic algorithm to generate test cases that guide program execution down these paths, using these particular interrupt interleavings. We performed an empirical study to evaluate the effectiveness of SimEspresso; our results show that SimEspresso is more effective than static analysis approaches and improves significantly over the state of the art dynamic technique, random test case generation. We also find that when we use only the genetic algorithm, omitting the static analysis, SimEspresso performs almost as effectively, but takes significantly longer to complete its task. Modern embedded software systems suffer from various classes of non‐functional faults that are related to usage of resources. To detect these types of faults, developers need to estimate worst‐case resourc
doi_str_mv 10.1002/stvr.1686
format Article
fullrecord <record><control><sourceid>proquest_cross</sourceid><recordid>TN_cdi_proquest_journals_2126473004</recordid><sourceformat>XML</sourceformat><sourcesystem>PC</sourcesystem><sourcerecordid>2126473004</sourcerecordid><originalsourceid>FETCH-LOGICAL-c2976-46ed44ccfdd55ba55bd8be832488b3c447c84a37d55681a65ecabf2f3d24f1613</originalsourceid><addsrcrecordid>eNp1kE1LAzEQhoMoWKsH_0HAk4dtk02azR5L8QsEQavXkM1Hm7Ld1CSr7L83a716GGZgnneY9wXgGqMZRqicx_QVZphxdgImGNV1kef6FExQzVCBOCHn4CLGHUKI1ayegGYJt0MTnIbycAheqi1MHiYTk-s20PoAO9_ZvlPJ-U620Mq-TRG6Dpp9Y7Q2GsYhJrOPsI-jZGM6k5yCst344NJ2Hy_BmZVtNFd_fQre7-_Wq8fi-eXhabV8LlRZV6ygzGhKlbJaLxaNzKV5YzgpKecNUZRWilNJqrxlHEu2MEo2trREl9RihskU3BzvZh-ffXYgdr4P-ekoSlwyWhGEaKZuj5QKPsZgrDgEt5dhEBiJMUIxRijGCDM7P7LfrjXD_6B4W3-8_ip-AF_nda0</addsrcrecordid><sourcetype>Aggregation Database</sourcetype><iscdi>true</iscdi><recordtype>article</recordtype><pqid>2126473004</pqid></control><display><type>article</type><title>A hybrid approach to testing for nonfunctional faults in embedded systems using genetic algorithms</title><source>Wiley Online Library All Journals</source><creator>Yu, Tingting ; Srisa‐an, Witawas ; Cohen, Myra B. ; Rothermel, Gregg</creator><creatorcontrib>Yu, Tingting ; Srisa‐an, Witawas ; Cohen, Myra B. ; Rothermel, Gregg</creatorcontrib><description>Summary Embedded systems are challenging to program correctly, because they use an interrupt‐driven programming paradigm and run in resource‐constrained environments. This leads to various classes of nonfunctional faults that can be detected only by customized verification techniques. These nonfunctional faults are specifically related to usage of resources such as time and memory. For example, the presence of interrupts can induce delays in interrupt servicing and in system execution time. Such delays can occur when multiple interrupt service routines and interrupts of different priorities compete for resources on a given CPU. As another example, stack overflows are caused when the combination of active methods and interrupt invocations on the stack grows too large, and these can lead to data loss and other significant device failures. To detect these types of nonfunctional faults, developers need to estimate worst‐case resource usage. Most existing approaches for calculating such estimates are based on static analysis; however, these have a tendency to overapproximate the resources needed. Dynamic techniques such as random testing, in contrast, often underapproximate resource usage. In this article, we present SimEspresso, a framework that uses a combination of static analysis and a test case generation algorithm to estimate worst‐case resource usage. There are three different worst‐case resource usage scenarios that we consider: (1) worst‐case execution times, (2) worst‐case interrupt latencies, and (3) worst‐case stack usage. SimEspresso first uses static analysis to identify program paths and interrupt interleavings that potentially lead to worst‐case scenarios. It then uses a genetic algorithm to generate test cases that guide program execution down these paths, using these particular interrupt interleavings. We performed an empirical study to evaluate the effectiveness of SimEspresso; our results show that SimEspresso is more effective than static analysis approaches and improves significantly over the state of the art dynamic technique, random test case generation. We also find that when we use only the genetic algorithm, omitting the static analysis, SimEspresso performs almost as effectively, but takes significantly longer to complete its task. Modern embedded software systems suffer from various classes of non‐functional faults that are related to usage of resources. To detect these types of faults, developers need to estimate worst‐case resource usage. In this article, we present SimEspresso, a framework that utilizes a combination of static analysis and a test case generation algorithm to estimate worst‐case resource usage. We consider three different worst‐case resource usage: (1) worst‐case execution times, (2) worst‐case interrupt latencies, and (3) worst‐case stack usage.</description><identifier>ISSN: 0960-0833</identifier><identifier>EISSN: 1099-1689</identifier><identifier>DOI: 10.1002/stvr.1686</identifier><language>eng</language><publisher>Chichester: Wiley Subscription Services, Inc</publisher><subject>Data loss ; Embedded systems ; Empirical analysis ; Fault detection ; Genetic algorithms ; Interrupts ; interrupt‐driven programs ; software testing ; State of the art ; Static code analysis</subject><ispartof>Software testing, verification &amp; reliability, 2018-11, Vol.28 (7), p.n/a</ispartof><rights>2018 John Wiley &amp; Sons, Ltd.</rights><lds50>peer_reviewed</lds50><woscitedreferencessubscribed>false</woscitedreferencessubscribed><citedby>FETCH-LOGICAL-c2976-46ed44ccfdd55ba55bd8be832488b3c447c84a37d55681a65ecabf2f3d24f1613</citedby><cites>FETCH-LOGICAL-c2976-46ed44ccfdd55ba55bd8be832488b3c447c84a37d55681a65ecabf2f3d24f1613</cites><orcidid>0000-0002-9461-4251</orcidid></display><links><openurl>$$Topenurl_article</openurl><openurlfulltext>$$Topenurlfull_article</openurlfulltext><thumbnail>$$Tsyndetics_thumb_exl</thumbnail><linktopdf>$$Uhttps://onlinelibrary.wiley.com/doi/pdf/10.1002%2Fstvr.1686$$EPDF$$P50$$Gwiley$$H</linktopdf><linktohtml>$$Uhttps://onlinelibrary.wiley.com/doi/full/10.1002%2Fstvr.1686$$EHTML$$P50$$Gwiley$$H</linktohtml><link.rule.ids>314,780,784,1417,27924,27925,45574,45575</link.rule.ids></links><search><creatorcontrib>Yu, Tingting</creatorcontrib><creatorcontrib>Srisa‐an, Witawas</creatorcontrib><creatorcontrib>Cohen, Myra B.</creatorcontrib><creatorcontrib>Rothermel, Gregg</creatorcontrib><title>A hybrid approach to testing for nonfunctional faults in embedded systems using genetic algorithms</title><title>Software testing, verification &amp; reliability</title><description>Summary Embedded systems are challenging to program correctly, because they use an interrupt‐driven programming paradigm and run in resource‐constrained environments. This leads to various classes of nonfunctional faults that can be detected only by customized verification techniques. These nonfunctional faults are specifically related to usage of resources such as time and memory. For example, the presence of interrupts can induce delays in interrupt servicing and in system execution time. Such delays can occur when multiple interrupt service routines and interrupts of different priorities compete for resources on a given CPU. As another example, stack overflows are caused when the combination of active methods and interrupt invocations on the stack grows too large, and these can lead to data loss and other significant device failures. To detect these types of nonfunctional faults, developers need to estimate worst‐case resource usage. Most existing approaches for calculating such estimates are based on static analysis; however, these have a tendency to overapproximate the resources needed. Dynamic techniques such as random testing, in contrast, often underapproximate resource usage. In this article, we present SimEspresso, a framework that uses a combination of static analysis and a test case generation algorithm to estimate worst‐case resource usage. There are three different worst‐case resource usage scenarios that we consider: (1) worst‐case execution times, (2) worst‐case interrupt latencies, and (3) worst‐case stack usage. SimEspresso first uses static analysis to identify program paths and interrupt interleavings that potentially lead to worst‐case scenarios. It then uses a genetic algorithm to generate test cases that guide program execution down these paths, using these particular interrupt interleavings. We performed an empirical study to evaluate the effectiveness of SimEspresso; our results show that SimEspresso is more effective than static analysis approaches and improves significantly over the state of the art dynamic technique, random test case generation. We also find that when we use only the genetic algorithm, omitting the static analysis, SimEspresso performs almost as effectively, but takes significantly longer to complete its task. Modern embedded software systems suffer from various classes of non‐functional faults that are related to usage of resources. To detect these types of faults, developers need to estimate worst‐case resource usage. In this article, we present SimEspresso, a framework that utilizes a combination of static analysis and a test case generation algorithm to estimate worst‐case resource usage. We consider three different worst‐case resource usage: (1) worst‐case execution times, (2) worst‐case interrupt latencies, and (3) worst‐case stack usage.</description><subject>Data loss</subject><subject>Embedded systems</subject><subject>Empirical analysis</subject><subject>Fault detection</subject><subject>Genetic algorithms</subject><subject>Interrupts</subject><subject>interrupt‐driven programs</subject><subject>software testing</subject><subject>State of the art</subject><subject>Static code analysis</subject><issn>0960-0833</issn><issn>1099-1689</issn><fulltext>true</fulltext><rsrctype>article</rsrctype><creationdate>2018</creationdate><recordtype>article</recordtype><recordid>eNp1kE1LAzEQhoMoWKsH_0HAk4dtk02azR5L8QsEQavXkM1Hm7Ld1CSr7L83a716GGZgnneY9wXgGqMZRqicx_QVZphxdgImGNV1kef6FExQzVCBOCHn4CLGHUKI1ayegGYJt0MTnIbycAheqi1MHiYTk-s20PoAO9_ZvlPJ-U620Mq-TRG6Dpp9Y7Q2GsYhJrOPsI-jZGM6k5yCst344NJ2Hy_BmZVtNFd_fQre7-_Wq8fi-eXhabV8LlRZV6ygzGhKlbJaLxaNzKV5YzgpKecNUZRWilNJqrxlHEu2MEo2trREl9RihskU3BzvZh-ffXYgdr4P-ekoSlwyWhGEaKZuj5QKPsZgrDgEt5dhEBiJMUIxRijGCDM7P7LfrjXD_6B4W3-8_ip-AF_nda0</recordid><startdate>201811</startdate><enddate>201811</enddate><creator>Yu, Tingting</creator><creator>Srisa‐an, Witawas</creator><creator>Cohen, Myra B.</creator><creator>Rothermel, Gregg</creator><general>Wiley Subscription Services, Inc</general><scope>AAYXX</scope><scope>CITATION</scope><scope>7SC</scope><scope>8FD</scope><scope>JQ2</scope><scope>L7M</scope><scope>L~C</scope><scope>L~D</scope><orcidid>https://orcid.org/0000-0002-9461-4251</orcidid></search><sort><creationdate>201811</creationdate><title>A hybrid approach to testing for nonfunctional faults in embedded systems using genetic algorithms</title><author>Yu, Tingting ; Srisa‐an, Witawas ; Cohen, Myra B. ; Rothermel, Gregg</author></sort><facets><frbrtype>5</frbrtype><frbrgroupid>cdi_FETCH-LOGICAL-c2976-46ed44ccfdd55ba55bd8be832488b3c447c84a37d55681a65ecabf2f3d24f1613</frbrgroupid><rsrctype>articles</rsrctype><prefilter>articles</prefilter><language>eng</language><creationdate>2018</creationdate><topic>Data loss</topic><topic>Embedded systems</topic><topic>Empirical analysis</topic><topic>Fault detection</topic><topic>Genetic algorithms</topic><topic>Interrupts</topic><topic>interrupt‐driven programs</topic><topic>software testing</topic><topic>State of the art</topic><topic>Static code analysis</topic><toplevel>peer_reviewed</toplevel><toplevel>online_resources</toplevel><creatorcontrib>Yu, Tingting</creatorcontrib><creatorcontrib>Srisa‐an, Witawas</creatorcontrib><creatorcontrib>Cohen, Myra B.</creatorcontrib><creatorcontrib>Rothermel, Gregg</creatorcontrib><collection>CrossRef</collection><collection>Computer and Information Systems Abstracts</collection><collection>Technology Research Database</collection><collection>ProQuest Computer Science Collection</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>Software testing, verification &amp; reliability</jtitle></facets><delivery><delcategory>Remote Search Resource</delcategory><fulltext>fulltext</fulltext></delivery><addata><au>Yu, Tingting</au><au>Srisa‐an, Witawas</au><au>Cohen, Myra B.</au><au>Rothermel, Gregg</au><format>journal</format><genre>article</genre><ristype>JOUR</ristype><atitle>A hybrid approach to testing for nonfunctional faults in embedded systems using genetic algorithms</atitle><jtitle>Software testing, verification &amp; reliability</jtitle><date>2018-11</date><risdate>2018</risdate><volume>28</volume><issue>7</issue><epage>n/a</epage><issn>0960-0833</issn><eissn>1099-1689</eissn><abstract>Summary Embedded systems are challenging to program correctly, because they use an interrupt‐driven programming paradigm and run in resource‐constrained environments. This leads to various classes of nonfunctional faults that can be detected only by customized verification techniques. These nonfunctional faults are specifically related to usage of resources such as time and memory. For example, the presence of interrupts can induce delays in interrupt servicing and in system execution time. Such delays can occur when multiple interrupt service routines and interrupts of different priorities compete for resources on a given CPU. As another example, stack overflows are caused when the combination of active methods and interrupt invocations on the stack grows too large, and these can lead to data loss and other significant device failures. To detect these types of nonfunctional faults, developers need to estimate worst‐case resource usage. Most existing approaches for calculating such estimates are based on static analysis; however, these have a tendency to overapproximate the resources needed. Dynamic techniques such as random testing, in contrast, often underapproximate resource usage. In this article, we present SimEspresso, a framework that uses a combination of static analysis and a test case generation algorithm to estimate worst‐case resource usage. There are three different worst‐case resource usage scenarios that we consider: (1) worst‐case execution times, (2) worst‐case interrupt latencies, and (3) worst‐case stack usage. SimEspresso first uses static analysis to identify program paths and interrupt interleavings that potentially lead to worst‐case scenarios. It then uses a genetic algorithm to generate test cases that guide program execution down these paths, using these particular interrupt interleavings. We performed an empirical study to evaluate the effectiveness of SimEspresso; our results show that SimEspresso is more effective than static analysis approaches and improves significantly over the state of the art dynamic technique, random test case generation. We also find that when we use only the genetic algorithm, omitting the static analysis, SimEspresso performs almost as effectively, but takes significantly longer to complete its task. Modern embedded software systems suffer from various classes of non‐functional faults that are related to usage of resources. To detect these types of faults, developers need to estimate worst‐case resource usage. In this article, we present SimEspresso, a framework that utilizes a combination of static analysis and a test case generation algorithm to estimate worst‐case resource usage. We consider three different worst‐case resource usage: (1) worst‐case execution times, (2) worst‐case interrupt latencies, and (3) worst‐case stack usage.</abstract><cop>Chichester</cop><pub>Wiley Subscription Services, Inc</pub><doi>10.1002/stvr.1686</doi><tpages>28</tpages><orcidid>https://orcid.org/0000-0002-9461-4251</orcidid></addata></record>
fulltext fulltext
identifier ISSN: 0960-0833
ispartof Software testing, verification & reliability, 2018-11, Vol.28 (7), p.n/a
issn 0960-0833
1099-1689
language eng
recordid cdi_proquest_journals_2126473004
source Wiley Online Library All Journals
subjects Data loss
Embedded systems
Empirical analysis
Fault detection
Genetic algorithms
Interrupts
interrupt‐driven programs
software testing
State of the art
Static code analysis
title A hybrid approach to testing for nonfunctional faults in embedded systems using genetic algorithms
url https://sfx.bib-bvb.de/sfx_tum?ctx_ver=Z39.88-2004&ctx_enc=info:ofi/enc:UTF-8&ctx_tim=2025-01-08T06%3A25%3A06IST&url_ver=Z39.88-2004&url_ctx_fmt=infofi/fmt:kev:mtx:ctx&rfr_id=info:sid/primo.exlibrisgroup.com:primo3-Article-proquest_cross&rft_val_fmt=info:ofi/fmt:kev:mtx:journal&rft.genre=article&rft.atitle=A%20hybrid%20approach%20to%20testing%20for%20nonfunctional%20faults%20in%20embedded%20systems%20using%20genetic%20algorithms&rft.jtitle=Software%20testing,%20verification%20&%20reliability&rft.au=Yu,%20Tingting&rft.date=2018-11&rft.volume=28&rft.issue=7&rft.epage=n/a&rft.issn=0960-0833&rft.eissn=1099-1689&rft_id=info:doi/10.1002/stvr.1686&rft_dat=%3Cproquest_cross%3E2126473004%3C/proquest_cross%3E%3Curl%3E%3C/url%3E&disable_directlink=true&sfx.directlink=off&sfx.report_link=0&rft_id=info:oai/&rft_pqid=2126473004&rft_id=info:pmid/&rfr_iscdi=true