Reengineering legacy software with Dezyne
Reengineering legacy software with Dezyne Reengineering legacy software is undesirable but nevertheless occasionally unavoidable. In this paper, we show how Dezyne can be used to recover lost or poorly understood behaviour from a legacy codebase. The models of the rediscovered behavior will be both formally complete and correct. These models then offer a solid foundation for the further development of a software system. What is legacy software? An unpleasant but nevertheless unavoidable truth of software development is that conventionally developed software “rots” in time. Rot occurs slowly and insidiously, driven by the very nature of source code itself and the human factors that impinge on developing and maintaining it. It often starts when changes to source code are not reflected in documentation, leading to a loss of readily accessible information. It accelerates when development teams change and knowledge of – in the meantime, poorly documented – code is lost. It proliferates when new features are added by fresh software engineers, based on incomplete documentation and knowledge. It reaches its zenith as […]

Using the power of Dezyne’s verification and validation features to build cyber resilient applications
Using the power of Dezyne’s verification and validation features to build cyber resilient applications How resilient is your application? Imagine for a moment that an intruder has gained access to your network. There are various ways in which they might seek to compromise your operations. One of the simplest, blunt force methods is to look for an application with network interfaces and attempt to disrupt it by firing events at random into its exposed APIs. A more sophisticated attack could seek to influence the behaviour of an application by observing the flow of events and responses at an exposed API and attempting to unravel the semantics of the application’s interface. In either case the application will be exposed to unexpected, potentially errant behaviour. How certain are you that your software systems are resilient enough to cope with such an attack? How can you build cyber resilient applications? What’s the problem? Simply put, software systems are mind-bogglingly complex, to the extent that no human can begin to comprehend the entirety of their […]

Why software defects remain a challenge
Why software defects remain a challenge We are all aware that finding defects early in the product lifecycle saves time, money and reputations. The cost of fixing a defect increases exponentially as the defect propagates, so one would think that there would be huge pressure on engineers to eliminate defects in software specifications and designs. And yet, a conventional approach to software development performs only subjective analysis of specifications and designs. Specifications and designs are not subject to formal verification or validation and therefore potentially represent a veritable hive of defects, waiting to sting engineers further down the line. Conventional software engineering Consequentially conventional software engineering has diminished the role of specification and design, instead emphasizing the importance of coding and testing. The unavoidable result is rework, late in the development lifecycle. Add back into the equation the exponentially rising cost of fixing a defect as it propagates and it is easy to see why conventional software development suffers from poor predictability, high costs, delays and questionable quality. Of course, […]