You are on page 1of 12

Module-1: Introduction to Software Engineering

Introduction

Software engineering is the systematic method of designing, developing, and maintaining software
that satisfies customer needs. It combines engineering principles with computer science to create
high-quality, cost-effective software. It involves collaboration, communication, and a structured
approach to software development, with the goal of achieving commercial success. It encompasses
both computer systems software and applications software, and provides a framework for creating
efficient and effective software solutions.

What is and why Software Engineering?

To build the software that is ready to solve the challenges of the upcoming century, you know some
realities.

The software has become deeply ingrained in every aspect of our daily lives. Information technology
needs are required by individuals, businesses, and governments. People now create computer code
that was once the work of a single person. Advanced software, previously used in predictable
computing environments, is now embedded in everything from consumer electronics to medical
equipment to weapon systems.

The Nature of Software

Software has a dual purpose as a commodity and a delivery vehicle. It transforms information,
controls operating systems, and communicates data. Advanced hardware has led to more complex
computer-based systems, resulting in a dominant software industry. Development challenges
include long timelines, high costs, predicting future problems, maintaining existing programs, and
measuring progress. Software engineering practices have been introduced to address these
concerns, and improving software architecture can minimize degradation.

The bathtub curve is a graph that displays hardware or system failure rate over time. It shows a high
rate of failures initially, which decreases and becomes stable. However, the rate then increases again
due to environmental factors causing hardware wear and tear.
The software failure rate curve is called the "idealized curve," and early defects cause high failure
rates that decrease as they are corrected. However, the idealized curve is an oversimplification of
actual failure models, as software does not wear out but deteriorates due to changes and errors. The
actual curve shows spikes in the failure rate as changes are made, returning to a steady-state rate
before rising again with the next change. The minimum failure rate occurs when the software
deteriorates due to change. Unlike hardware, software has no spare parts, and maintenance tasks
for accommodating change requests are more complex than hardware maintenance.

What is software engineering?

Software engineering involves analysing consumer needs, designing, developing, and testing
software applications to create high-quality computer software. It is a set of methods used by
software engineers to create executable code, libraries, and documents, which together form a
software product. Engineering is a process that uses knowledge, scientific concepts, and methods to
create products, and software engineering applies this process to software development.

Various definitions of Software engineering

IEEE defines software engineering as a methodical, structured, and computable approach for
developing, operating, and maintaining software.

Fritz Bauer defines it as using engineering principles to obtain reliable and efficient software
economically.

Boehm defines software engineering as applying scientific knowledge to creatively design and build
computer programs, including the necessary documentation for development, operation, and
maintenance.

__________________________________________________________________________________

Software engineers are divided into two categories: Applications Engineers, who create and maintain
applications for various industries, and Systems Engineers, who oversee computer systems and
connections between departments. Software engineering is necessary for managing, extending, and
maintaining vital software and ensuring the best management practices. Software engineers develop
and upgrade computer software, including social media applications, autonomous vehicles, robots,
and websites, and their work is everywhere in the digital world. They use their knowledge of
engineering concepts and computer skills to accomplish these tasks. Software engineering is a
diverse field with many roles and skills. It takes time and dedication to succeed, and teamwork is
crucial for success. Communication is vital as projects involve different technologies, programming
languages, and specialties. What you see on your screen is the result of the hard work and
collaboration of many skilled software engineers.

Engineers have unique roles to perform certain computer engineering tasks. To produce
applications, it takes so many engineers. Some engineers are in always demand:

Front-end engineers make software that works with people. They create things on apps and
websites that help people use them easily. These things include how the site looks, what it does, and
how you use it. Without front-end developers, websites would look boring and not work well. They
use languages like HTML and CSS to make things look good and work properly.

Front-end developer’s responsibilities include:

● Prioritizing the user experience

● Bringing a concept to life with HTML, CSS, and JavaScript

● Re-built and maintenance of websites and web application user interfaces

● Maintaining tools that enhance interaction with the site in any server

● Reviewing the SEO best practices

● Testing the website for usability and fixing any errors.

Back-end developers are experts in coding for software and websites. They work behind the scenes
and make sure everything runs smoothly. They test different parts of the website to make sure there
are no problems. Back-end developers help run the website, even if people don't see it. They make
sure the website works well and has all the features it needs. Back-end developers are important to
web development teams because they help make sure everything gets done on time. They have
many responsibilities, such as creating and managing databases, building frameworks, and working
with cloud computing and programming languages. They also help with content management and
backup and restore technologies.

A full-stack engineer is good at front-end and back-end development. They make things look good
and work well for people. They know how to make everything work from start to finish. Full-stack
developers use many different skills to make an idea into a finished product. They work with lots of
different kinds of data, and they know how to use all kinds of computer languages like PHP, HTML,
CSS, and JavaScript.

Security engineers keep things safe during bad times like disasters or cyber-attacks. They use many
ways to fix their systems and make sure they are secure. Good security engineers have skills like
leading, managing, solving problems, and talking with people. They also know how to hack, work
with computers, and fix problems. Security engineers have many jobs, like making rules to keep
things safe, checking for problems, making things more secure, and fixing problems when they
happen.

A DevOps Engineer handles both software development and IT operations. They make things faster
without lowering quality by using DevOps practices. They are great at creating software quickly.
Programing languages are used to make applications and websites. They are hard to learn and take
years to master. DevOps Engineers should have good communication and problem-solving skills,
manage teams well, be organized, manage time effectively, work on many projects at once, know
about DevOps and Agile principles, and be able to multitask.
JavaScript is used to create websites, and almost all websites used it in 2019. It's mainly used for
making good-looking web pages. Compared to other languages, it's easy to learn. It's also very
versatile and works with all web browsers and tools. This makes it helpful for developing, improving,
and changing websites.

Python is a free and open programming language that is easy to learn. It makes short code, which is
good for many software engineering projects. It's also used for creating artificial intelligence and
machine learning systems.

The C programming language is special and was created in 1971. It's always in demand and easy to
read. It's often used for games and graphics. It's a robust, low-level language that structures well. C
works on many systems and hardware, and many compilers exist. Compilers change source files into
object files. It's also very portable.

There are 7 software areas:

1) System

2) Application

3) Scientific/Engineering

4) Embedded

5) Product-line

6) Web/Mobile

7) AI

They each have their own challenges. Engineers must be skilled in programming, computer science,
system design, data structures, analysis, debugging, and testing. Software failures are costly,
especially in high-risk areas. Market demands and complexity increase. Software systems must
communicate with each other. Many projects update and improve existing software.

Software Crisis–Problem and Causes

Computer science has a problem called the "software crisis". This happened because computers got
stronger and the things they had to do got harder. The old ways of making software didn't work
anymore, so there were many problems. This happened because computers got much, much more
powerful. Before, no one worried about programming because there were no machines. Then,
programming was easy because the computers were weak. But now that we have really strong
computers, programming is really hard.
There were many reasons for the software crisis, like projects failing and being too expensive to
keep up. The software was hard to manage and keep working well, and it didn't do what people
wanted. The problem got worse when computers got more powerful and people wanted even more
software, but it was hard to make.

To solve the software crisis, people started using better ways to make software. They used new ideas
and tools to help them make software that was better and easier to manage. They also made sure to
have good quality software that was delivered on time. Working in a good team was important too.

Responsibility of Software Engineering

Software engineers have four main jobs. They use methods like the Waterfall model or Agile
methodology.

First, they research and analyse problems. They figure out how to solve problems with code, and
look at technical documents for help.

Then, they design the system. They create the practical part that makes the code work.

After that, they implement the code into the product. They work in a team to build specific parts of
the product.

Finally, they support the product. They fix any problems or bugs that come up. They work with other
teams to make sure the product keeps working well.

Software engineers also have many other responsibilities. They check how the client's system works,
and make proposals for improving it. They work with other people like business analysts and
designers. They create code for different applications and platforms. They test the program to make
sure it works like it should.

If someone wants to be a software engineer, they should learn about computer science or
information technology. They can work for big companies or government offices.

Fundamental Qualities of a Software Product

Software engineering aims to design and develop better software. There are 6 main qualities to
make software more productive: maintainability, correctness, reusability, reliability, portability, and
efficiency.

Maintainability means it's easy to adjust software for new requirements or to fix
problems. It's important because maintenance costs a lot. Correctness means software meets its
requirements. Reusability means existing software can be used to build more complex software
faster. Reliability means software failures happen rarely and aren't critical. Portability means
software can be used on different devices. Efficiency means software achieves its goals without
wasting resources like time or storage.
Kinds of Software Life-Cycle Models and Case Study

SDLC is a set of stages that explain how software is created, from business ideas to meeting business
demands. A software engineer should know the SDLC model based on project ideas and company
specifications. SDLC models are tools that help us deliver software projects effectively. Types of SDLC
include Waterfall, V-Shaped, Evolutionary Prototyping, Spiral, Iterative and Incremental, and Agile.

Waterfall Model

The Waterfall model is a linear approach to software development. Each stage must be completed
before moving on to the next, like a waterfall flowing downwards. There's no overlap between
phases, and adjustments can't be made after a phase is complete. It's the oldest and most popular
software development approach. Winston Royce introduced it in 1970.
The projects which not focus on modifying the requirements, for example, projects started from, a
request for the plan, the customer has a very fixed-document.

The waterfall model can be used when:

● Waterfall model requirements are not changing frequently.

● The waterfall model application is not very complex and large.

● Project is short

● The requirement is very clear

● Environment is stable

● In this model, the technology and tools we used are not dynamic in nature and is stable

● There are so many resources are available and trained

Advantages of Waterfall Model:

● This is easy to explain to the users.

● It has a structured approach.

● Well explained phases and functions.

● It helps to plan and schedule the project.

● It verifies each phase and ensures early detection of errors.

● Specific deliverables.

Disadvantages of waterfall model:

● Assumes that the requirements of a system can be frozen.

● We can’t go back to any stage after completion.

● It is very expensive and difficult for letter flexibility and adjusting.

● Expensive and required more time, in addition to the plan.


V-shaped model

The V-shaped model is an extended version of the waterfall model where the method steps bend
upwards to form a V shape during the coding phase. It has early test preparation and requires clear
software requirements and known tools. Advantages include simplicity, different deliverables for
each stage, higher success chance, and early verification and validation. Disadvantages include
inflexibility, difficulty adjusting scope, no early software prototypes, unclear path for problems found
during testing, and high cost and time requirements.

Prototyping Model

Prototyping Model is a software development approach where prototypes of software applications


are developed to review their operations and ensure they meet customer requirements. This
involves creating unfinished implementations of the software program for evaluation.

Prototyping Model is when a software prototype is made, checked, used, and improved until it's
good enough. It also helps make the system or software that the user wants.

Prototyping model phases:


Four types of prototype models:

1. Throwaway prototyping: which are discarded in time rather than becoming a part of the
final delivered software

2. Evolutionary prototyping: it evolves into the last system through iterative incorporation of user
feedback.

3. Incremental prototyping: in the end, the separate prototypes are joint in an overall design.

4. Extreme prototyping: mainly it is used in web applications. Based on the preceding one, it breaks
down web development into three phases. The first is a static prototype that contains HTML pages.
In the second phase, the screen is fully functional using a simulated services layer. In the third phase,
the services are implemented.
The prototyping model is part of software development. It's used when the system has user
interactions. There are different types, like Rapid Throwaway or Evolutionary. It has many
advantages, like saving time and money, getting user feedback, and helping to understand client
needs. It's easy to use and doesn't need special experts. The prototype is used to create the system
specifications and can help with training.

Prototyping model has some disadvantages, such as not enough analysis, taking too long to develop,
and being expensive. It's slow and the prototype is often thrown away. It can lead to too many
change requests and customers may not want to participate for a long time. Customers may have
different opinions, causing confusion. Trying to build prototypes quickly may result in poor solutions.

The Spiral Model

The Spiral Model is a mix of the waterfall and iterative approaches used in software development.
It's for complex projects and helps manage risks and costs. Each step ends with client feedback. It
was developed by Barry Boehm in 1986 and combines top-down and bottom-up approaches. It's
good for big apps and systems. Advantages include realistic budgets and good developer
involvement. Disadvantages include high costs and risk. It's used when projects are high-risk,
requirements are unclear, and changes are expected.

Iterative and Incremental Model

This model improves on the waterfall model with cyclic interactions. It goes from deployment to
deployment and uses mini waterfalls or a V-shaped model. The goal is to build the system in smaller
cycles.
This model creates small parts in big products or short applications, with separate aspects in an ERP
scheme. It's a process where specs are broken into modules, with stages like analysis, design,
implementation, testing, and maintenance. Use incremental models when requirements are
understood, or for high-risk features or initial product release. Advantages are early value and
customer focus. Disadvantages are heavy documentation and need for defined processes.
Integration between iterations can be a problem if not planned.

Agile Model

Agile model is iterative and collaborative, suitable for client involvement. It can be used in any
project and completes practical specifications within three weeks. It is customer-oriented and
encourages continuous development and testing in the software development lifecycle.
Development and testing practices are concurrent in Agile.

12 Agile principles for achieving agility:

1. Satisfy the customer by delivering software.


2. Embrace changes for client's competitive advantage. Deliver software on time. Work
together daily as a team.
3. Build projects through motivation and support.
4. Use face-to-face conversations.
5. Measure progress by working software.
6. Maintain a constant pace indefinitely.
7. Track the project and prioritize technical excellence and good design.
8. Emphasize simplicity.
9. Self-organizing teams produce the best architectures, requirements, and designs.
10. Show work at fixed intervals and adjust behaviour accordingly.
Advantages of Agile Model:

● Less time required to avail of some system features.

● Having high-quality software in the least time duration and satisfied client.

Disadvantages of Agile Model:

● Scalability

● Documentation is at the last stages

● Usability of components is less

● Skills must be good

You might also like