113 research outputs found
Ohjelman staattinen analyysi lajittelualgoritmien tunnistamiseksi
Automaattinen ohjelman analyysi ja ohjelmakoodin tunnistus on kiinnostava ongelma tietotekniikka-alalla.
Syy tähän löytyy ohjelmistoteollisuudesta ja varsinkin ohjelmiston elinkaaren yhdestä vaiheesta: ylläpidosta.
Automaattisella ohjelman ymmärtämisellä ja ohjelmakoodin tunnistuksella tarkoitetaan järjestelmää, joka voisi kertoa käyttäjälle, mitä syötteenä saatu ohjelma näyttäisi tekevän, mitä algoritmia se muistuttaa ja kuinka paljon tai millainen rakenne ja tyyli ohjelmalla on.
Tällainen järjestelmä voi - hyvin ja laajasti kehitettynä - auttaa ohjelmistokehittäjiä ymmärtämään ylläpidettävän järjestelmän toimintaa ja säästämään heitä lukemasta ohjelmakoodia, joka on aikaa vievää toimintaa.
Tällaisella järjestelmällä olisi käyttöä myös muissa ohjelmiston elinkaaren vaiheissa: järjestelmä voisi helpottaa ohjelmistokehittäjien työtä ohjelmiston verifiointi- ja validointitehtävissä huomattavasti.
Kyseisestä järjestelmästä olisi apua myös yliopistoissa ja korkeakouluissa tarjolla olevien tietotekniikan kurssien yhteydessä suoritettavien tehtävien automaattisessa tarkastuksessa.
Tietyt tietotekniikan kurssit ovat yleensä laajoja, ja niiden suorittaminen vaatii opiskelijoilta monen tehtävän suorittamista.
Järjestelmä voisi ottaa vastaan opiskelijan lähettämän tiettyyn aiheeseen liittyvän tehtävän, ja kertoa sitten opettajalle, onko tehtävä ratkaistu oikein, ja jos ei, niin kuinka lähellä oikeaa ratkaisua se on.
Tässä diplomityössä tutkitaan aikaisempia automaattiseen ohjelman analyysiin ja ohjelmakoodin tunnistukseen liittyviä töitä ja esitetään erilaisia lähestymistapoja ongelmaan.
Uutena lähestymistapana esitetään mm ohjelmakoodissa käytettyjen muuttujien lukumäärään ja rooliin pohjautuva staattinen ohjelman analyysi ja koodin tunnistus.
Tämä työ rajataan koskemaan ainoastaan tunnettuja lajittelualgoritmeja, ja järjestelmän jatkokehitys ja sen toiminnan laajentaminen muiden algoritmien käsittelemiseksi jätetään tulevalle tutkimukselle.
Lopuksi kerrotaan työn muista rajauksista ja esitetään muutama ehdotus tulevalle tutkimukselle
A study of novice programmer performance and programming pedagogy.
Identifying and mitigating the difficulties experienced by novice programmers is an active
area of research that has embraced a number of research areas. The aim of this research
was to perform a holistic study into the causes of poor performance in novice
programmers and to develop teaching approaches to mitigate them. A grounded action
methodology was adopted to enable the primary concepts of programming cognitive
psychology and their relationships to be established, in a systematic and formal manner.
To further investigate novice programmer behaviour, two sub-studies were conducted
into programming performance and ability.
The first sub-study was a novel application of the FP-Tree algorithm to determine if
novice programmers demonstrated predictable patterns of behaviour. This was the first
study to data mine programming behavioural characteristics rather than the learner’s
background information such as age and gender. Using the algorithm, patterns of
behaviour were generated and associated with the students’ ability. No patterns of
behaviour were identified and it was not possible to predict student results using this
method. This suggests that novice programmers demonstrate no set patterns of
programming behaviour that can be used determine their ability, although problem
solving was found to be an important characteristic. Therefore, there was no evidence
that performance could be improved by adopting pedagogies to promote simple changes
in programming behaviour beyond the provision of specific problem solving instruction.
A second sub-study was conducted using Raven’s Matrices which determined that
cognitive psychology, specifically working memory, played an important role in novice
programmer ability. The implication was that programming pedagogies must take into
consideration the cognitive psychology of programming and the cognitive load imposed
on learners.
Abstracted Construct Instruction was developed based on these findings and forms a new
pedagogy for teaching programming that promotes the recall of abstract patterns while
reducing the cognitive demands associated with developing code. Cognitive load is
determined by the student’s ability to ignore irrelevant surface features of the written
problem and to cross-reference between the problem domain and their mental program
model. The former is dealt with by producing tersely written exercises to eliminate
distractors, while for the latter the teaching of problem solving should be delayed until
the student’s program model is formed. While this does delay the development of
problem solving skills, the problem solving abilities of students taught using this pedagogy
were found to be comparable with students taught using a more traditional approach.
Furthermore, monitoring students’ understanding of these patterns enabled micromanagement of the learning process, and hence explanations were provided for novice
behaviour such as difficulties using arrays, inert knowledge and “code thrashing”.
For teaching more complex problem solving, scaffolding of practice was investigated
through a program framework that could be developed in stages by the students.
However, personalising the level of scaffolding required was complicated and found to be
difficult to achieve in practice.
In both cases, these new teaching approaches evolved as part of a grounded theory study
and a clear progression of teaching practice was demonstrated with appropriate
evaluation at each stage in accordance with action researc
Guided instruction with Logo programming and the development of cognitive monitoring strategies among college students
As our society changes and becomes more complex, and as new knowledge and technology emerge, the need for teaching students to be independent thinkers and problem solvers increases more rapidly than ever before. Responding to the ever increasing societal demands, educators have sought for proper learning tools and methodologies to improve students\u27 higher-order thinking and problem solving skills. In particular, cognitive monitoring has been a primary concern of educators and cognitive psychologists. Cognitive monitoring has been regarded as one of the most important strategies in efficient thinking and problem solving. Logo programming has been considered a powerful tool to help students develop higher order thinking, an awareness of their thinking processes, and problem solving skills. Unfortunately, little evidence has been collected for the development of cognitive monitoring and problem solving through Logo programming;This research examined the effects of guided instruction with Logo programming on the development of cognitive monitoring strategies among college students. Guided instruction in this study involved three pedagogical elements. First, Logo programming was selected as a particular learning tool to teach cognitive monitoring strategies. Second, an explicit instructional model of cognitive monitoring processes was included in the process of solving Logo problems: decomposing, planning, executing, identifying errors, and debugging. Third, teacher mediated practice of cognitive monitoring activities was facilitated in a Logo programming environment as well as outside of the programming domain;The results of this study demonstrated positive effects of guided instruction with Logo programming on both near transfer and far transfer of cognitive monitoring strategies. The result also indicated that guided instruction contributed most significantly to the development of Logo error identification and debugging skills
Explainable digital forensics AI: Towards mitigating distrust in AI-based digital forensics analysis using interpretable models
The present level of skepticism expressed by courts, legal practitioners, and the general public over Artificial Intelligence (AI) based digital evidence extraction techniques has been observed, and understandably so. Concerns have been raised about closed-box AI models’ transparency and their suitability for use in digital evidence mining. While AI models are firmly rooted in mathematical, statistical, and computational theories, the argument has centered on their explainability and understandability, particularly in terms of how they arrive at certain conclusions. This paper examines the issues with closed-box models; the goals; and methods of explainability/interpretability. Most importantly, recommendations for interpretable AI-based digital forensics (DF) investigation are proposed
Uma comparação entre arquiteturas cognitivas : análise teórica e prática
Orientador: Ricardo Ribeiro GudwinDissertação (mestrado) - Universidade Estadual de Campinas, Faculdade de Engenharia Elétrica e de ComputaçãoResumo: Este trabalho apresenta uma comparação teórica e prática entre três das mais populares arquiteturas cognitivas: SOAR, CLARION e LIDA. A comparação teórica é realizada com base em um conjunto de funções cognitivas supostamente existentes no ciclo cognitivo humano. A comparação prática é realizada aplicando-se um mesmo experimento em todas as arquiteturas, coletando alguns dados e comparando-as usando como base algumas métricas de qualidade de software. O objetivo é enfatizar semelhanças e diferenças entre os modelos e implementações, com o objetivo de aconselhar um novo usuário a escolher a arquitetura mais apropriada para uma certa aplicaçãoAbstract: This work presents a theoretical and practical comparison of three popular cognitive architectures: SOAR, CLARION, and LIDA. The theoretical comparison is performed based on a set of cognitive functions supposed to exist in the human cognitive cycle. The practical comparison is performed applying the same experiment in all architectures, collecting some data and comparing them using a set of software quality metrics as a basis. The aim is to emphasize similarities and differences among the models and implementations, with the purpose to advise a newcomer on how to choose the appropriated architecture for an applicationMestradoEngenharia de ComputaçãoMestre em Engenharia Elétric
Automatic Algorithm Recognition Based on Programming Schemas and Beacons - A Supervised Machine Learning Classification Approach
In this thesis, we present techniques to recognize basic algorithms covered in computer science education from source code. The techniques use various software metrics, language constructs and other characteristics of source code, as well as the concept of schemas and beacons from program comprehension models. Schemas are high level programming knowledge with detailed knowledge abstracted out. Beacons are statements that imply specific structures in a program. Moreover, roles of variables constitute an important part of the techniques. Roles are concepts that describe the behavior and usage of variables in a program. They have originally been introduced to help novices learn programming.
We discuss two methods for algorithm recognition. The first one is a classification method based on a supervised machine learning technique. It uses the vectors of characteristics and beacons automatically computed from the algorithm implementations of a training set to learn what characteristics and beacons can best describe each algorithm. Based on these observed instance-class pairs, the system assigns a class to each new input algorithm implementation according to its characteristics and beacons. We use the C4.5 algorithm to generate a decision tree that performs the task. In the second method, the schema detection method, algorithms are defined as schemas that exist in the knowledge base of the system. To identify an algorithm, the method searches the source code to detect schemas that correspond to those predefined schemas. Moreover, we present a method that combines these two methods: it first applies the schema detection method to extract algorithmic schemas from the given program and then proceeds to the classification method applied to the schema parts only. This enhances the reliability of the classification method, as the characteristics and beacons are computed only from the algorithm implementation code, instead of the whole given program.
We discuss several empirical studies conducted to evaluate the performance of the methods. Some results are as follows: evaluated by leave-one-out cross-validation, the estimated classification accuracy for sorting algorithms is 98,1%, for searching, heap, basic tree traversal and graph algorithms 97,3% and for the combined method (on sorting algorithms and their variations from real student submissions) 97,0%. For the schema detection method, the accuracy is 88,3% and 94,1%, respectively.
In addition, we present a study for categorizing student-implemented sorting algorithms and their variations in order to find problematic solutions that would allow us to give feedback on them. We also explain how these variations can be automatically recognized
Models and evaluation of human-machine systems
"September 1993.""Prepared for: International Atomic Energy Association [sic], Wagramerstrasse 5, P. 0. Box 100 A-1400 Vienna, Austria."Part of appendix A and bibliography missingIncludes bibliographical referencesThe field of human-machine systems and human-machine interfaces is very multidisciplinary. We have to navigate between the knowledge waves brought by several areas of the human learning: cognitive psychology, artificial intelligence, philosophy, linguistics, ergonomy, control systems engineering, neurophysiology, sociology, computer sciences, among others. At the present moment, all these disciplines seek to be close each other to generate synergy. It is necessary to homogenize the different nomenclatures and to make that each one can benefit from the results and advances found in the other. Accidents like TMI, Chernobyl, Challenger, Bhopal, and others demonstrated that the human beings shall deal with complex systems that are created by the technological evolution more carefully. The great American writer Allan Bloom died recently wrote in his book 'The Closing of the American Mind' (1987) about the universities curriculum that are commonly separated in tight departments. This was a necessity of the industrial revolution that put emphasis in practical courses in order to graduate specialists in many fields. However, due the great complexity of our technological world, we feel the necessity to integrate again those disciplines that one day were separated to make possible their fast development. This Report is a modest trial to do this integration in a holistic way, trying to capture the best tendencies in those areas of the human learning mentioned in the first lines above. I expect that it can be useful to those professionals who, like me, would desire to build better human-machine systems in order to avoid those accidents also mentioned above
A Syntactical Reverse Engineering Approach to Fourth Generation Programming Languages Using Formal Methods
Fourth-generation programming languages (4GLs) feature rapid development with minimum configuration required by developers. However, 4GLs can suffer from limitations such as high maintenance cost and legacy software practices.
Reverse engineering an existing large legacy 4GL system into a currently maintainable programming language can be a cheaper and more effective solution than rewriting from scratch. Tools do not exist so far, for reverse engineering proprietary XML-like and model-driven 4GLs where the full language specification is not in the public domain.
This research has developed a novel method of reverse engineering some of the syntax of such 4GLs (with Uniface as an exemplar) derived from a particular system, with a view to providing a reliable method to translate/transpile that system's code and data structures into a modern object-oriented language (such as C\#).
The method was also applied, although only to a limited extent, to some other 4GLs, Informix and Apex, to show that it was in principle more broadly applicable. A novel testing method that the syntax had been successfully translated was provided using 'abstract syntax trees'.
The novel method took manually crafted grammar rules, together with Encapsulated Document Object Model based data from the source language and then used parsers to produce syntactically valid and equivalent code in the target/output language.
This proof of concept research has provided a methodology plus sample code to automate part of the process. The methodology comprised a set of manual or semi-automated steps. Further automation is left for future research.
In principle, the author's method could be extended to allow the reverse engineering recovery of the syntax of systems developed in other proprietary 4GLs. This would reduce time and cost for the ongoing maintenance of such systems by enabling their software engineers to work using modern object-oriented languages, methodologies, tools and techniques
Recommended from our members
Building expert systems: cognitive emulation.
Chapter 1 briefly introduces the concept of cognitive emulation, and outlines its current status. Chapter 2 reviews psychological research on human expert thinking. First, the study of expert thinking is placed in the context of modern cognitive psychology. Next, the principal methods and techniques employed by psychologists examining expert cognition are examined. The remainder of the chapter is given over to a review of the published literature on the nature and development of human expertise. Chapter 3 reviews the main arguments for and against cognitive emulation in expert system design. The tentative conclusion reached is that a significant degree of emulation is inevitable, but that a pure, unselective strategy of emulation is neither realistic nor desirable. Chapter 4 examines the prospects for cognitive emulation from a more pragmatic angle. Several factors are identified that represent constraints on the usefulness of a cognitive approach. However, a second set of factors is identified which should facilitate an emulation strategy - especially in the longer term. Some guidance is given on when to seriously consider adopting an emulation strategy. Chapter 5 presents a critical survey of expert system research that has already addressed the emulation issue. Six basic approaches to cognitive emulation are distinguished and evaluated. This helps draw out in more detail the implications of an emulation strategy for knowledge acquisition, knowledge representation and system architecture. The chapter concludes by discussing the issues that arise when different approaches to emulation are combined. Some guidance is offered on how this might be achieved. Chapter 6 summarizes the main themes and issues to have emerged, the design advice contained in the thesis, and the original contributions made by the thesis
- …