The term software engineering is composed of two word, software and engineering. Software is more than just a program code. A program is an executable code, which servers some computational purpose.
Software is consider to be executable programming code, associated libraries and documentations. Engineering on the other hand, is all about developing products using well defined scientific principle and methods.
So we cab define software engineering as an engineering branch associated with the development of software product using the well define scientific principle method and procedure.
The outcome of software engineering is an efficient on reliable software products. IEEE( Institute of Electrical and Electronics Engineers ) define software engineering as the application of systematic, discipline, quantifiable approach to the development, operation and maintenance of software.
The need of Software Engineering arise because of higher rate of change in user requirements and environment on which the software is working.
It is easier to build a wall than to a house, likewise as the size of software become large, Engineering has to step up to give it a scientific procedure.
If the software process were not based on scientific and engineering concept, it would be easier to recreate new software than to scale an existing one.
As hardware industry has shown its skills and view, manufacturing has lower down the price of computer and electronic hardware, but the cost of software remains high as proper process is not adopted.
The always growing and adapting nature of software usually depends upon the environment in which the user work. If the nature of software is always changing, new enhancement need to be done. This is where software engineering place a good role.
Better process of software development provides better and quality software product.
A software product can be judged by what it offers and how well it can be used. This software must satisfy on the following grounds:
This tell how well software works in operation. It can be measured on:
This aspect is important when the software is moved from one platform to another:
This aspect briefs about how well a software has the capabilities to maintain itself in the ever changing environment:
In short we can say software engineering is a way which tells us to make a software by using well define engineering concept required to efficient, durable, scalable, in budget and on time software product.
A Software Life Cycle model ( called as process model ) is a descriptive and diagrammatic representation of the software life cycle. A lifecycle model represents all the activities required to make a software product. In other words, a lifecycle model maps the different activities perform on a software software product from its inception to retirement. During any life cycle phase, more than one activity make also be carried out.
The development team must identify a suitable and then adhere to it. Without using of a particular life cycle model the development of a software product would not be in a systematic and disciplined manner. When a software product is being developed by a team there must be a clear understanding among team members about when and what to do. Otherwise it would lead to chaos and project failure.
Many life cycle model have been proposed so far, each of them has some advantages as well as some disadvantages. A few important and commonly used lifecycle models are as follows:
The main aim of feasibility study is to determine wether it would be financially and technically feasible to develop the product.
The aim of the requirements analysis and specifications phase is to understand the exact requirements of the customer and to document them properly.
This phase consist of two of the following activities:
(i) requirements gathering & analysis
(ii) requirements specifications
The goal of the design phase is to transform the requirement of specified in the SRS document into a structure that is suitable for implementation in some programming language in a technical terms during the design phase the software architecture is derived from the SRS document. There are two different approaches are available:
(i) Traditional design approach
(ii) Object oriented design approach
The purpose of the coding phase ( sometimes called the Implementation phase ) of software development is to translate the software design into source code.
Each component of the design is implemented as a program module. The end product of this phase is a set of program modules that help in individually tested. It involves testing each module in a solution as this is the most efficient way to debug the error identified at this stage.
Integration of different modules is undertaken once they have been coded and unit tested. During the integration and system testing phase, the modules are integrated in a plant manner. Integration is normally carried out incrementally over a number of steps. During each integration step, the partially integrated system is tested and a set of previously plant modules are added. Then finally, when all the modules have been successfully integrated and tested, system testing is carried out. The goal of system testing is to insure that the developed system of the develop software confirms to its requirement led out in the SRS document.
System testing usually consist of the three different kinds of testing activities:
Maintenance is a typical software product act that requires much more than the effort necessary to develop the product itself. Maintenance effort is roughly in the 40 : 60 ratio.
Maintenance involves performing anyone or more of the following 3 kinds of activities:
To overcome the major short coming of the classical waterfall model, we came up with the iterative waterfall model.
Here, we provide feedback paths for error collection has detected later in any phase. The advantage of this model is that there is a working model of the system at a very early stage of development which makes it easier to find functional or design flaws.
The disadvantage with this SDLC ( Software Development Life Cycle ) model is that it is applicable only to large and bulky software development project.
A prototype is a toy implementation of the system. A prototype usually exhibits limited functional capabilities, low reliability and insufficient performance compared to the actual software. A prototype is usually built using several shortcuts. The shortcuts might involve using inefficient, inaccurate or dummy functions. A prototype usually turns out to be a very crude version of the actual system.
There are several uses of a prototype. An important purpose is to illustrate the input data formats, messages, reports and the interactive dialogue to the customer. This is a valuable mechanism for gaining better understanding of the customer need.
Another reason for developing a prototype is that it is impossible to get the perfect product in the first attempt. The experience gain in developing the prototype can be used to develop the final product.
It is also called a successive version model. At first, a simple working model is built. It under goes functional improvement and we keep on adding new function till the desired system is built.
The Diagrammatic representation of this model appears like a spiral with many loops. The exact number loops in the spiral is not fixed. Each loop of the spiral represents a phase of the software process.For example, the innermost loop might be concerned with feasibility study, the next loop with requirement specifications, the next one with design and so on. Each phase in this model is split into four section.
The spiral model is called a Meta Model since it encapsulates all other life cycle models. Risk handling is inherently build into this model. The spiral model is suitable for development technically challenging software product. However this model is much more complex than the other model.
The classical waterfall model can be considered of basic and all other life cycle model as embellishment of this model. However the classical waterfall model cannot be used in practical development projects. This program is overcome in the iterative waterfall model. The iterative waterfall model is most widely used software development model so far. For this model, it's simple to understand and use. This is not suitable for very large projects and for projects that are subject too many risk.
The prototyping model is suitable for projects for which either the user requirements or the underline technical aspect are not well understood. This model is specially popular for development user interface part of the projects.
The incremental approach suitable for large problems which can be composed into a set of modules for incremental development and delivery. This model is also widely used for object oriented development projects. The spiral model suitable for development for technically challenging software product that have several kinds of risk. This is more complex than the other models that's why this is not used in ordinary project.
Before we start to develop any software it becomes quiet essential for us to understand and document the exact requirement of the customer. Experienced members of the development team carry out t his job. They are called system analyst.
The analyst starts requirement gathering analysis activity by collecting all information from the customer and then analyze the collecting information to obtain a clear thorough understanding of the product to be developed. With a view to remove to remove on ambiguities and inconsistency from the initial customer perception of the problem.
The following basic questions should be clearly understood by the analyst:
The important parts of SRS documents are:
The functional requirements part discusses the functionalities requirement from the system. The system is considered to perform a set of high level functions[ fi ]. Each function ' fi ' of the system can be considered as a transformation of set of input data [ ii ] to the corresponding set of output data [ Oi ]. The user can get some meaningful piece of work done using a high level function.
Non-functional Requirements deal with the characteristics of the system which can't be expressed as functions such as the maintenance of the system, portability of the system usability of the system.
The goals of Implementation part documents some general suggestion regarding development. These suggestion guide trade of among design goals. The goals of implementation session might document issue such as revision to the system functionalities that may be required in the future, new devices to be supported in the future, re-usability issues,etc. These are the items which the developers might keep in their mind during development.
The high level functional requirement often need to be identify either from an informal problem description document or from a conceptual understanding of the problem. The high level requirement characterized a way of system uses by some user to perform some meaningful piece of work. There can be many types of users of a system & their requirements from the system may be very different. So, it is often useful to identify the different types of users who might use the system & then try to identify the requirements from each user's perception.
eg. Consider the case of the library system where,
fi - search book function
strong - author's name
output - details of the author's book 7 location of these books in the library.
So, the function 'Search book' { fi } takes the author's name & transforms it into book detail.
For documenting the functional requirements we need to specify the set of functionalities supported by the system. A function can be specified by identifying the state at which the data is to be input to the system, it's input data domain, the output data domain & the type of processing to be carried on the input data to obtain the output data.
Example: Withdrawal cash from ATM
First determine the type of account that the user have & the account number from which the user wishes to withdraw cash. Check the balance to determine whether the requested amount is available in the account. if enough balance is available, it outputs required cash otherwise it generates an error message.
input → withdraw amount option
output → user prompted to enter the account type
input → user option
output → prompt to enter amount
input → amount to be withdrawn in integer value greater than 100 & less than 1000 in multiples of 100.
output → the requested cash & printed transaction statement.
processing → the amount is debited from the user's account if sufficient balance is available otherwise an error message is displayed.
The important properties of a good SRS Document are the following:
Concise
The SRS Document should be concised & at same time unambiguous, consistent & complete, verbose & if relevant description reduce readability & also increase error possibilities.
Structure
It should be well structured. A well structured document is easy to understand & modify.
Black Box View
It should only specify what the system should do & refrain from stalking how to do these. This means that the SRS Document should specify the external behaviour of the system & not discuss the implementation issue. The SRS Document should view the system to be developed as black box & should specify the externally visible behaviour of the system. For this reason the SRS Document is also called the black box specification of the system.
Conceptual Integrity
It should show conceptual integrity so that the reader can easily understand it.
Response to Undesired Event
It should characterized acceptable responses to undesired event. These are called response to exceptional conditions.
Verifiable
All requirements of the system as documented in the SRS Document should be verifiable. This means that its should be possible to determine whether or not requirements have been made in an implementation.
The important problem that an organization would face if it doesn't develop a SRS Document are as following -
→ It would be very difficult to understand that document.
→ It would be very much difficult to modify that document.
→ Conceptual integrity in that document would not be shown.
→ The SRS document might be incomplete & inconsistent.
A decision tree gives a graphic view of the processing logic involved in decision making & the corresponding actions taken. The edges of a decision tree represent conditions & the leaf node represents the actions to be perform depending on the outcome of testing the condition.
Example: Consider library membership automation software [LMS] where it should support the following three option:
When the new member option is selected the software ask details about the member like member's name, address, phone no, etc.
If proper information is entered then a membership record for the member is created & a bill is printed for the annual membership charge + the security deposit payable.
If the renewal option is chosen, the LMS ask for the members name & his membership number to check whether he is a valid member or not.
If the membership is valid then membership expiry date is updated & the annual membership bill is printed, otherwise an error message is displayed.
If the cancel membership option is selected then the software ask for member's name & his membership number.
The membership is cancelled, a cheque for the balance amount due to the member is printed & finally the membership record is deleted from the database.
A decision table is used to represent the complex processing logic in a tabular or a matrix form. The upper rows of the table specify the variables or conditions to be evaluated. The lower rows of the table specify the action to be taken when the corresponding conditions are satisfy. A column in a table is called Rule.
Rule implies that if a condition is true, then the corresponding action is to be executed.
Conditions | ||||
---|---|---|---|---|
Valid Selection | No | Yes | Yes | Yes |
New Member | - | Yes | No | No |
Renewal | - | No | Yes | No |
Cancellation | - | No | No | Yes | Actions |
Display error message | x | - | - | - |
Ask member's details | - | x | - | - |
Build customer records | - | x | - | - |
Generate bill | - | x | x | - |
Ask member's name & membership number | - | - | x | x |
Update expiry date | - | - | x | - |
Print cheque | - | - | - | x |
Delete record | - | - | - | x |
Software Design is a process to transform user requirement into some suitable forms which helps the programmer in software coding & implementation. For accessing user requirement and SRS Document is created whereas for coding and Implementation, there is a need of more specific and detailed requirements in software terms. The output of this process can directly be used into implementation in programming language. Software design is the first step in SDLC ( Software Design Life Cycle ) , which moves consubstantial from problem domain to solution domain.
It tries to specify how to fulfill the requirement mention in SRS.
There are three levels of software design.
The architectural design is the highest abstract version of the system. It identifies the software as a system with many component interactive with each other at this level, the designer get the idea of proposed solution domain.
The high level design breaks single entity, multiple component concept of architectural design into less abstract view of sub system modules and depicts their interaction with each other. High level design focuses on how the system along with all of its components can be implemented in form of modules. It recognize modular structure of each sub system and their relation and interaction among each other.
Detailed design deals with the implementation part of what is seen as a system and its sub system in the previous tool designs. It is more detailed towards modules and their implementation. it defines logical structure of each module and their interfaces to communicate with other modules.
Modularization is a technique to divide a software into multiple discrete and independent modules, which are expected to be capable of carrying out the task separately. These modules may work as a basic construct for the entire Software. Designers tends to design modules such that they can be executed and compiled separate and independent. Modular design unintentionally follows the rules of divide and conquer problem solving technique. This is because there are many other benefits attached with the modular design of a software.
In Software Design, concurrency is implemented by splitting the software into multiple independent unit of execution, like modules and executing them in parallel. In other words, concurrency provides capability to the software to execute more than one part of code in parallel to each other. It is necessary for the programmers and designer to recognize those modules, which can be made parallel execution.
eg, The spelling check feature in word processor is a module of software, which runs alongside the word processor itself.
When a software program is modularized, its task are divided into several modules based on some characteristics. As we know, modules are set of instructions put together in order to achieve some task. They are considered as single entity but may refer to each other to work together. There are measures by which the quality of a design of modules and their interaction among them can be measured. The measures are called as coupling and cohesion.
Cohesion is a measure that defines the degree introdependibility within element of a module. The greater the cohesion, the better is the program design. There are seven types of cohesion-
Coup0ling is a measure that defines the level of interdependability among modules of a program. It tells that what level the modules interfere and interact with each other. The lower the coupling, the greater the program. There are five levels of coupling-
The output of software design process is design documentation pseudo codes, detailed logic diagrams, process diagrams & detailed description of all functional & non-functional requirements.
The next phase, which is the implementation of software, depends on all outputs mention above. It is then becomes necessary to verify output before preceding to the next phase. The early any mistake is detected, the greater it is or it might not be detected until testing of the products. If the outputs of design phase is in formal notation form, then their associated tools for verification should be used otherwise a thorough design review can be used for verification & validation.
A good design review is important for good software design, accuracy & quality.
In function oriented design, the system is comprised of many small sub system known as functions. These functions are capable of performing significant task in the system. The system is considered as top view of all function. Function oriented design inherit some properties of structure design where divide & conquer methodology is used. This design mechanism divides the whole system into smaller functions, which provides means of abstraction by concealing the information & their operation.
Another characteristics of fun is that when a program calls a function, the function changes the state of the program. Sometimes is not acceptable by other modules.
Function oriented design works well where the system state doesn't matter & program/fun work on input rather than on a state.
The whole system is seen as how data flows in the system by means of data flow diagram.
Object oriented design works around the entities & their characteristics instead of functions involved in the software system. The whole concept of Software solution revolves around the engaged entities.
The important concept of object oriented design-
Software design process can be perceived as a series of well defined steps. It may varies according to design approach [fun oriented or object oriented]. It may have the following steps involves:
There are two generic approach for software designing-
Software analysis and designed includes all activities. Which helps the transformation of requirement specification includes implementation. Requirement specification specify all functional & non-functional expectation from the software. These requirement specification come in the shape of human readable and understandable documents. Software Analysis and Design is the intermediate stage, which helps human readable requirements to be transformed into actual code. There are four analysis and design tools used by software designers.
Capable of depicting incoming data flow & stored data. The DFD doesn't mention about how data flows through the system. There is a difference between DFD &Flowchart. The flowchart depict flow of control in program module, DFD depict flow of data in the system at various levels. DFD doesn't contain any control over branch elements.
DFD can show / represent, destination storage & flow of data using the following set of component
The main reason why DFD's technique is so popular is because of the fact DFD is very simple to understand & use. Starting with a set of of high level function that a system performs are DFD model hierarchically represents various sub functions. The data flow diagramic technique also follows a very simple set of informative concept & rules DFD is an elegant modeling technique that turns out to be useful not only to represent the results of structured analysis of a software problem, but also form several other applications such as showing the flow of documents or items in an organization.
A data dictionary list or data items appearing in the DFD model of a system. A data dictionary list the purpose of all data items & the definition of all composite data items in terms of their components data items.
There are some preemptive data items using the following data definition operations.
+ [Addition Sign]: Denotes composition of two data items.
, [Comma Sign]: Represents selection, that is any one of data items listed in the brackets can occur.
( ) [Parenthesis]: The content inside the brackets represent optional data which may or may not appear.
{ } [Curly Brackets]: Represents iterative data definition.
= [Equal Sign]: Represent equivalence.
/* */ [Forward slash with asterisk]: Anything appearing within this symbol considered as a comment.
This is the highest level DFD which provides an overview of the entire system. It shows the major processes data flow & data stores in the system, without providing any details about the internal working of these processes.
This level provides a more detailed view of the system by breaking down the major processes identified in the level zero DFD into sub processes. Each sub process is defected as a separate process on the Level one DFD. Data close and data stores associated with each sub processes.
This level provides an even more detailed view of the system by breaking down the sub processes identify in the Level One DFD into further sub processes.
This is the most detailed level of the DFD's which provides a detailed view of the processes, data flow and data stores in the system. This level is used for complex system, where one high level of detailed is required to understand the system, each process on the Level Three DFD is depicted with a detailed description of its input, processing and output.
Example: Make a DFD for railway reservation.
The aim of structured design is to transform the result of structured analysis (DFD Representation ) into a structure chart. Structured Design provides two methods to guide & transformation of a DFD into a structure chart-
(i) Transform Analysis
(ii) Transaction Analysis
Normally, one start with the level 1 DFD transform it into module representation using either the transform or the transaction Analysis and then proceed towards the lower level DFDs. At each level of transformation it is important to first determine whether the transform or transaction analysis is applicable to a particular DFD.
A structure chart represents the software architecture, that is the various modules making up the system, the dependency and the parameters that are passed among the different modules. hence, the structure chart representation can be easily implemented using some programming language.
The basic building blocks which are used to design structure charts are the following-
We are all familiar with the flow chart representation of a program. Flow chart is a convenient technique to represent the flow of control in a program. A structure chart differs from a flow chart in three principle ways.
Transform Analysis identifies the primary function components modules and the high level inputs and outputs.
The DFD in few types of parts-
The input portion of DFD includes processes that transform input data from physical (character from terminal ) to logical forms (internal table, list ). Each input portion is called an Afferent Branch
The output portion of a DFD transform output data from logical to physical form. Each output portion is called efferent branch. The remaining portion of a DFD is called the central transform.
(i) Model: A model captures aspects important for some application while of abstracting the rest. A model in the context of software development can be graphical, mathematical, textual or program code based. Models are very useful in documenting the design and analysis results. Graphical Models are very popular because they are easy to understand and construct. UML is primary tool of graphical modeling tool.
An important reason behind constructing a model is that it helps manages complexity. Once models of a system have been constructed, these can be used for a variety of purpose during Software development including analysis, specification, code generation, design, visualize and understand the problem and the working of a system and testing.
In all these application, the UML models can not only used to document the result but also to arive the result themselves.
As the name implies, is a modeling language. It may be used to visualize, specifies, construct, document artifacts of a software system. It provides a set of notations (examples, rectangles, lines, circles) to create a visual model of the system. Like any other language, UML has its own syntax, and symbols and sentence formation rules and semantics ( meanings of symbols and sentences ). UML is not the system design or development methodology but can be used to document. Object Oriented and Analysis results obtained using same methodology
In the late 1980s and early 1990, there was a proliferation of object oriented design technique and innovation. Different Software Development houses were using different notation to document there object oriented designs. These diverse notation used to give rise to a lot of confusion. UML has develop to maintain the standard of object oriented modeling notation. The principles ones in use were-
(i) Object Management technology ( Rumbough 1991 )
(ii) Booch's methodology ( Booch 1991 )
(iii) Object Oriented Software Engineering ( Jacobson 1992 )
(iv) Odell's methodology ( Odell 1992 )
(v) Shaler and Mellor methodology ( Shaler 1992 )
The UML diagram are categorized into structured diagram, behavioral diagram & also interaction, overview diagrams. The diagrams are hierarchically classified in the following diagram-
Structural Diagram depicts a static view or structure of a system. It is widely used in the documentation of software architecture. It has class diagrams, companies diagrams, object diagrams, composite structure diagrams, deployment diagrams, package diagrams.
Class diagram are one of the most widely used diagram. It is the backbone of all the object oriented software system. It displays the system's class, attributes and methods. It is helpful in recognizing the relation between different object as well as classes.
Composite structure diagram shows parts within the class. It displays the relationship between the parts and their configuration that certain the behavior of the class. Similar to class diagram, just the fact it represents individual parts in a detailed manner when compared with class diagram
It described the static structure of the system at a particular point in time. It can be used to test the accuracy of class diagram. It represents distinct instance of classes and the relationship between them.
It portrays the organization of the physical components within the system. It is used for modeling execution details. It determines whether the desired functional requirements have been considered by the plant development or not. It shows the structural relationship between the elements of a software system.
It represents the system's software and its hardware by telling what the existing physical components are and what software are running on them. It produce information about system software. It is incorporated whenever software is used, distributed for deployed access multiple machines with different configuration.
It is used to elaborate how the packages and their element are organized. It shows the dependencies between distinct packages.It manages UML Diagrams by making it easily understandable. It is used for organizing the class and used case diagram.
To be updated . . .