Now a days the demand for the current information system is increasing so to cope with that formal methods are used to slot in the use of higher degree of formalism in the development process.Formal methods are a particular kind of mathematically based techniques for the specification, development and verification of software and hardware systems. Detail analysis of goals, benefits and limitations are discussed in this paper. This paper helps the engineers to formally identify the different stages of development phases.
In today’s digital era, businesses are facing a challenge of releasing commercial software projects of quality on time and within budget. Many companies are facing the problem of releasing a quality software in time and on budget that fulfills the user’s needs. Most of the software is delivered with some errors, with lack of complete functionality and sometimes with cost overrun that effects the software metrics. If The problems are detected in the earlier phase i-e. development phase that will helps in reducing the project budget.
When the errors are detected in the requirement phase during testing then the developers must fix those errors and then check the results through design and implementation and then at the end the product is retested. In order to make software product secure and to overcome the problem of budget that occurs due to errors in requirement specifications that can cost up to a hundred times to correct, when detected later in the development life cycle. To tackle this problem the cost effective methods and techniques are required to deal with the major risks that ensures the evidence of trust worthiness.
Formal methods are one of the feasible solutions to the above stated problems to reduce the number of errors in the delivered product and are a cost-effective way of developing high integrity software. Formal methods can be applied at various phases of development process such as at requirement specification phase (eliciting, articulating and representing requirements), software design phase, implementation phase (code verification), testing and software maintenance phase. The representation used in formal methods is called a formal specification language. The formal specification languages are based on set theory and first order predicate calculus, but this mathematical background was initially not fully formalized. A formal specification language can be used to model the most complex systems using relatively simple mathematical entities, such as sets, relations and functions.
This paper describes different kinds of formal methods in requirements engineering. Beyond this introduction, the organization of paper is as follows: Section 2 presents a brief discussion on the existing formal methods, whereas in Section 3, detailed study of formal methods is done. Section 4 presents ‘Strengths and Weaknesses’ of each one and in Section 5, a ‘Comparative Study’ is done on the basis of the critical review. Section 6 presents ‘Future Research Directions’ in the area. ‘Conclusion and Future Work’ is reported in Section 7.
3. Related Work:
For accomplishing a comparative study of the aforementioned methodologies, some attributes have been identified based on the well known practices with similar cases. These are described as follows:
I. Concurrency Control: Concurrency is a property used in distributed system that enables software systems to be served in large-scale distributed systems. This property allows several computations to execute simultaneously, and potentially interact with each other.
II. Supporting Tools: It helps in automation of any process. Supporting tools makes the steps easier; therefore, tools support is highly recommended.
III. Support for Abstraction: Abstraction is the process by which data and programs are defined with a representation similar in form to its meaning (semantics), while hiding away the implementation details. Abstraction captures only essential details about an object that are relevant to the current perspective.
IV. Object Oriented Concept: The object oriented concepts such as inheritance, polymorphism, and encapsulation are supported by some formal specification languages. Object oriented programming is an approach for developing software system based on the concepts of classes and objects.
V. Structuring: It is a mechanism for combining specifications, for example, to handle error handling or status information.
VI. Requirements Phase Perspective: Requirements phase is the backbone of any software to be developed . As it is well accepted by the research community, it is necessary for any methodology to consider this perspective
a) TYPES OF FORMAL SPECIFICATION STYLES:
4.1 Model- Based Languages :
The languages used for this class of specifications are characterized by the ability to describe the notion of internal state of the target system, and by their focus on the description of how the operations of the system modify this state. The underlying foundations are in discrete mathematics, set theory, category theory, and logic.
Abstract State Machines Proposed by Gurevich , abstract state machines (ASM), also called evolving algebras, form a specification language in which the notions of state and state transformation are central. A system is described in this formalism by the definition of states and by a finite set of (possibly non-deterministic) state transition rules, which describe the conditions (also called guards) under which a set of transformations (modifications of the machine’s internal state) take place.
There are three major model based language reported in the literature, which are given as follows:
Pronounced “Zed”, developed in 1977 by Jean-Raymond Abrail, Steve Schuman and Betrand Meyer; it was later further developed at the programming research group at Oxford University. This is a model based language used in requirement specification and verification phase, based on Zermelo-Frankel set-theory, lambda-calculus and first-order predicate logic.
The Vienna Development Method (VDM) is a formal language developed at the IBM laboratories in Vienna in the mid-1970s. It is a collection of techniques for the modeling, specification and design of computer-based system. It is a model based language used in specification phase. The most popular tool for VDM today (VDMTools) is a rather useful tool for development of formal models in VDM++ or VDM-SL.
VDM describes software systems and other systems as models . Models are described as objects and operations on objects. The objects represent input, output and internal state of the system. It is based on abstraction to develop top-down development of systems. Requirement specification is typically given as a rather abstract model. The objects capture only necessary properties for expressing the essential concepts of the operation of the intended software system.
A VDM model has a specific role in application areas, such as semantics of programming language, databases and construction of compilers. For expressing the models Meta-IV, which is the specification language of VDM, is used. The models are defined using a number of type definitions (for the objects) and function definitions (for the operations). Meta-IV is aimed at supporting abstraction in writing specifications. Abstraction is obtained through mathematical concepts, such as sets and functions. The abstraction provided by Meta-IV offers a set of mathematically based primitives that allow the construction of application-specific models.
When using VDM, an abstract model traditionally contains the following components :
• Semantic domains: These types describe the objects to be operated on.
• Invariants: Invariants are the Boolean functions that define a set of condition on the objects that is described by semantic domains.
• Syntactic domains: Types that define a “language” in which to express commands for manipulating the objects defined by the semantic domains.
• Well-formedness conditions: These are the functions that define when the commands, which is defined by the syntactic domains have a well-defined effect.
• Semantic functions: These functions provide the effect of commands on the objects defined by the semantic domains.
The B method is developed by Jean- Raymond Abrail in 1985. It is based on Abstract Machine notation. This method is basically used for specifying, refining and implementing software . A tool set is available supporting specification, design, proof and code generation .
The main concept follows in B- method is to initiate with an abstract model of the system under development, which roughly corresponds to the modules in many programming languages. A development process creates a number of proof obligations, which guarantee the correctness. Proof obligations can then be proven by automatic or interactive prover .
An abstract MACHINE of a given name contains information of CONSTANTS that describe the structure of the problem . It includes PROPERTIES that describe the constants and ASSERTIONS which are the list of theorems that help in proving. The machine also includes VARIABLES, their INITIALIZATION and an INVARIANT, which describe the unchanging properties of one or more variables. A variable in an abstract machine is defined to be a variable passed into the machine from outside and which the machine modifies. The OPERATIONS clause depicts the procedures which the machine is intended to perform. The format for a machine can be described as follows:
PRE P THEN S
...(download the rest of the essay above)