Introduction To Software Engineering :

Today, software engineering is the most important technology with rapid development. National economy is also dependent upon this technology. Day by day more and more system are getting controlled by software.  Hence In this chapter we will discuss all such fundamental issues.

Basic concepts

Software is nothing but a collection of computer programs and related documents that are intended to provide desired features, functionalities and better performance.
Software products may be :-
  • Generic – That means developed to be sold to a range of different customers.
  • Custom – That means developed for a single customer according to their specification.

What is software engineering ?

Software engineering is a discipline in which theories, methods and tools are applied to develop professional software product.

In software engineering the systematic and organized approach is adopted. Based on the nature of the problem and development constraints various tools and techniques are applied in order to develop quality software.

  • Discipline – For finding the solution to the problem an engineer applied appropriate theories, methods and tools. While finding  the solutions, engineers must think of the organisational and financial constraints. Within these constraints only he/she has to fine the solution.
  • Product  – The software product gets developed after following systematic theories, methods and tools along with the appropriate management activities.
  • Differentiate between software engineering and computer science
Software Engineering
Software Engineering

Difference between system engineering and software engineering

    System engineering is an older disciple which is used to develop complex systems. In such system software is an essential  part. Hence system engineering takes care of following things such as
  • Hardware development.
  • Various policies that need to be adopted while developing the product.
  • Design process.
  • Deployment of the software in the desired system.

The specification of all the system components as well as the system architecture has to be done by the System Engineer.

   In older days the system engineers were assembling the complex parts of industrial or mechanical products but now use of software is increased. Hence many system engineers are involved in assembling or building the complex software solutions.

Concept of Software Process

The software process can be defined as the set of activities that has to be carried out in order to get the software product.

  • Software specification is generally a document in which customer and the software developer define the purpose and use of the software product that is to be developed. In this specification, it is necessary to specify various constraints on operation of the software.
  • Software development : It is a core process in which the required software is built.
  • Validation : After developing the software product it is necessary to check the software in order to validate it.
  • Software evolution : Sometimes there are major changes on organisational  or technological front and in such a situation the existing software product needs to be changed. Sometimes due to market demands the software has to be modified.

Software Process Model

The software process model can be defined as an abstract representation of process. The software process model consists of various process activities, role of people involved in process development and software product.
Waterfall Model : This model follows a liner approach. That means various activities such as requests, design, coding, testing and maintenance are carried out linearly.
Iterative Development : In this model a quick design approach is adopted. Requirement specification, development and validation are the activities that are overlapping.
Component Based Software Engineering (CBSE: In this model only required parts
(components) of the system are developed. There is no need to develop the complete new system from the part.

Cost in the Software Engineering

   The costs in the software engineering system depends upon the type of software being developed and the software process being used.
Software Engineering

Methods used in Software Engineering

Methods in software engineering bring the systematic approach in software engineering. By adopting proper method in the software development process the quality product gets developed. In 1970 structure analysis and design methods are used for software development. In 1980’s object oriented methods were proposed by Booch and Rumbaugh. From object oriented methodology a unified modelling language is built (UML). The language is commonly used in software industry for designing a software.

Automate the Software Process (or) What is CASE

Efficient software development process some supporting software tools are used. The CASE i.e Computer Aided Software Engineering is a technology which consist different programs that support various activities such as requirement analysis, system modeling, debugging and testing. There are some CASE tools which are helpful in generating the source code from given software model.
Satisfying the user requirement is not the only goal of good software. There are some essential attributes of good software and those are…
Maintainability : Sometimes there is a need to make some modifications in the existing software. A good software is software which can be easily modified in order to  meet the changing needs of the customer.
Usability : It is the ability of the software being useful. For making the software useful it is necessary that it should have proper GUI and documentation.
Dependability : The dependability is a property that includes reliability, security and safety of software, in other words the developed software product should be reliable and safe to use; it should not cause any damage or destruction.
Efficiency : The software should be efficient in its performance and it should not waste the memory.

Challenge in Software Engineering

  • Coping with legacy system. Old, valuable system must be maintained and updated. Hardware is evolved faster than software. If original developer have moved on managing, maintaining or integrating of software becomes a critical issue.
  • Heterogeneity challenge. Sometimes system are distributed and include a mix of hardware and software. This implies that software system must cleanly integrate with other different software systems, built by different organizations and teams using different hardware and software platforms.
  • Delivery time challenge. There is increasing pressure for faster delivery of software. As the complexity of system that we develop increases, this challenge becomes harder.

As software is an integral part of computer based systems, it is essential to apply software engineering principles and practices while developing software. Hence the main objective of software engineering is to adopt systematic, disciplined approach while building high quality software.

Software Characteristics – Software development is a logical activity and therefore it is important to understand basic characteristics of software. Some important characteristics of software
  • Software is engineered, not manufactured – Software development and hardware development are two different activities. A good design is a backbone for both activities. Quality problems that occur in hardware manufacturing phase cannot be removed easily. On the other hand, during software development process such problems can be rectified. In both the activities, developers are responsible for producing qualitative product.
  • Software does not wear out – In early stage of hardware development process the failure rate is very high because of manufacturing defects. But after correcting such defects the failure rate gets reduced.  The failure rate remains constant for some period of time and again it starts increasing because of  environment maladies
    • On the other hand software does get affected from such environmental maladies. Hence ideally it should have an “idealized curve” But due to some undiscovered errors the failure rate is high and drops down as soon as the errors get corrected. Hence in failure rating of software the “actual curve” is as shown below.
   During the life of software if any change is made, some defects may get introduced. This causes failure rate to be high. Before the curve can return to original steady state another change is requested and again the failure rate becomes high. Thus the failure curve looks like a spike. The frequent changes in software cause it to deteriorate.
   Another issue with software is that there are no spare parts for software. If hardware component wears out it can be replaced by another component but it is not possible in case of software. Therefore software maintenance is more difficult than the hardware maintenance.
   Most software is custom built rather than being assemble from components. While developing any hardware product at first the circuit design with desired functioning properties is created. Then required hardware components such as ICs, capacitors, and registers are assembled according to the design, but this is not done while developing software product. Most of the software is costume built.

What are the goals/objectives of software engineering?

While developing software following are common objectives :
  1. Satisfy user requirements – Many programmers simply don’t do what the end user want because they do not understand user requirements. Hence it becomes necessary to understand the demand of end user and accordingly software should be developed.
  2. High reliability – Mistake or bugs in a program can be expensive in terms of human lives, money, and customer relation. For instance Microsoft has faced many problems because earlier release of windows has many problems. Thus software should be delivered only if high reliability is achieved.
  3. Low maintenance costs –  Maintenance of software is an activity that can be done only after delivering the software to the customer. Any small change in software should not cause restructuring of whole software. This indicates that the design of software has poor quality.
  4. Delivery on time – It is very difficult to predict the exact on which the software can be completed. But a systematic development of software can lead to meet the given deadline.
  5. Low production costs – The software product should be cost effective.
  6. High performance – The high performance software are expected to achieve optimization in speed and memory usage.
  7. Ease of reuse – Use same software in different systems and software. Environment reduce development cost and also improve the reliability. Hence re-usability of developed software is an important property.