Software Engineering


Introduction

Software Engineering is the subdiscipline of Computer Science that attempts to apply engineering principles to the creation, operation, modification and maintenance of the software components of various systems. As with much of Computer Science, the subject of Software Engineering is at an very early stage in its development. It is much more of an art than a science, and at present has little in common which classical engineering.

What is engineering?

Engineering is the application of well-understood scientific methods to the construction, operation, modification and maintenance of useful devices and systems.

What is software?

Software is comprises the aspects of a system not reduced to tangible devices, e.g. computer programs and documentation. It is distinguished from hardware, which consists of tangible devices, and often exists as collections of states of hardware devices. The boundary between hardware and software can be blurry, as with firmware and microcode.

What is Software Engineering?

Someday, Software Engneering may well be concerned with the application of well-understood scientific methods to the construction, operation, modification and maintenance of software. Today, however, Sofware Engineering is concerned with finding ways in which to produce working software for predictable costs in predictable time. When the problems involved are very simple or when only one person is involved, implementing software to meet their own needs, there isn't much to be said, and we are a long way from having any scientific principles for the production of software. Therefore, the major focus of software engineering today is on well-tested heuristics for the production of software to solve complex problems when many people are involved in the process, as users, as analysts, as programmers, as managers, etc. Therefore most of the issues in Software Engineering are concenred with interactions among people, rather than with the production of software.

People

  • People are not interchangeable
  • People don't always do what they are told
  • People are different
  • People don't always work together very well
  • It is tempting to classify people to make work go smoothly:
  • see: www.humanmetrics.com/cgi-win/JTypes1.htm
  • see: www.personalitypathways.com/MBTI_intro.html
  • see: www.9types.com/

Systems

A system is an assemblage of components that interact in some manner among themselves and, possibly, with the world outside the system boundary.
We understand systems by decomposing them into
  • subsystems
  • system components

Some characteristics of software includes:

  • Software is developed or engineer.
  • Most of software is custom build rather than assemble from existing component.
  • Computer program and associated documentation.
  • Easy to modified.
  • Easy to reproduce.
  • Software product may be developed for a particular customer or for the general market.

Software development process

A set of activities that leads to the production of a software product is known as software process. Although most of the software are custom build, the software engineering market is being gradually shifted towards component based. Computer-aided software engineering (CASE) tools are being used to support the software process activities. However, due to the vast diversity of software processes for different types of products, the effectiveness of CASE tools is limited. There is no ideal approach to software process that has yet been developed. Some fundamental activities, like software specification, design, validation and maintenance are common to all the process activities.

Models

A software process model is an abstraction of software process. These are also called process paradigms. Various general process models are waterfall model, evolutionary development model and component-based software engineering model. These are widely used in current software engineering practice. For large systems, these are used together.

Waterfall model

The waterfall model was one of the first published models for the software process. This model divides software processes in various phases. These phases are:
  • Requirements analysis
  • Software design
  • Unit testing
  • Component testing
  • System testing
  • Maintenance

Theoretically the activities should be performed individually but in practice, they often overlap. During the maintenance stage, the software is put into use. During this, additional problems might be discovered and the need of new feature may arise. This may require the software to undergo the previous phases once again.

Agile model

"Agile Development" is an umbrella term for several iterative and incremental software development methodologies. Some of these methods include:
  • Extreme Programming (XP)
  • Scrum
  • Kanban or Lean
  • Crystal
  • Dynamic Systems Development Method (DSDM)
  • Feature-Driven Development (FDD)

Subdisciplines

Software engineering can be divided into ten subdisciplines. They are:
  • Software requirements: The elicitation, analysis, specification, and validation of requirements for software.
  • Software design: The process of defining the architecture, components, interfaces, and other characteristics of a system or component. It is also defined as the result of that process.
  • Software construction: The detailed creation of working, meaningful software through a combination of coding, verification, unit testing, integration testing, and debugging.
  • Software testing: The dynamic verification of the behavior of a program on a finite set of test cases, suitably selected from the usually infinite executions domain, against the expected behavior.
  • Software maintenance: The totality of activities required to provide cost-effective support to software.
  • Software configuration management: The identification of the configuration of a system at distinct points in time for the purpose of systematically controlling changes to the configuration, and maintaining the integrity and traceability of the configuration throughout the system life cycle.
  • Software engineering management: The application of management activities—planning, coordinating, measuring, monitoring, controlling, and reporting—to ensure that the development and maintenance of software is systematic, disciplined, and quantified.
  • Software engineering process: The definition, implementation, assessment, measurement, management, change, and improvement of the software life cycle process itself.
  • Software engineering tools and methods: The computer-based tools that are intended to assist the software life cycle processes, see Computer Aided Software Engineering, and the methods which impose structure on the software engineering activity with the goal of making the activity systematic and ultimately more likely to be successful.
  • Software quality: The degree to which a set of inherent characteristics fulfills requirements.

Comments

Popular Posts