Software Development Process 1 | Introduction to Software Engineering

Series: Software Development Process

Software Development Process 1 | Introduction to Software Engineering

  1. Introduction to Software Engineering

(1) Discipline of Software Engineering

In order to build high-quality software that works and fits our budget, we should have the following disciplines of software engineering,

  • Methodologies
  • Techniques
  • Tools

(2) The Software Crisis

Before the 60s, the size and complexity of software were very limited and hardware components were dominating the scene. Then in the 60s, people realized they couldn't create the software they needed, and the result of this is called the software crisis. There are three major reasons for the software crisis,

  • increasing product complexity
  • slow programmer’s productivity growth
  • rising demand for softwares

(3) Development Effort

Even though people have demands for software engineering, it is not an easy task to find the right person at that time. There is an increasing amount of development effort needed due to product complexity and the development effort is not linear.

The programming effort is something that the heroic effort of an individual developer can get the job done. If you’re a good programmer you can go sit down and do it right. This includes,

  • class exercises
  • small project
  • team project

However, for the software engineering effort, no matter how much programming languages, development environments, and software tools improved, developers just could not keep up with increasing software size and complexity. This includes,

  • word processor
  • operating system
  • distributed system

(4) 9 Software Development Contracts

This is a study performed by Davis in the 1990s and the total cost of this study is 7 million dollars. The study is performed on nine software projects and the result is,

  • some are useable as delivered: only a small segment
  • others are useable after changes (with additional costs): a medium segment
  • others are useable after extensive modification (even more costs): a medium segment
  • others are delivered but never successfully used: a large segment
  • others are never delivered: a large segment

The last 2 segments took 5 of the total 7 million dollars. In short, it shows clear evidence that the softwares were too difficult to build and the software engineering industry is facing a crisis.

This result led to the NATO Software Engineering Conference in January 1969, which is now what we considered as the birth of software engineering development.

(5) The Definition of Software Engineering

Software engineering is fundamentally going from an abstract idea in somebody’s head to a concrete system that actually implements that idea and hopefully in the right way.

(6) The Definition of Software Processing

Software processing is a way for breaking down an unimaginable task into smaller steps that we can tackle individually. We must have this process for the following several reasons,

  • we can not just sit down and develop a non-trivial system
  • we need to break down the software in a systematic way
  • we need to break the software down in a more or less formal way

(7) Different Kinds of Software Processes

Depending on the applications we are developing, there can be multiple software processes.

  • Waterfall process: go from one phase to another as waterfalls in a waterfall
  • Evolutionary prototyping process: start with an initial prototype and evolve it based on feedback from the customers
  • Rational Unified Process (RUP)/Unified Software Process (USP): this is a process that heavily based on the use of UML
  • The family of Agile processes: we may sacrifice the disciplines a little bit to be more flexible and more able to account for changes in requirements

(8) The Definition of Software Phases

In fact, software development is normally characterized by several phases, and this is what we called the software phases.

  • Requirements Engineering: the phase where we talk to customers or stakeholders or whoever we’re building the software for and we try to understand what kind of system we need to build
  • Design: a high-level structure that can become more and more detailed of our software system
  • Implementation: write code that implements the design we just defined
  • Verification and Validation: make sure code behave as intended
  • Maintenance: involves several activities including adding new functionality or eliminating bugs from the code or responding to problems that were reported from the field after the release of the software

(9) Tools for Improving the Software Phases

Now, let’s see some tools that can be used to improve the software phases. Tools and automation are fundamental in software engineering. Fundamental for improving productivity and effectiveness of our activities in the software development process. Common tools for software development are,

  • IDEs (integrated development environments): these are advanced editors in which you can write, compile, run, debug, and test the code
  • Git (version control systems or VCS): these are the systems that allow you to save, restore, and check the difference between different versions of the code
  • Coverage and Verification Tools: these are the tools that can help you during testing

(10) Benefits of Software Development Tools

So how can these tools improve the developer’s productivity? Let’s think about the following aspects,

  • For development: from punch cards to modern IDEs
  • For language: from machine code to high-level languages
  • For debugging: from print lines to symbolic debuggers