Automated Crash Reproduction (ACR) is an area of software testing research that aims to reproduce software crashes to improve developers’ ability to debug programs. There has been little progress in applying ACR techniques to JavaScript, as the highly dynamic nature of JavaScript poses challenges for program analysis and synthesis. We present SynTest-ACR, the first tool for ACR in JavaScript, applying artificial intelligence techniques to evolve suitable reproduction cases. We have evaluated SynTest-ACR against the CrashJS dataset consisting of 453 crashes. As a baseline, we ported the state-of-the-art search-guiding fitness function from EvoCrash for Java, finding that it performs much worse when applied to JavaScript programs, and through comprehensively designing and evaluating alternative fitness functions more suitable for JS ACR we obtain an 18.9% increase in reproduction rate over this baseline for Syntest-ACR.
Dala is a novel capability-based programming model that ensures data-race freedom while also supporting efficient inter-thread communication. While Dala has been designed to inform the design of future programming languages, the question arises whether existing languages can be retrofitted with Dala capabilities. We report such a design called JDala. In JDala, Dala capabilities are added to Java using annotations and interpreted using bytecode instrumentation. With some examples we demonstrate that by adding three simple annotations to the language, we can avoid concurrency bugs like deadlocks and unexpected program behaviour resulting from shallow immutability of Java standard library APIs.
Software bugs often lead to software crashes, which cost US companies upwards of $2.08 trillion annually. Automated Crash Reproduction (ACR) aims to generate unit tests that successfully reproduce a crash. The goal of ACR is to aid developers with debugging, providing them with another tool to locate where a bug is in a program. The main approach ACR currently takes is to replicate a stack trace from an error thrown within a program. Currently, ACR has been developed for C, Java, and Python, but there are no tools targeting JavaScript programs. To aid the development of JavaScript ACR tools, we propose CrashJS: a benchmark dataset of 453 Node.js crashes from several sources. CrashJS includes a mix of real-world and synthesised tests, multiple projects, and different levels of complexity for both crashes and target programs.
Transient gradual typing imposes run-time type tests that typically cause a linear slowdown. This performance impact discourages the use of type annotations because adding types to a program makes the program slower. A virtual machine can employ standard just-in-time optimizations to reduce the overhead of transient checks to near zero. These optimizations can give gradually-typed languages performance comparable to state-of-the-art dynamic languages, so programmers can add types to their code without affecting their programs’ performance.
The Information and Communications Technology (ICT) industry in New Zealand is growing rapidly. The traditional university courses are preparing an insufficient number of graduates to sustain the growth. Many of the traditional graduate students lack key soft skills that are important in team based software development. This paper reports on the development of a conversion Master of Software Development degree. The students are all graduates with little or no computer science degrees, are taught key programming skills, with a focus on agile development. The programme begins by focusing on individual programming skills through solving problems. Later industrial partners are engaged by providing industrial problems to agile teams of students. The industrial partners are active partners in the agile teams as product owners. By solving the problems, the students develop both technical and non-technical skills while utilizing the skills obtained from previous studies. The results from the first year of the programme are encouraging. A key result is that a high number of students found work in paid IT positions before graduating. The main issue of the first year was introducing too many topics at the same time, over-assessment, not enough communication and contact time, little opportunity for the students to make their own experiences, and learning by making mistakes. The programme has been changed for the next year’s cohort to introduce less topics at once, provide time and space for learning, and a redesign of scheduling assessments.
IEEE 802.11 wireless backhaul networks (WBNs) have emerged as a practical solution for bridging access points and backbone networks with low cost and ease of installation. However, the IEEE 802.11 protocol operates in the unlicensed spectrum and experiences unregulated interference, making it difficult to guarantee quality of service (QoS). With newer and farther reaching applications being densely deployed in built environments, such as small cell cellular networks and smart grids, users are increasingly expecting high QoS and fair access. This increased expectation for high QoS motivates the study of goodput models for planning IEEE 802.11 WBNs in built environments. In this paper, we design a goodput distribution model with consideration of structured placement of WBN nodes in built environments and validate our goodput model through simulations. The results show that our model provides an accurate prediction of goodput distribution in IEEE 802.11 WBNs under different traffic demands and radio propagation conditions. Such a goodput model is useful for node placement and optimising routing and channel assignment algorithms in IEEE 802.11 WBNs.
Wireless mesh networks (WMNs) have many attractive characteristics, such as auto-configuration, self-management, and self-healing. With newer and farther reaching applications being developed in built environments, such as smart grids and intelligent transportation systems, users expect high quality of service and thus fairness is an important issue to be addressed. Channel assignment (CA) is the mechanism for allocating radio resources to the nodes and therefore plays a key role in managing fairness in WMNs. Fairness in WMNs depends on how wireless resources are allocated among the nodes. We examine interference models used in existing CA algorithms and find that CA algorithms using these models yield poor fairness because they only reflect local interference between a link and its interfering links. However, flow star- vation is due to network wide interference (i.e. global) involving border links and middle links. We propose a novel anti-starvation channel assignment al- gorithm (ASCA) for planning single radio WMN. Such ASCA algorithm lever- ages a new interference model that takes into account both local and global interference. Simulation results show the ASCA algorithm effectively allevi- ates flow starvation and improves fairness up to 62% compared with the best result from clique-based CA benchmarks. To the best of our knowledge, the proposed ASCA is the first one to optimise CA algorithms with consideration of both local and global interference.
Which comes first: the object or the class? Language designers enjoy the conceptual simplicity of object-based languages (such as Emerald or Self) while many programmers prefer the pragmatic utility of classical inheritance (such as Simula and Java). Programmers in object-based languages have a tendency to build libraries to support traditional inheritance, and language implementations are often contorted to the same end. In this paper, we revisit the relationship between classes and objects. We model various kinds of inheritance in the context of an object-oriented language whose objects are not defined by classes, and explain why class inheritance and initialisation cannot be modelled purely by delegation.
Combinations of structural and nominal object typing in systems such as Scala, Whiteoak, and Unity have focused on extending existing nominal, class-based systems with structural subtyping. The typical rules of nominal typing do not lend themselves to such an extension, resulting in major modifications. Adding object branding to an existing structural system integrates nominal and structural typing without excessively complicating the type system. We have implemented brand objects to explicitly type objects, using existing features of the structurally typed language Grace, along with a static type checker which treats the brands as nominal types. We demonstrate that the brands are useful in an existing implementation of Grace, and provide a formal model of the extension to the language.
Programming languages are enormously diverse, both in their essential concepts and in their accidental aspects. This creates a problem when teaching programming. To let students experience the diversity of essential concepts, the students must also be exposed to an overwhelming variety of accidental and irrelevant detail: the accidental differences between the languages are likely to obscure the teaching point. The dialect system of the Grace programming language allows instructors to tailor and vary the language to suit their courses, while staying within the same stylistic, syntactic and semantic framework, as well as permitting authors to define advanced internal domain-specific languages. The dialect system achieves this power though a combination of well-known language features: lexical nesting, lambda expressions, multi-part method names, optional typing, and plug gable checkers. Grace’s approach to dialects is validated by a series of case studies, including both extensions and restrictions of the base language.
Grace is a new object-oriented language that supports a variety of approaches to teaching programming. It integrates accepted new ideas in programming languages into a simple language that allows students and teachers to focus on the essential complexities of programming rather than the accidental complexities of the language. We motivate Grace, review its design, and evaluate it against Kölling’s criteria.