2 Definition & Notations

R. Baskaran

Software is more than just a program code. A program is an executable code, which serves some computational purpose. Software is considered to be collection of executable programming code, associated libraries and documentations.  Software, when made for a specific requirement is called software product.

Engineering on the other hand, is all about developing products, using well-defined, scientific principles and methods.

Software engineering is an engineering branch associated with development of software product using well-defined scientific principles, methods and procedures. The outcome of software engineering is an efficient and reliable software product.

Definitions

 

IEEE defines software engineering as:

  1. The application of a systematic, disciplined, quantifiable approach to the development,operation and maintenance of software; that is, the application of engineering to software.
  2. The study of approaches as in the above statement.

Fritz Bauer, a German computer scientist, defines software engineering as:

 

Software engineering is the establishment and use of sound engineering principles in order to obtain economically software that is reliable and work efficiently on real machines.

 

Software Evolution

 

The process of developing a software product using software engineering principles and methods is referred to as software evolution. This includes the initial development of software and its maintenance and updates, till desired software product is developed, which satisfies the expected requirements.

 

Evolution starts from the requirement gathering process. After which developers create a prototype of the intended software and show it to the users to get their feedback at the early stage of software product development. The users suggest changes, on which several consecutive updates and maintenance keep on changing too. This process changes to the original software, till the desired software is accomplished.

 

Even after the user has desired software in hand, the advancing technology and the changing requirements force the software product to change accordingly. Re-creating software from scratch and to go one-on-one with requirement is not feasible. The only feasible and economical solution is to update the existing software so that it matches the latest requirements.

 

Software Development Paradigm

 

This Paradigm is known as software engineering paradigms where all the engineering concepts pertaining to the development of software are applied. It includes various researches and requirement gathering which helps the software product to build. It consists of –

  • Requirement gathering
  • Software design
  • Programming Software Design Paradigm

This paradigm is a part of Software Development and includes –

  • Design
  • Maintenance
  • Programming

Programming Paradigm

This paradigm is related closely to programming aspect of software development. This includes –

  • Coding
  • Testing
  • Integration

Need of Software Engineering

 

The  need  of software  engineering  arises  because of higher  rate  of change  in  user requirements and environment on which the software is working.

  • Large software – It is easier to build a wall than to a house or building, likewise, as the size of software become large engineering has to step to give it a scientific process.
  • Scalability- If the software process were not based on scientific and engineering concepts, it would be easier to re-create new software than to scale an existing one.
  • Cost- As hardware industry has shown its skills and  huge  manufacturing  has lower down he price of computer and electronic hardware. But the cost  of software remains high if proper process is not adapted.
  • Dynamic Nature- The always growing and adapting nature of software hugely depends upon the environment in which user works. If the nature of software is always changing, new enhancements need to be done in the existing one. This is where software engineering plays a good role.
  • Quality Management- Better process of software development provides better and quality software product.

Characteristics of good software

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:

  • Operational
  • Transitional
  • Maintenance

Well-engineered and crafted software is expected to have the following characteristics:

 

Operational

 

This tells us how well software works in operations. It can be measured on:

  • Budget
  • Usability
  • Efficiency
  • Correctness
  • Functionality
  • Dependability
  • Security
  • Safety Transitional

This aspect is important when the software is moved from one platform to another:

  • Portability
  • Interoperability
  • Reusability
  • Adaptability
  • Maintenance

This aspect briefs about how well a software has the capabilities to maintain itself in the ever-changing environment:

  • Modularity
  • Maintainability
  • Flexibility
  • Scalability

In short, Software engineering is a branch of computer science, which uses well-defined engineering concepts required to produce efficient, durable, scalable, in-budget and on- time software products.

 

Software Engineering (SE) is the design, development, and documentation of software by applying technologies and practices from comtputer science, project management, engineering, application domains, interface design, digital asset management and other fields. The term software engineering was popularized after 1968, during  the  1968 NATO Software Engineering Conference (held in Garmisch, Germany) by its chairman

 

F.L. Bauer, and has been in widespread use since. The term software engineering has been commonly used with a variety of distinct meanings: ¾ As the informal contemporary term for the broad range of activities that was formerly  called programming and systems analysis; ¾ As the broad term for all aspects of the practice of computer programming, as opposed to the theory of computer programming, which is called computer science; ¾ As the term embodying the advocacy of a specific approach to computer programming, one that urges that it be treated as engineering discipline rather than an art or a craft, and advocates the codification of recommended practices in the form of software engineering methodologies. ¾ Software engineering is “(1) the application  of  a  systematic,  disciplined,  quantifiable  approach  to  the  development, operation, and maintenance of software, that is, the application of engineering to software,” and “(2) the study of approaches as in (1).” – IEEE Standard 610.12

 

Software engineering is defined as the systematic and scientific approach to develop, operate, maintain and to retire the software product. Software product means software for a large/medium size and complex problem. We get the real advantage of software engineering when it is applied to a project. Though it can also be used for the development of programs/small assignments. ¾ Software engineering is the application of science and mathematics, by which the computer hardware is made useful to the user via software (computer programs, procedures, and associated documentation).

 

Software engineering is concerned with the conception, development and verification of a software system. This discipline deals with identifying, defining, realizing and verifying the required characteristics of the resultant software. These software characteristics may include: functionality, reliability, maintainability, availability, testability, ease-of-use, portability, and other attributes. Software engineering addresses these characteristics by preparing design and technical specifications that, if implemented properly, will result in software that can be verified to meet these requirements. Software engineering is also concerned with the characteristics of the software development process. In this regard, it deals with characteristics such as cost of development, duration of development, and risks in development of software.

 

Software is often found in products and situations where very high reliability is expected, even under demanding conditions, such as monitoring and controlling nuclear power plants, or keeping a modern airliner aloft Such applications contain millions of lines of code, making them comparable in complexity to the most complex modern machines. For example, a modern airliner has several million physical parts (and the space shuttle about ten million parts), while the software for such an airliner can run to 4 million lines of code.

 

Software engineers advocate many different technologies and practices, with much disagreement. Software engineers use a wide variety of technologies and practices. Practitioners use a wide variety of technologies: compilers, code repositories, word processors. Practitioners use a wide variety of practices to carry out and coordinate their efforts: pair programming, code reviews and daily stand up meetings. The goal of every software engineer should be to bring an idea out of a previous planned model, which should be transparent and well documented. In spite of the enormous economic growth and productivity gains enabled by software, persistent complaints about the quality of software remain.

 

The act of writing software requires that developers summon the energy to find the answers they need while they are at the keyboard. Creating software is a performance that resembles what athletes do on the field, and actors and musicians do on stage. Some argue that Software Engineering need inspiration to spark the creation of code. Sometimes a creative spark is needed to create the architecture or to develop a unit of code to solve a particularly intractable problem. Others argue that discipline is the key attribute. Pair programming emphasizes this point of view.

 

The fundamental difference between a software and hardware is that software is a conceptual entity while hardware is physical entity. When the hardware is built, the process of building a hardware results in a physical entity, which can be easily measured. Software being a logical has the different characteristics that are to be understood.

 

Software is developed or engineered but it is not manufactured in the classical sense. Although   some   similarities   exist   between   software   development   and   hardware manufacture, the two activities are fundamentally different. In both  activities,  high quality is achieved through good design, but the manufacturing phase for hardware can introduce quality problems that are nonexistent (or easily corrected) for software. Both activities are dependent on people, but the relationship between people applied and work accomplished is entirely different. Both activities require the construction of a “product” but the approaches are different. Software costs are concentrated in engineering. This means that software projects cannot be managed as if they were manufacturing projects. ¾ Software doesn’t “wear out.” If you will use hardware, you will observe wear and tear with the passage of time. But software being a conceptual entity will not wear with the passage of time.

 

Most software is custom built, rather than being assembled from existing components. Consider the manner in which the control hardware for a computer-based product is designed and built: The design engineer draws a simple schematic of the  digital circuitry, does some fundamental analysis to assure that proper function will be achieved, and then goes to the shelf where catalogs of digital components exist. Each integrated circuit (called an IC or a chip) has a part number, a defined and validated function, a well-defined interface, and a standard set of integration guidelines. After each component is selected, it can be ordered off the shelf. According to the standard engineering discipline, a collection of standard design components is created. Standard screws and off-the-shelf integrated circuits are only two of thousands of standard components that are used by mechanical and electrical engineers as they design new systems. The reusable components have been created so that the engineer can concentrate on the truly innovative elements of a design, that is, the parts of the design that represent something new. In the hardware world, component reuse is a natural part of the engineering process. In the software world, it is something that has only begun to be achieved on a broad scale. In the end, we can say that software design is a complex and sequential process. A software component should be designed and implemented so that it can be reused in different programs since it is a better appro ach, according to finance and manpower. In the 1960s, we built scientific subroutine libraries that were reusable in a broad array of engineering and scientific applications. These subroutine libraries reused well-defined algorithms in an effective manner but had a limited domain of application. Today, we have extended our view of reuse to encompass not only algorithms but also data structure. Modern reusable components encapsulate both data and the processing applied to the data, enabling the software engineer to create new applications from reusable parts. For example, today’s graphical user interfaces are built using reusable components that  enable the creation of graphics windows, pull-down menus, and a wide variety of interaction mechanisms. The data structure and processing detail required to build the interface are contained with a library of reusable components for interface construction. Software components: If you will observe the working of mechanical /electrical /civil engineers, you will see the frequent use reusable components. To built a computer, they will not have to start from the scratch. They will take the components like monitor, keyboard, mouse, hard disk etc. and assemble them together. In the hardware world, component reuse is a natural part of the engineering process. Reusability of the components has also become the most desirable characteristic in software engineering also. If you have to design software, don’t start from the scratch, rather first check for the reusable components and assemble them. A software component should be designed and implemented so that t can be reused in may different applications. In the languages like C and Pascal we are seeing the presence of a number of library functions (The functions which are frequently required such as to compute the square root etc, are provided in the library and those can be used as such.). With the advent of Object oriented languages such as C++ and Java, reusability has become a primary issue. Reusable components prepared using these languages, encapsulate data as well as procedure. Availability of reusable components can avoid two major problems in the software development: (1) Cost overrun and (2) schedule slippage. If every time we will start from scratch, these problems are inevitable, as we have already realized in procedure oriented approach. In fourth generation languages also, we are not suppose to specify the procedural detail rather we specify the desired result and supporting software translates the specification of result into a machine executable program.

 

Software quality is defined as conformance to explicitly stated  functional  and performance requirements, explicitly documented development standards, implicit characteristics that  are expected of all professionally developed software. The above definition serves to emphasize three important points: 1. Software requirements are the foundation from which quality is measured. Lack of conformance to requirements is lack of quality. 2. Specified standards define a set of development criteria that guide the manner in which software is engineered. If the criteria are not followed, lack of quality will almost surely result. 3. There is a set of implicit requirements that often goes unmentioned (e.g., the desire for ease of user). If software conforms to its explicit requirements but fails to meet implicit requirements, software quality is suspect. “Good Software” needs to be fit for its purpose i.e. it does what it is intended to do. Software has various attributes that lend towards it being good or bad. External qua lity attributes are visible to anyone using the software. Reliability is an external quality attribute, which can be measured during or after implementation by testing how the software product relates to its environment. The internal quality of the software can be measured in terms of its technical attributes such as coupling and cohesion. Some may question the importance of internal quality attributes especially if the software seems to work well and the client is satisfied with it. It can be reasoned though that the internal quality attributes have an impact upon the external quality of the software. Low cohesion for example can lead to messy code, which may be very hard to understand and maintain. The ability to maintain the software system is of course an important factor to be considered when determining the overall quality of the software product.

 

Software may be applied in any situation for which a pre-specified set of procedural steps (i.e., an algorithm) has been defined. Information content and determinacy are important factors in determining the nature of a software application. Content refers to the meaning and form of incoming and outgoing information. For example,  many business applications use highly structured input data (e.g., a database) and produce formatted “reports.” Software that controls an automated machine (e.g., a numerical control) accepts discrete data items with limited structure and produces individual machine commands in rapid succession.

 

Information determinacy refers to  the predictability of the order and  timing of information. An engineering analysis program accepts data that have a predefined order, executes the analysis algorithm(s) without interruption, and produces resultant data in report or graphical format. Such applications are determinate. A multi-user operating system, on the other hand, accepts inputs that have varied content and arbitrary timing, executes algorithms that can be interrupted by external conditions, and produces output that varies as a function of environment and time. Applications with these characteristics are indeterminate. System software: System software is a collection of programs and utilities for providing service to other programs. Other system applications (e.g., operating system components, drivers, telecommunications processors) process largely indeterminate data. In either case, the system software area is characterized by heavy interaction with computer hardware; heavy usage by multiple users; concurrent operation that requires scheduling, resource sharing, and sophisticated process management; complex data structures; and multiple external interfaces. Real-time software: Software for the monitors/analyzes/controls real-world events as they occur is called real time. Elements of real-time software include a data-gathering component that collects and formats information from an external environment, an analysis component that transforms information as required by the application, a control/output component that responds to the external environment, and a monitoring component that coordinates all other components so that real-time response can be maintained. Business software: Business  information processing is  the  largest single software application area.  In a broad sense, business software is an integrated software and has many components related to a particular field of the business. Discrete “systems” for example, payroll, accounts receivable/payable, inventory have evolved into management information system (MIS) software that accesses one or more large databases containing business information. Applications in this area restructure existing data in a way that facilitates business operations or management decision-making. In addition to conventional data processing application, business software applications also encompass interactive computing. Engineering and scientific software:  Engineering  and  scientific  software have been characterized by “number crunching” algorithms. Applications range from astronomy to volcano logy, from automotive stress analysis to space shuttle orbital dynamics, and from molecular biology to automated manufacturing. However, modern applications within the engineering/scientific area are moving away from conventional numerical algorithms. Computer-aided design, system simulation, and other interactive applications have begun to take on real-time and even system software characteristics.

Quadrant 4 – Learn More/ Web Resources / Supporting Materials

Web Links

http://www.tutorialspoint.com/software_engineering/software_engineering_overview.htm
http://www.practicalprocess.com/seyp/definition.html
http://www.softwareengineerinsider.com/articles/what-is-software- engineering.html#.V44IRtJ97Dc

Supporting & Reference Materials

Roger S. Pressman, “Software Engineering: A Practitioner’s Approach”, Fifth Edition, McGraw Hill, 2001.
PankajJalote, “An Integrated Approach to Software Engineering”, Second Edition, Springer Verlag, 1997.
Ian Sommerville, “Software Engineering”, Sixth Edition, Addison Wesley, 2000.

Glossary

Starting char Term Definition Re late d Te rm
S Software Engineering It is the building of software systems which are so large or so complex that they are built by a team or teams of engineers Software Development
C Change Control Change control is a systematic approach to managing all changes made to a product or system Versioning
R Reliability It is the probability of failure-free software operation for a specified period of time in a specified environment. QoS, Software Quality
C Cost Estimation It is the approximation of the cost of a program, project, or operation. Estimate

Points to Ponder

S.No Points to Ponder
1. Good notations can clarify the relationships and interactions of interest.
2. The existence of standard practices is one of the distinguishing characteristics of a professional  discipline.
3. Team communication, product complexity, facilities and resources, etc are some of the quality and productivity factors.
4. Functionality, reliability usability, efficiency, maintainability are some of the characteristics of software quality.