Software Engineering — Introduction (Part 1)
A general introduction to software engineering.
This is a short series of tutorials. We are going to cover:
The world can’t operate without software. Industries are controlled by software systems, as the financial systems, scientific labs, infrastructures and utilities, games, film, television, and the list goes on.
“So, what’s a software anyway?” …
A software is a computer programs along with the associated documents and the configuration data that make these programs operate correctly.
A program is a set of instructions (written in form of human-readable code) that performs a specific task.
Types of Software Systems
There are many different types of software systems from simple to complex systems. These systems may be developed for a particular customer, like systems to support a particular business process, or developed for a general purpose, like any software for our computers such as word processors.
Many systems are now being built with a generic product as base, which is then adapted to suit the requirements of a customer such as SAP system.
Successful Software System
A good software should deliver the main required functionality.
Other set of attributes — called quality or non-functional — should be also delivered. Examples of these attributes are, the software is written in a way that can be adapted to changes, response time, performance (less use of resources such as memory and processor time), usable; acceptable for the type of the user it’s built for, reliable, secure, safe, …etc.
Software engineering is an engineering discipline that’s applied to the development of software in a systematic approach (called a software process).
It’s the application of theories, methods, and tools to design build a software that meets the specifications efficiently, cost-effectively, and ensuring quality.
It’s not only concerned with the technical process of building a software, it also includes activities to manage the project, develop tools, methods and theories that support the software production.
Not applying software engineering methods results in more expensive, less reliable software, and it can be vital on the long term, as the changes come in, the costs will dramatically increase.
Different methods and techniques of software engineering are appropriate for different types of systems. For example, games should be developed using series of prototypes, while critical control systems require a complete analyzable specification to be developed.
Computer Science Vs Software Engineering
Computer science focuses on the theory and fundamentals, like algorithms, programming languages, theories of computing, artificial intelligence, and hardware design, while software engineering is concerned with the activities of developing and managing a software.
The job of a software engineer is difficult. It has to balance between different people involved, such as:
- Dealing with users: User don’t know what to expect exactly from the software. The concern is always about the ease of use and response time.
- Dealing with technical people: Developers are more technically inclined people so they think more of database terms, functionality, etc.
- Dealing with management: They are concerned with return on their investment, and meeting the schedule.
For success in large software developments, it is important to follow an engineering approach, consisting of a well defined process. That’s what we’re going to explore next in the “Software Processes”.