Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

Features of Software Engineering

Software engineering involves the application of engineering principles to the


development of software systems. Here are some of its important features:

1. Systematic and Disciplined Approach: Software engineering follows a


systematic and disciplined approach to software development, which includes
planning, analysis, design, implementation, testing, and maintenance.

2. Requirement Analysis: Software engineering places a strong emphasis on


understanding the requirements of the software system being developed. This
involves gathering and analyzing requirements from stakeholders, and
ensuring that the software system meets their needs.

3. Quality Assurance: Software engineering includes various techniques for


ensuring the quality of the software system, such as testing, verification, and
validation.

4. Collaboration: Software engineering often involves collaboration between


different stakeholders, including software developers, testers, project
managers, and customers.

5. Lifecycle Management: Software engineering covers the entire lifecycle of a


software system, from its inception to its retirement. This includes planning for
maintenance, upgrades, and sunsetting of the system.

6. Tool Utilization: Software engineering makes use of various tools and


technologies to support the development process, such as integrated
development environments (IDEs), version control systems, and bug tracking
systems.

7. Process Improvement: Software engineering involves continuous process


improvement, with a focus on identifying and eliminating waste, reducing
cycle time, and increasing efficiency.

8. Risk Management: Software engineering includes techniques for managing


risks associated with software development, such as estimating project
timelines and budgets, identifying potential issues, and developing
contingency plans.

9. User-Centered Design: Software engineering emphasizes user-centered


design, with a focus on creating software systems that are easy to use,
accessible, and meet the needs of users.

10. Standards and Best Practices: Software engineering follows industry


standards and best practices for software development, such as coding
standards, design patterns, and architecture principles.

Billa Rakesh Teja


Differences between Software Engineering vs
Computer System vs System Engineering
1. Software Engineering:
o Focus: Software engineering primarily concentrates on
the development of software applications.
o Scope: It covers the entire software development process,
from conception to maintenance.
o Aspects: Software engineers deal with software design,
development, deployment, and maintenance. They work on
applications, control systems, dependencies, and databases within the
system.
o Methods: Software engineering methods include process modeling,
incremental verification and validation, process improvement,
model-driven development, agile methods, and continuous
integration1.
2. Computer System Engineering:
o Focus: Computer system engineering is concerned with the design and
development of computer hardware systems.
o Scope: It specifically deals with the hardware components of a
computer system.
o Aspects: Computer system engineers work on hardware architecture,
components, and infrastructure.
o Methods: While there isn’t a distinct set of methods unique to
computer system engineering, it often involves principles
from electrical engineering, computer architecture, and hardware
design.
3. System Engineering:
o Focus: System engineering takes a broader view and deals with
the overall management of engineering projects during their life
cycle.
o Scope: It encompasses both physical and logical aspects of a system.
o Aspects: System engineers consider hardware, software, and process
engineering. They follow an interdisciplinary approach to transform
requirements into solutions.
o Methods: System engineering methods include stakeholder analysis,
interface specification, design tradeoffs, configuration
management, systematic verification and validation, and
requirements engineering1.

Billa Rakesh Teja


Evolving role of Software
The role of software has evolved significantly over the years, driven by technological
advancements, changing needs, and the growing complexity of the digital world.
Here are key aspects of the evolving role of software:

1. Pioneering Days (1940s-1950s):


• In the early days of computing, software development was manual and
highly technical, with programmers writing machine-level instructions.
• Software was primarily used for scientific calculations, military and
defense systems, and business data processing.
2. Birth of High-Level Languages (1950s-1960s):
• Introduction of high-level programming languages like Fortran, COBOL,
and LISP revolutionized software development.
• Compilers and interpreters translated high-level code into machine
code, simplifying the coding process.
• Business applications, database management systems, and early
operating systems emerged.
3. Personal Computer Revolution (1970s-1980s):
• Advent of personal computers broadened software development to a
wider audience.
• Graphical User Interfaces (GUI) like Windows and Macintosh OS
improved user experience.
• Expansion into home computing, gaming, word processing, and early
applications like MS Word.
4. Internet Age (1990s-2000s):
• Creation of the World Wide Web by Tim Berners-Lee revolutionized
software development with web applications.
• Introduction of JavaScript for web development and the release of
Windows 95 with graphical user interfaces.
• Birth of mobile apps, cloud computing, and the rise of Artificial
Intelligence (AI) in software applications.
5. Modern Era (2010s-Present):
• DevOps practices promoting collaboration between software
development and IT operations.

Billa Rakesh Teja


• Introduction of containerization with Docker, changing application
development and deployment.
• Accelerated innovation in software development due to the COVID-19
pandemic, driving remote work and digital solutions.

Base stages of Software Development


The base stages of software engineering, also known as the Software Development
Life Cycle (SDLC), typically include the following:

1. Planning: This stage involves gathering requirements, defining the scope of


the project, and creating a detailed plan for the project.
2. Analysis: In this stage, the technical requirements of the project are
understood and documented.
3. Design: This stage involves creating a design for the software, including
wireframes or prototypes to show how interactions will be included.
4. Development: In this stage, the software is built according to the requirements
and plan.
5. Testing: This stage involves testing the software to ensure that it is working
correctly and meets the requirements.
6. Deployment: Once the software has been tested and approved, it is deployed
to production and made available to users.
7. Maintenance: After the software has been deployed, it is maintained and
updated as needed to ensure that it continues to meet the needs of users and
to fix any issues that arise.

Changing Nature of Software:


The changing nature of software encompasses various categories that reflect the
evolution and diversification of software applications.

1. System Software:
• Definition: System software serves as a collection of programs that
support other software applications.
• Example: Operating systems like Windows, macOS, and Linux fall
under this category, providing essential functions for computer
hardware.

Billa Rakesh Teja


2. Application Software:
• Definition: Application software addresses specific business needs and
processes business or technical data efficiently.
• Example: Microsoft Office Suite (Word, Excel, PowerPoint) is a prime
example of application software used for office productivity.
3. Engineering and Scientific Software:
• Definition: This software aids in engineering tasks and functions,
moving towards interactive applications beyond traditional numerical
algorithms.
• Example: Computer-aided design (CAD) software like AutoCAD or
simulation tools used in engineering and scientific research.
4. Embedded Software:
• Definition: Embedded software resides within systems or products to
implement and control features and functions.
• Example: Firmware in devices like smartphones, IoT devices, or
automotive systems that control specific functionalities.
5. Product-line Software:
• Definition: Product-line software is designed to offer specific
capabilities for use by multiple customers.
• Example: Customer Relationship Management (CRM) software like
Salesforce or industry-specific ERP solutions.
6. Web Applications:
• Definition: Web applications are client-server programs run on web
browsers, providing standalone features and content.
• Example: E-commerce platforms like Amazon or social media sites like
Facebook are sophisticated web applications.
7. Artificial Intelligence Software:
• Definition: AI software utilizes nonnumerical algorithms to solve
complex problems beyond traditional computing capabilities.
• Example: AI applications include robotics, expert systems, neural
networks, and game-playing algorithms.

Billa Rakesh Teja


Software Myths
Software myths are the beliefs that people consider are true but are not, regarding
software and its development process.

Different Types of Software Myths


1. Management Myths
2. Customer Myths
3. Practitioner’s Myth

Management Software Myths


The manager who is responsible for developing software is often under pressure
regarding many attributes of the software such as:

▪ The budget of the software.


▪ Delivering the software within the time limit.
▪ Enhance the quality of the software.
▪ Providing customer care services, etc.
Myth 1

The software building team has a book that explains all standards and procedures
that are required for developing software.

The manager has a myth that the book provides everything to the team required for
the software development.

Reality 1

Though there exists a book that has all the standards and procedures required to
develop software.

Myth 2

If more programmers are added to the software development team we can stick to
the schedule.

Reality 2

Developing is software is totally different from manufacturing a product. It is not a


mechanistic process. In fact, adding up more people in the team would rather delay
the delivery of the software.

Billa Rakesh Teja


Customer Myths
The customer has some myths regarding the development of software. Hence
customer develops false expectations which lead to dissatisfaction with the
developer.

Myth 1

Customers believe that giving a general statement would let the software developer
start writing the program. The rest of the details can be filled in later.

Reality 1

Although it is not possible for a customer to provide a comprehensive and stable


statement. And an ambiguous statement will lead to disaster. The unambiguous
statement comes with an iterative communication between the customer and the
developer.

Myth 2

Customers can ask for the changes in software as many times as desired as software
is flexible.

Reality

Well, the customer can ask for the changes in the software. But the impact of the
changes varies from the time it has been introduced. If the customer asks for the
changes early during the development of the software the cost impact is less.

Practitioner’s Software Myth


Software practitioners are the ones who are involved in the development and
maintenance of the software.

Myth 1

Once you write the code and develop the software your job is done.

Reality

Practically 60% – 80% of the efforts are expended on the software when the
software is delivered to the customer for the first time.

When the software is delivered to the customer for the first time. When a customer
starts using the software they figure out the improvements that can be made to
enhance the quality of the software.

Billa Rakesh Teja


Myth 2

A successful project is one where the delivered software is working.

Reality

Although the working software is the essential part of software configuration there
are many other elements that count in a success of a software project. Such as
models of the software, its documents, and plans.

recognizing the realities of the software will let you formulate some practical
solutions.

Process framework, Umbrella activies of software process


framework
The umbrella activities of the software process framework are a series of steps or
procedures that are followed by a software development team to maintain the
progress, quality, changes, and risks of complete development tasks. These
activities are carried out throughout the entire software development process.

The umbrella activities of the software process framework include:

1. Software project management: This involves managing the software


development process, including planning, scheduling, and controlling
resources and tasks.
2. Formal technical reviews: This involves conducting regular reviews of the
software development process to ensure that it is meeting its objectives and
to identify any issues or problems.
3. Software quality assurance: This involves ensuring that the software
development process is following established quality standards and practices.
4. Software configuration management: This involves managing the
configuration of the software development process, including tracking
changes to the software and ensuring that the correct versions of the software
are being used.
5. Reusability management: This involves managing the reuse of software
components and assets to improve the efficiency and quality of the software
development process.
6. Measurement: This involves collecting and analyzing data about the software
development process to improve its performance and quality.
7. Document preparation and production: This involves creating and maintaining
documentation for the software development process.
8. Risk management: This involves identifying, assessing, and managing risks
associated with the software development process.

Billa Rakesh Teja


Evolutionary process models
The evolutionary process models in software engineering:
1. Evolutionary Model:
o The evolutionary model combines elements of both
the iterative and incremental models in the software development life
cycle.
o Key Concepts:
▪ Initial Product: The process begins by creating an initial
product.
▪ Iterative and Incremental Approach: The software
product evolves over time through multiple iterations.
▪ Feedback-Driven: During development, feedback from
stakeholders and users guides further iterations.
o Advantages:
▪ Customer Involvement: Stakeholders actively participate,
ensuring the final product aligns with user needs.
▪ Error Reduction: Multiple iterations lead to reduced errors and
improved reliability.
▪ Efficiency: The software evolves based on real-world usage,
enhancing efficiency.
o Types of Evolutionary Process Models:
▪ Iterative Model: Enhances the product over multiple iterations,
resulting in a high-quality final product.
▪ Incremental Model: Builds the project with basic features and
evolves it in each iteration, suitable for large projects.
▪ Spiral Model: Combines waterfall and iterative approaches,
focusing on risk handling and incremental development12.
2. Iterative Model:
o Process: In the iterative model, we start with initial requirements and
enhance the product through multiple iterations.
o Modifications: Each iteration involves design modifications and
changes in functional requirements.
o Goal: The final product closely aligns with user expectations, with fewer
errors and high performance and quality.
3. Incremental Model:
o Process: In the incremental model, we build the project with basic
features and then evolve it in each iteration.
o Suitability: Commonly used for large projects.
o Steps: Gather requirements, perform analysis, design, code, and testing
iteratively until the final project is ready.
4. Spiral Model:
o Hybrid Approach: Combines elements of waterfall and iterative
models.

Billa Rakesh Teja


o Risk Handling: Focuses on risk management while developing the
project incrementally.
o Advantages: Produces output quickly and is suitable for large-scale
projects1.

Functional & Non-Fuctional Requirements

Functional requirements
Functional requirements are product features or functions that developers must

implement to enable users to accomplish their tasks. So it’s essential to make them

clear both for the development team and the stakeholders.


Functional requirements examples
Functional requirements will vary for different types of software. For example,
functional requirements for a website or mobile application should define user
flows and various interaction scenarios.

The system sends a confirmation email when a new user account is created.
The system sends an approval request after the user enters personal information.
A search feature allows users to search content/items by entering the query in the search
bar.
The user can review items in the cart, change their number, or remove them before checkout.
The app should allow users to create accounts and log in using credentials like email and
password or through social media integration.
The app can send notifications to users for updates, reminders, or promotional content.
Users should be able to provide feedback or rate services/products within the app.

Nonfunctional requirements
Nonfunctional requirements are not related to the system's functionality but
rather define how the system should perform. They are crucial for ensuring the
system's usability, reliability, and efficiency, often influencing the overall user
experience.
Nonfunctional requirements examples
The website pages should load in 3 seconds with the total number of simultaneous users <5
thousand.
The system should be able to handle 20 million users without performance deterioration.
The payment processing gateway must be PCI DSS compliant.
A program running on Windows 10 must be able to run on Windows 11 without any change
in its behavior and performance.

Billa Rakesh Teja

You might also like