Page 175 - DCAP305_PRINCIPLES_OF_SOFTWARE_ENGINEERING
P. 175
Unit 8: Detailed Design
applications. The scientific foundation for such applications includes computational logic and Notes
logic-based AI.
Algorithmic: Algorithmic is the part of computer science that deals with the design and analysis
of algorithms and data structures and constitutes the scientific foundation for reasoning about
resources used in computing such as time and space. This covers both the design and analysis
of efficient algorithms solving concrete problems, and also with identifying common patterns
of problems and associated algorithmic paradigms that can lead to efficient solutions for classes
of problems.
Computational Logic: Computational logic is the study of logic and logical methods within
computer science. Logic is the study of valid inferences, and in computational logic it is studies
how to automate such inferences on a computer. Computational logic is used for the specification
and verification of software and hardware systems, for topics in databases and programming
languages, and for logic-based AI, such as automated reasoning and knowledge-based systems
The basic goal in detailed design is to specify the logic for the different modules that have
been specified during system design. Specifying the logic will require developing an algorithm
that will implement the given specifications. Here we consider some principles for designing
algorithms or logic that will implement the given specifications. The term algorithm is quite
general and is applicable to a wide variety of areas. For software we can consider an algorithm
to be an unambiguous procedure for solving a problem. A procedure is a finite sequence of
well-defined steps or operations, each of which requires a. finite amount of memory and time
to complete. In this definition we swum that termination is an essential property of procedures.
From now on we will use procedures, algorithms, and logic interchangeably.
There are a number of steps that one has to perform while developing an algorithm. The starting
step in the design of algorithms is statement of the problem. The problem for which an algorithm
is being devised has to be precisely and clearly stated and properly understood by the person
responsible for designing the algorithm. For detailed design, the problem statement comes from
the system design. That is, the problem statement is already available when the detailed design
of a module commences. The next step is development of a mathematical model for the problem.
In modelling, one has to select the mathematical structures that are best suited for the problem.
It can help to look at other similar problems that have been solved. In most cases, models are
constructed by taking models of similar problems and modifying the model to suit the current
problem. The next step is the design of the algorithm. During this step the data structure and
program structure are decided. Once the algorithm is designed, its correctness should be verified.
No clear procedure can be given for designing algorithms. Having such a procedure amounts
to automating the problem of algorithm development, which is not possible with the current
methods. However, some heuristics or methods can be provided to help the designer design
algorithms for modules. The most common method for designing algorithms or the logic for a
module is to use the stepwise refinement technique.
The stepwise refinement technique breaks the logic design problem into a series of steps, so that
the development can be done gradually. The problem starts by converting the specifications of
the module into an abstract description of an Algorithm containing a few abstract statements,
in each step; one or several statements in the algorithm developed so far are decomposed into
more detailed instructions. The successive refinement terminates when all instructions are
sufficiently precise that they can easily be converted into programming language statements.
During refinement, both data and instructions have to be refined. A guideline for refinement is
that in each step the amount of decomposition should be such that it can be easily handled and
that represents one or two design decisions. Generally, detailed design is not specified using
formal programming languages, but using languages that have formal programming like outer
LOVELY PROFESSIONAL UNIVERSITY 169