Network


Latest external collaboration on country level. Dive into details by clicking on the dots.

Hotspot


Dive into the research topics where Jonathan Nicholson is active.

Publication


Featured researches published by Jonathan Nicholson.


Science of Computer Programming | 2014

Automated verification of design patterns: A case study

Jonathan Nicholson; Amnon H. Eden; Epameinondas Gasparis; Rick Kazman

Representing design decisions for complex software systems, tracing them to code, and enforcing them throughout the lifecycle are pressing concerns for software architects and developers. To be of practical use, specification and modeling languages for software design need to combine rigor with abstraction and simplicity, and be supported by automated design verification tools that require minimal human intervention. This paper examines closely the use of the visual language of Codecharts for representing design decisions and demonstrate the process of verifying the conformance of a program to the chart. We explicate the abstract semantics of segments of the Java package java.awt as a finite structures, specify the Composite design pattern as a Codechart and unpack it as a set of formulas, and prove that the structure representing the program satisfies the formulas. We also describe a set of tools for modeling design patterns with Codecharts and for verifying the conformance of native (plain) Java programs to the charts.


Formal Methods in System Design | 2013

Modeling and visualizing object-oriented programs with Codecharts

Amnon H. Eden; Epameinondas Gasparis; Jonathan Nicholson; Rick Kazman

Software design, development and evolution commonly require programmers to model design decisions, visualize implemented programs, and detect conflicts between design and implementation. However, common design notations rarely reconcile theoretical concerns for rigor and minimality with the practical concerns for abstraction, scalability and automated verifiability. The language of Codecharts was designed to overcome these challenges by narrowing its scope to visual specifications that articulate automatically-verifiable statements about the structure and organization of object-oriented programs. The tokens in its visual vocabulary stand for the building-blocks of object-oriented design, such as inheritance class hierarchies, sets of dynamically-bound methods, and their correlations. The formalism was tailored for those pragmatic concerns which arise from modeling class libraries and design patterns, and for visualizing programs of any size at any level of abstraction. We describe design verification, a process of proving or refuting that a Java program (i.e. its native code) conforms to the Codechart specifying it. We also describe a toolkit which supports modeling and visualization with Codecharts, as well as a fully-automated design verification tool. We conclude with empirical results which suggest gains in both speed and accuracy when using Codecharts in software design, development and evolution.


working conference on reverse engineering | 2008

Navigating Through the Design of Object-Oriented Programs

Epameinondas Gasparis; Jonathan Nicholson; Amnon H. Eden; Rick Kazman

The design navigator is a tool for reverse-engineering object-oriented programs into charts at any level of abstraction. The design navigator discovers the object-oriented building blocks in the design of programs and visualises them in terms of LePUS3, a formal design description language. We demonstrate that program visualization in a formal language is not only possible in principle but also of practical benefit.


symposium on visual languages and human-centric computing | 2012

Linking codecharts with programs

Jonathan Nicholson; Aidan Delaney; Gem Stapleton

Codecharts are expressively lightweight whilst sufficiently rich to develop insight into program design. This paper contributes an informal description of the semantics of codecharts using the abstract syntax defined in [4]. Future work is to further formalize the semantics, define an inference system in which to prove soundness and completeness, and to investigate applications. In particular, we believe that some interesting program metrics, ascertaining program complexity or the level of dependencies and coupling present, can be readily defined and visualized using codecharts. For instance, we can make the area of an ellipse proportional the level of coupling, with relatively large ellipses indicating the need to consider refactoring. Such applications of codecharts could lead to improved software design and understanding.


Codecharts: Roadmaps and blueprints for object-oriented programs 1st | 2011

Codecharts: Roadmaps and blueprints for object-oriented programs

Amnon H. Eden; Jonathan Nicholson


Archive | 2007

Verification of LePUS3/Class-Z Specifications: Sample models and Abstract Semantics for Java 1.4

Jonathan Nicholson; Amnon H. Eden; Epameinondas Gasparis


Archive | 2007

The 'Gang of Four' Companion: Formal specification of design patterns in LePUS3 and Class-Z

Amnon H. Eden; Epameinondas Gasparis; Jonathan Nicholson


Archive | 2009

Automated verification of design patterns with LePUS3

Jonathan Nicholson; Epameinondas Gasparis; Amnon H. Eden; Rick Kazman


distributed multimedia systems | 2012

Formalizing the syntax of Codecharts

Jonathan Nicholson; Aidan Delaney; Gem Stapleton


nasa formal methods | 2009

Verification of Design Patterns with LePUS3.

Jonathan Nicholson; Epameinondas Gasparis; Amnon H. Eden; Rick Kazman

Collaboration


Dive into the Jonathan Nicholson's collaboration.

Top Co-Authors

Avatar
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Researchain Logo
Decentralizing Knowledge