27 research outputs found

    Barriers to Successful End-User Programming

    Get PDF
    In my research and my personal life, I have come to know numerous people that our research community might call end-user programmers. Some of them are scientists, some are artists, others are educators and other types of professionals. One thing that all of these people have in common is that their goals are entirely unrelated to producing code. In some cases, programming may be a necessary part of accomplishing their goals, such as a physicist writing a simulation in C or an interaction designer creating an interactive prototype. In other cases, programming may simply be the more efficient alternative to manually solving a problem: one might find duplicate entries in an address book by visual search or by writing a short Perl script

    Static Analysis of Android Secure Application Development Process with FindSecurityBugs

    Get PDF
    Mobile devices have been growing more and more powerful in recent decades, evolving from a simple device for SMS messages and phone calls to a smart device that can install third party apps. People are becoming more heavily reliant on their mobile devices. Due to this increase in usage, security threats to mobile applications are also growing explosively. Mobile app flaws and security defects can provide opportunities for hackers to break into them and access sensitive information. Defensive coding needs to be an integral part of coding practices to improve the security of our code. We need to consider data protection earlier, to verify security early in the development lifecycle, rather than fixing the security holes after malicious attacks and data leaks take place. Early elimination of known security vulnerabilities will help us increase the security of our software, reduce the vulnerabilities in the programs, and mitigate the consequences and damage caused by potential malicious attacks. However, many software developer professionals lack the necessary security knowledge and skills at the development stage, and secure mobile software development is not yet well represented in most schools\u27 computing curriculum. In this paper, we present a static security analysis approach with the FindSecurityBugs plugin for Android secure mobile software development based on OWASP mobile security recommendations to promote secure mobile software development education and meet the emerging industrial and educational needs

    Automatically Fixing Syntax Errors Using the Levenshtein Distance

    Get PDF
    Abstract:To ensure high quality software, much emphasis is laid on software testing. While a number of techniques and tools already exist to identify and locate syntax errors, it is still the duty of programmers to manually fix each of these uncovered syntax errors. In this paper we propose an approach to automate the task of fixing syntax errors by using existing compilers and the levenshtein distance between the identified bug and the possible fixes. The levenshtein distance is a measure of the similarity between two strings. A prototype, called ASBF, has also been built and a number of tests carried out which show that the technique works well in most cases. ASBF is able to automatically fix syntax errors in any erroneous source file and can also process several erroneous files in a source folder. The tests carried out also show that the technique can also be applied to multiple programming languages. Currently ASBF can automatically fix software bugs in the Java and the Python programming languages. The tool also has auto-learning capabilities where it can automatically learn from corrections made manually by a user. It can thereafter couple this learning process with the levenshtein distance to improve its software bugcorrection capabilities.Keywords: Automatically fixing syntax errors, bug fixing, auto-learn, levenshtein distance, Java, Python(Article history: Received 16 September 2016 and accepted 9 December 2016

    Debugging: The Key to Unlocking the Mind of a Novice Programmer?

    Get PDF
    Novice programmers must master two skills to show lasting success: writing code and, when that fails, the ability to debug it. Instructors spend much time teaching the details of writing code but debugging gets significantly less attention. But what if teaching debugging could implicitly teach other aspects of coding better than teaching a language teaching debugging? This paper explores a new theoretical framework, the Theory of Applied Mind for Programming (TAMP), which merges dual process theory with Jerome Bruner’s theory of representations to model the mind of a programmer. TAMP looks to provide greater explanatory power in why novices struggle and suggest pedagogy to bridge gaps in learning. This paper will provide an example of this by reinterpreting debugging literature using TAMP as a theoretical guide. Incorporating new view theoretical viewpoints from old studies suggests a “debugging-first” pedagogy can supplement existing methods of teaching programming and perhaps fill some of the mental gaps TAMP suggests hamper novice programmers

    Ajonaikaiset virheet ja niiden tunnistaminen

    Get PDF
    Käsittelen tässä tutkielmassa tietokoneohjelmien ajonaikaisia virhetiloja. Vikatilassa ohjelma voi kaatua, jonkin toiminnon suoritus voi keskeytyä tai ohjelma voi tuottaa vääriä tuloksia. Vikatilat voivat johtua fyysisen ympäristön aiheuttamista tietokoneen sisäisen tilan odottamattomista muutoksista tai ohjelmoijan tekemistä virheistä. Perehdyn tutkielmassani pääasiassa erilaisiin tietokoneohjelmien ajonaikaisiin virhetiloihin ja niiden tunnistamiseen kirjallisuuden avulla. Pohdin myös sitä, miksi ohjelmoija saattaa tehdä virheitä ja miten virhe ohjelmoijan kirjoittamassa ohjelmakoodissa voi aiheuttaa vikatilan ohjelmaa ajettaessa. Tutkielman tutkimuskysymys on: Minkälaisia ohjelman tai ohjelmiston ajonaikaisia virheitä on mahdollista esiintyä ja miten ne on mahdollista tunnistaa? Kuvaan tutkielmassa erityisen virhealttiita ohjelmistorakenteita ja asioita, jotka johtavat ohjelmoijan tekemään virheitä ohjelmakoodin kirjoittamisessa. Yksi karkea virheiden luokittelu on jako muistivirheisiin, rinnakkaisuusvirheisiin ja semanttisiin virheisiin. Muistivirheet ja rinnakkaisuusvirheet ovat myös semanttisia virheitä, mutta semanttisilla virheillä tarkoitetaan usein sellaisia virheitä, joita ei voida luokitella tarkemmin. Rinnakkaisuusvirheet rajoittuvat ohjelmiin, jotka hyödyntävät rinnakkaisuutta. Bittien kääntyminen on yksi esimerkki laitteistotason virhetilanteesta. Miksi bitit laitteen muistissa saattavat kääntyä nollasta ykköseksi tai päinvastoin ja miten se voi vaikuttaa ohjelman toimintaan? Laitteen ja ohjelmiston (esimerkiksi satelliitti) yhdistelmää suunniteltaessa täytyy huomioida bittien kääntymiset. Ajonaikaisten virhetilojen tunnistaminen on tärkeää. Kuvaan miten bittien kääntymisiä voidaan tunnistaa ja korjata sekä laitteistollisesti että ohjelmallisesti. Kuvaan myös lyhyesti kahta menetelmää, joilla voidaan todeta ohjelman toimivan väärin. Ensimmäinen näistä menetelmistä perustuu ohjelman ajoitusten seurantaan. Toinen perustuu poikkeamiin ohjelman suorituspolussa. Tutkielmani tulos on katsaus tapahtumaketjuun siitä, miten virheitä syntyy ohjelmiin ja millaisia ajonaikaisia virheitä voi ilmetä sekä miten ohjelman virheellinen toiminta voidaan tunnistaa. Bittien kääntyminen on edelleen ongelma, joka täytyy pitää mielessä erityisesti laitteita suunnitellessa. Muistivirheiden määrä yleensä vähenee ohjelman kehityksen edetessä ja suurempi osa virheistä on semanttisia virheitä. Rinnakkaisuusvirheet riippuvat siitä, onko ohjelmassa käytetty rinnakkaisuutta. Ne ovat erityisen vaikeita tunnistaa ja korjata, koska niitä on usein vaikea toistaa

    Does Unit-Tested Code Crash? A Case Study of Eclipse

    Full text link
    Context: Software development projects increasingly adopt unit testing as a way to identify and correct program faults early in the construction process. Code that is unit tested should therefore have fewer failures associated with it. Objective: Compare the number of field failures arising in unit tested code against those arising in code that has not been unit tested. Method: We retrieved 2,083,979 crash incident reports associated with the Eclipse integrated development environment project, and processed them to obtain a set of 126,026 unique program failure stack traces associated with a specific popular release. We then run the JaCoCo code test coverage analysis on the same release, obtaining results on the line, instruction, and branch-level coverage of 216,392 methods. We also extracted from the source code the classes that are linked to a corresponding test class so as to limit test code coverage results to 1,267 classes with actual tests. Finally, we correlated unit tests with failures at the level of 9,523 failing tested methods. Results: Unit-tested code does not appear to be associated with fewer failures. Conclusion: Unit testing on its own may not be a sufficient method for preventing program failures.Comment: 5 pages, 6 figures, 17 reference
    corecore