132 research outputs found

    A Platform-Based Software Design Methodology for Embedded Control Systems: An Agile Toolkit

    No full text
    A discrete control system, with stringent hardware constraints, is effectively an embedded real-time system and hence requires a rigorous methodology to develop the software involved. The development methodology proposed in this paper adapts agile principles and patterns to support the building of embedded control systems, focusing on the issues relating to a system's constraints and safety. Strong unit testing, to ensure correctness, including the satisfaction of timing constraints, is the foundation of the proposed methodology. A platform-based design approach is used to balance costs and time-to-market in relation to performance and functionality constraints. It is concluded that the proposed methodology significantly reduces design time and costs, as well as leading to better software modularity and reliability

    What we know about testing embedded software

    Get PDF
    To cost-effectively test embedded software, practitioners and researchers have proposed many test techniques, approaches, tools, and frameworks. However, obtaining an overview of the state of the art and state of the practice in this area is challenging for practitioners or new researchers. In addition, owing to an inadequate overview of what already exists in this area, some companies often reinvent the wheel by designing a test approach that’s new to them but already exists. To address these problems, the authors conducted a systematic literature review of this area that covered the testing topics, testing activities, test artifacts, and industries on which the studies focused. The results can benefit both practitioners and researchers by serving as an index to the vast body of knowledge in this important, fast-growing area

    Agile testing practices in software quality: State of the art review

    Get PDF
    In this paper you can find a review of articles related to agile testing practices in software quality, looking for theoretical information and real cases applied to testing inside a modern context, comparing them with the standard procedures taking into account their advantages and relevant features. As final result, we determine that agile practices in software quality have wide acceptance and many companies have chosen their use for all their benefits and impact on development software processes in several real applications, not necessarily IT governance ones, since other kind of technical applications have shown excellent results on testing

    Development of a Wireless Environmental Data Acquisition Prototype Adopting Agile Practices: An Experience Report

    Full text link
    The traditional software development model commonly named “waterfall” is unable to cope with the increasing functionality and complexity of modern embedded systems. In addition, it is unable to support the ability for businesses to quickly respond to new market opportunities due to changing requirements. As a response, the software development community developed the Agile Methodologies (e.g., extreme Programming, Scrum) which were also adopted by the Embedded System community. However, failures and bad experiences in applying Agile Methodologies to the development of embedded systems have not been reported in the literature. Therefore, this paper contributes a detailed account of our first-time experiences adopting an agile approach in the prototype development of a wireless environment data acquisition system in an academic environment. We successfully applied a subset of the extreme Programming (XP) methodology to our software development using the Python programming language, an experience that demonstrated its benefits in shaping the design of the software and also increasing productivity. We used an incremental development approach for the hardware components and adopted a “cumulative testing” approach. For the overall development process management, however, we concluded that the Promise/Commitment-Based Project Management (PBPM/ CBPM) was better suited. We discovered that software and hardware components of embedded systems are best developed in parallel or near-parallel. We learned that software components that pass automated tests may not survive in the tests against the hardware. Throughout this rapid prototyping effort, factors like team size and our availability as graduate students were major obstacles to fully apply the XP methodology

    Agile methods in biomedical software development: a multi-site experience report

    Get PDF
    BACKGROUND: Agile is an iterative approach to software development that relies on strong collaboration and automation to keep pace with dynamic environments. We have successfully used agile development approaches to create and maintain biomedical software, including software for bioinformatics. This paper reports on a qualitative study of our experiences using these methods. RESULTS: We have found that agile methods are well suited to the exploratory and iterative nature of scientific inquiry. They provide a robust framework for reproducing scientific results and for developing clinical support systems. The agile development approach also provides a model for collaboration between software engineers and researchers. We present our experience using agile methodologies in projects at six different biomedical software development organizations. The organizations include academic, commercial and government development teams, and included both bioinformatics and clinical support applications. We found that agile practices were a match for the needs of our biomedical projects and contributed to the success of our organizations. CONCLUSION: We found that the agile development approach was a good fit for our organizations, and that these practices should be applicable and valuable to other biomedical software development efforts. Although we found differences in how agile methods were used, we were also able to identify a set of core practices that were common to all of the groups, and that could be a focus for others seeking to adopt these methods

    Flexible New Product Development: Using Knowledge Transfer from Agile Software Development as a Catalyst for Adaptation – Case Study and Systematic Literature Review

    Get PDF
    The life cycle of products is getting shorter and product development projects are more than ever challenged by frequent change. In response to this evolution, Agile software development is gaining a foothold in the software industry. Agile software development relies on iterations, collaboration between organizational functions and re-planning based on feedback from past iterations. Product development experts have suggested similar approaches to new product development in general. However, the adaptation rate has been faster in the software domain. This work studied knowledge transfer from Agile software development to product development involving other engineering disciplines. The research consisted of two parts, a case study and systematic literature review. The first part of the research was a case study in an industrial setting. The case project involved teams developing electronics and mechanics. The study identified that the project benefited from knowledge transfer from Agile software development. It resulted in accelerated learning, improved communication and higher commitment. The study also identified several challenges remaining in knowledge transfer, such as larger organizational change, documentation level and the need to adapt to engineering practices. As a second part of the research, a systematic literature review was conducted to find out what is currently known about the subject. The review found three common themes: co-design, testing and incremental hardware development. Extended collaboration between engineering disciplines was seen as important, but iterative development relying on experimentation needs new techniques for continuous testing. Despite the challenges, iterative hardware development is seen to be beneficial to system development projects. The synthesis part of the review identified an enforcing cycle between the three themes, resulting in diminishing difference between engineering disciplines. Based on the results, it is recommended to transfer knowledge from Agile software development to new product development in general. The knowledge available accelerates the adaptation rate to a more flexible approach to development. Furthermore, it was identified that the change in product development triggers a need for change in other functions of the organization, leading toward an Agile organization. The results from the studies were mapped to a conceptual framework on how an Agile organization works. During the study, several future research avenues were identified, such as how Agile Development affects the whole organization, the economics of frequent prototyping and engineering practices, particularly regarding test automation and integration with quality assurance approaches and processes such as CMMI and ISO 9001.Tuotteiden elinkaari lyhenee jatkuvasti ja tuotekehityksen haasteisiin kuuluu jatkuva muutos nyt enemmän kuin koskaan aiemmin. Vastauksena tähän haasteeseen ketterä ohjelmistokehitys yleistyy ohjelmistoalalla. Ketterä ohjelmistokehitys pohjautuu iteraatioihin, yhteistyöhön organisaation eri funktioiden välillä ja jatkuvaan palautteen perusteella tehtävään suunnitteluun. Vastaavien menetelmien yleistyminen ohjelmistokehityksen ulkopuolella on ollut huomattavasti hitaampaa. Tässä työssä tutkittiin tiedon siirtämistä ketterästä ohjelmistokehityksestä tuotekehitykseen joka vaatii panosta myös muilta insinöörialoilta. Tutkimus koostui kahdesta osasta; case–tutkimuksesta ja systemaattisesta kirjallisuuskatsauksesta. Tutkimuksen ensimmäinen osa oli case -tutkimus teollisuusympäristössä. Kohdeprojekti sisälsi elektroniikan ja mekaniikan kehitystä. Tutkimus paljasti, että projekti hyötyi tiedon siirrosta Ketterästä ohjelmistokehityksestä. Tuloksena oli nopeampi oppiminen, parantunut kommunikointi ja vahvempi sitoutuminen. Lisäksi tutkimus paljasti haasteita tiedon siirtämisessä. Esimerkkejä ovat koko organisaation laajuinen muutos, dokumentaation määrä ja rooli sekä tarve uusille suunnittelukäytännöille. Tutkimuksen toisen osan muodosti systemaattinen kirjallisuuskatsaus. Tavoitteena oli selvittää mitä aiheesta tiedetään aiemman tutkimuksen perusteella. Katsaus löysi kolme yhteistä teemaa olemassa olevassa kirjallisuudessa; co-design, testaus ja inkrementaalinen hardware –kehitys. Laajempi yhteistyö eri insinöörialojen välillä nähdään tärkeänä, mutta iteratiivinen kehitys vaatii uusia käytäntöjä ja tekniikoita jatkuvaan testaamiseen. Haasteista huolimatta, iteratiivinen hardware –kehitys nähdään hyödyllisenä systeemikehitysprojekteissa. Katsauksen synteesivaihe tunnisti vahvistavan syklin kolmen teeman välillä, ja tämä johti eri insinöörialojen välisten erojen vähentymiseen. Tutkimuksen tulosten perusteella voidaan sanoa, että tuotekehitys yleisesti hyötyy tiedonsiirrosta Ketteristä ohjelmistokehitysmenetelmistä. Saatavilla oleva tieto nopeuttaa joustavampien kehitystapojen yleistymistä. Lisäksi havaittiin, että muutos tuotekehityksessä aiheuttaa muutostarpeita myös muissa organisaation osissa. Tämä kokonaisvaltaisempi muutos johtaa ketterään organisaatioon. Molempien tutkimusten tulokset sijoitettiin konseptuaaliseen kehysmalliin, joka kuvastaa kuinka ketterä organisaatio toimii. Tutkimuksen aikana tunnistettiin useita mielenkiintoisia jatkotutkimusaiheita, kuten kuinka ketterä kehitys vaikuttaa koko organisaatioon, ekonominen ajattelu prototyyppien käytössä, kehityskäytäntöjen kehittäminen erityisesti testaukseen liittyen ja toimintatavan yhdistäminen laadunvalvonta prosesseihin ja menetelmiin, kuten CMMI ja ISO 9001

    Test-Driven Development of an Embedded Data Acquisition Software

    Get PDF
    Testivetoinen kehitys on ohjelmistokehityksessä käytettävä menetelmä, jossa ohjelmoija kirjoittaa aina automaattisen yksikkötestin ennen varsinaisen toiminnallisuuden toteuttamista. Yksikkötestejä luodaan järjestelmän vaatimusten perusteella ja nämä testit ohjaavat ohjelmiston kehitystä. Vaikka testivetoinen kehitys on saavuttanut suosiota työpöytä- ja web-sovellusten kehityksessä, ei sitä ole kuitenkaan sovellettu laajasti sulautettujen järjestelmien kehityksessä. Tämän tutkimuksen tavoitteena on tutkia, miten testivetoista kehitystä voidaan hyödyntää sulautettuja järjestelmiä kehitettäessä. Tutkimus jakaantuu kahteen vaiheeseen: Ensimmäisessä vaiheessa tutustutaan testivetoiseen kehitykseen kirjallisuustutkimuksen avulla esittelemällä aiheeseen liittyvät käsitteet, teoriat ja menetelmät sekä tutkimalla aiempia kokemuksia ja tutkimuksia menetelmän käytöstä. Toisessa vaiheessa tutkitaan menetelmän käyttöä käytännössä tapaustutkimuksen avulla ja verrataan kokemuksia ensimmäisen osan tuloksiin. Tapaustutkimuksessa tutkitaan menetelmän käyttöä ohjelmistokehitysprojektissa, jossa Bitwise toteuttaa asiakkaalleen Kempille hitsauslaitteeseen liitettävän sulautetun tiedonkeruulaitteen ohjelmiston. Tutkimuksen tulokset osoittavat, että testivetoisen kehityksen hyödyntäminen sulautettujen ohjelmistojen kehityksessä on sekä mahdollista että hyödyllistä. Menetelmän käytöllä saavutettavat hyödyt liittyvät esimerkiksi koodin ulkoiseen laatuun, koodin sisäiseen laatuun, testaukseen, tuottavuuteen, dokumentointiin sekä psykologisiin ja sosiaalisiin vaikutuksiin. Sulautettuja ohjelmistoja kehitettäessä etuja ovat myös esimerkiksi laitteistoon liittyvien riskien ja kulujen vähentyminen ja koodin parempi siirrettävyys. Menetelmän käyttäminen ei ole silti ongelmatonta, sillä erityisesti sulautettujen ohjelmistojen erityispiirteet tuovat mukanaan omat haasteensa. Suurimpana ongelmana on kuitenkin menetelmän vaativuus, sillä menetelmän hyödyntäminen tehokkaasti vaatii kehittäjältä paljon harjoittelua.Test-driven development is a software development methodology in which a programmer always writes an automatic unit test before implementing the actual functionality. Unit tests are being created based on the system requirements and these tests guide the development of the software. Even though test-driven development has gained popularity among the desktop and web software developers, it has not been widely applied to embedded system development. The goal of this study is to investigate how test-driven development can be utilized in the development of embedded systems. The study is divided into two phases: In the first phase literature research is used to introduce terminology, theories and methodologies related to test-driven development and to examine previous experiences and studies concerning the use of the methodology. In the second phase the utilization of test-driven development in practice is investigated by means of a case study whose experiences are compared with the results of the first phase. The case study observes the use of the methodology in a software development project in which Bitwise implements the software for an embedded welding data acquisition device for Kemppi. The results of this study indicate that the utilization of test-driven development in the development of embedded systems is viable and beneficial. The benefits that can be obtained are related to, for example, external code quality, internal code quality, testing, productivity, documentation, and psychological and social effects. When developing embedded software the benefits also include, for instance, reduced hardware related risks and expenses, and better software portability. However, the use of test-driven development is not without problems, as particularly the characteristics of embedded software bring their own challenges. The biggest problem with the methodology is the level of difficulty, as much practice is needed to be effective with it

    Tools for detection and analysis of flaky software tests

    Get PDF
    Abstract. Software testing is an essential part of developing a high-quality product. Test cases that pass or fail in a nondeterministic manner can cause severe problems and be difficult to fix. Unstable test cases cause increased resource usage on many different levels, as well as delays for the project they appear on. Increased resource usage might also cause delays over the project boundaries. There are multiple different reasons why tests might become unstable. A common one is the order dependency between test cases, which can also make the addition of new test cases more difficult. At the start of this work, the test cases of an under development version of eCPRI module were rather unstable. To improve the stability level, this work introduces three tools designed for test cases based on CppUTest framework with multiple use cases to help the developers to tackle the issue of unstable test cases occurring due to order dependencies. The tools are aimed to investigate different types of order dependencies that could occur between test cases. The main methods the tools are utilizing are test repeating and shuffling the testing order. In some cases, the tools were able to increase the reproducibility of the occurring failures, which is very important when solving the root cause for the failures. The tools also provide an easy way to perform an extensive, automated test running which offers a chance for the user to be absent while the logs are gathered from multiple test runs, which can be helpful when investigating random failures. Combined with the principle of binary search on reducing the executed test cases, the usage of these tools was useful when pinpointing the tests and reasons for failures. The stability level of the eCPRI module’s test cases was improved with the methods and tools presented in this thesis. The stability level of shuffled test runs was brought up from 0 % to 70 % and the stability level of normal test order was brought from 82.5 % to 100 % for one of the compilers used.Työkaluja epästabiilien ohjelmistotestien tunnistamiseen ja analysointiin. Tiivistelmä. Ohjelmistotestaus on välttämätön osa korkealaatuisen tuotteen kehitystä. Testit, joiden lopputulos vaihtelee epämääräisesti, voivat aiheuttaa vaikeita ongelmia ja ne voivat olla hankalia korjattavia. Epästabiilit testit kasvattavat resurssien käyttöä useilla eri tavoilla, minkä lisäksi ne aiheuttavat viivästyksiä projektin etenemiseen. Kasvanut resurssien käyttöaste voi myös aiheuttaa viivästyksiä toisiin meneillä oleviin projekteihin. On useita syitä miksi testistä voi tulla epästabiili. Yksi yleisimmistä syistä on testien riippuvuus niiden suorittamisjärjestyksestä, joka voi myös hankaloittaa uusien testien lisäämistä. Työn alkaessa kehitteillä olevan eCPRI moduulin testit olivat suhteellisen epästabiileja. Osittaisena ratkaisuna tähän ongelmaan tässä työssä esitellään kolme työkalua, jotka on suunniteltu helpottamaan eCPRI moduulin CppUTest sovelluskehystä hyödyntävien testien stabiiliuden parantamista. Työkalut keskittyvät erityyppisten testien välillä olevien järjestysriippuvuuksien tunnistamiseen ja paikantamiseen. Tärkeimmät metodit, joita työkalut käyttävät, ovat testien toistaminen ja testijärjestyksen sekoittaminen. Työkaluilla onnistuttiin parantamaan joidenkin ilmenneiden suoritusvirheiden toistettavuutta, joka on äärimmäisen tärkeää paikannettaessa virheen aiheuttajaa. Työkalut myös tarjoavat helpon tavan automatisoidun laajamittaisen testauksen suorittamiseen, mikä mahdollistaa useiden testiajojen logien keräämisen ilman tarvetta jatkuvalle käyttäjän läsnäololle. Tämä helpottaa tärkeiden tietojen keräämistä ja kokoamista harvoin tapahtuvista testitai suoritusvirheistä. Näiden työkalujen käyttö, yhdistettynä puolitushaun periaatteeseen ennen virhettä suoritettujen testien määrän vähentämisessä, oli hyödyllistä virheiden aiheuttavien testien ja syiden paikantamisessa. Tässä työssä esitettyjen työkalujen ja metodien käyttämisellä onnistuttiin parantamaan eCPRI moduulin testien stabiilisuutta. Sekoitettujen testiajojen stabiilisuusaste oli työn alkaessa 0 % ja se onnistuttiin nostamaan 70 %:iin. Tavallisen testijärjestyksen stabiilisuusaste oli työn alussa 82.5 % ja se onnistuttiin nostamaan 100 %:iin

    Linking Research and Policy: Assessing a Framework for Organic Agricultural Support in Ireland

    Get PDF
    This paper links social science research and agricultural policy through an analysis of support for organic agriculture and food. Globally, sales of organic food have experienced 20% annual increases for the past two decades, and represent the fastest growing segment of the grocery market. Although consumer interest has increased, farmers are not keeping up with demand. This is partly due to a lack of political support provided to farmers in their transition from conventional to organic production. Support policies vary by country and in some nations, such as the US, vary by state/province. There have been few attempts to document the types of support currently in place. This research draws on an existing Framework tool to investigate regionally specific and relevant policy support available to organic farmers in Ireland. This exploratory study develops a case study of Ireland within the framework of ten key categories of organic agricultural support: leadership, policy, research, technical support, financial support, marketing and promotion, education and information, consumer issues, inter-agency activities, and future developments. Data from the Irish Department of Agriculture, Fisheries and Food, the Irish Agriculture and Food Development Authority (Teagasc), and other governmental and semi-governmental agencies provide the basis for an assessment of support in each category. Assessments are based on the number of activities, availability of information to farmers, and attention from governmental personnel for each of the ten categories. This policy framework is a valuable tool for farmers, researchers, state agencies, and citizen groups seeking to document existing types of organic agricultural support and discover policy areas which deserve more attention

    A Framework for Model-Driven Development of Mobile Applications with Context Support

    Get PDF
    Model-driven development (MDD) of software systems has been a serious trend in different application domains over the last 15 years. While technologies, platforms, and architectural paradigms have changed several times since model-driven development processes were first introduced, their applicability and usefulness are discussed every time a new technological trend appears. Looking at the rapid market penetration of smartphones, software engineers are curious about how model-driven development technologies can deal with this novel and emergent domain of software engineering (SE). Indeed, software engineering of mobile applications provides many challenges that model-driven development can address. Model-driven development uses a platform independent model as a crucial artifact. Such a model usually follows a domain-specific modeling language and separates the business concerns from the technical concerns. These platform-independent models can be reused for generating native program code for several mobile software platforms. However, a major drawback of model-driven development is that infrastructure developers must provide a fairly sophisticated model-driven development infrastructure before mobile application developers can create mobile applications in a model-driven way. Hence, the first part of this thesis deals with designing a model-driven development infrastructure for mobile applications. We will follow a rigorous design process comprising a domain analysis, the design of a domain-specific modeling language, and the development of the corresponding model editors. To ensure that the code generators produce high-quality application code and the resulting mobile applications follow a proper architectural design, we will analyze several representative reference applications beforehand. Thus, the reader will get an insight into both the features of mobile applications and the steps that are required to design and implement a model-driven development infrastructure. As a result of the domain analysis and the analysis of the reference applications, we identified context-awareness as a further important feature of mobile applications. Current software engineering tools do not sufficiently support designing and implementing of context-aware mobile applications. Although these tools (e.g., middleware approaches) support the definition and the collection of contextual information, the adaptation of the mobile application must often be implemented by hand at a low abstraction level by the mobile application developers. Thus, the second part of this thesis demonstrates how context-aware mobile applications can be designed more easily by using a model-driven development approach. Techniques such as model transformation and model interpretation are used to adapt mobile applications to different contexts at design time or runtime. Moreover, model analysis and model-based simulation help mobile application developers to evaluate a designed mobile application (i.e., app model) prior to its generation and deployment with respected to certain contexts. We demonstrate the usefulness and applicability of the model-driven development infrastructure we developed by seven case examples. These showcases demonstrate the designing of mobile applications in different domains. We demonstrate the scalability of our model-driven development infrastructure with several performance tests, focusing on the generation time of mobile applications, as well as their runtime performance. Moreover, the usability was successfully evaluated during several hands-on training sessions by real mobile application developers with different skill levels
    corecore