Introduction to software engineering Flashcards

learn Software engineering basics

1
Q

What is Software Engineering

A

Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software. This module provides an overview of the importance of software engineering, its evolution with time, and the difference between the exploratory program development approach and the software engineering approach.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

When do we consider software application
successful?

A
  • Development completed
  • It is useful
  • It is usable
  • It is used
  • Cost effective and maintainable.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

The Nature of Software
SW vs. HW

A
  • Software is developed or engineered not
    manufactured
  • Software is intangible
  • Hard to understand development effort
  • Software does not “wear out”
  • Software is complex
  • Software is flexible
  • Reusability of components.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

What is Software crisis

A

Software products:
* Fail to meet user requirements.
* Frequently crash.
* Expensive.
* Difficult to alter, debug, and enhance.
* Often delivered late.
* Use resources non-optimally

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Factors
Contributing to
the Software
Crisis

A

Software requirements do not adequately describe user needs
or customer expectations.
Lack of adequate training in software engineering.
Project planning is frequently unrealistic, incomplete, or
ignored.
Project cost and schedule estimates are underestimated.
Software is intangible
Increasing skill shortage
Standards are not used or documented.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Neglecting the initial phases in the software engineering process
often leads to costly consequences as

A
  • Having to restructure code
  • High maintenance costs due to due to poorly structured code
  • Producing a product unacceptable to end-users
  • Producing bugy or unreliable code
  • Having difficulty integrating separate pieces of the system
  • Difficult project management
  • Budget and time overrun
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Types of Software

A

System software
Ex: Operating systems, drivers
Application software
Web browsers, Media players,
payroll software,
Embedded software
Home appliances, smartphones,
Flight control systems

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Essential Skills for Software Engineers

A
  • Programming languages
  • Problem-solving and Critical thinking
  • Communication and Collaborations
  • Project Management
  • Continuous Learning and adaptability
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Who are Stakeholders in Software
Engineering?

A
  1. Users
    * Those who use the software
  2. Customers
    * Those who pay for the software
  3. Software developers
  4. Development Managers
    All four roles can be fulfilled by the
    same person
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

What are Software Qualities?

A
  • Usability
  • Users can learn it and fast and get their job done
    easily
  • Efficiency
  • It doesn’t waste resources such as CPU time and
    memory
  • Reliability
  • It does what it is required to do without failing i.e.
    frequency of occurrence of software problems
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

What is Wrong with the Exploratory Style? Cont…

A
  • Besides the exponential growth of effort, cost,
    and time with problem size:
  • Exploratory style usually results in unmaintainable
    code.
  • It becomes very difficult to use the exploratory style
    in a team development environment.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Exploratory software development style vs. modern
software engineering practice

A
  • Exploratory development style is based on error correction
    while the software engineering principles are based on error
    prevention
  • Exploratory design coding was considered synonymous with
    software development, whereas in the modern software
    development style coding is a small part of the overall
    development
  • A lot of attention is paid to requirements specification in
    modern software engineering
  • Distinct design phase where standard design techniques are
    employed
  • Periodic reviews are carried out during all stages of the
    development process.
  • Testing techniques are used
  • Better visibility of design and code.
  • Production of good quality and consistent documents
  • Projects are first thoroughly planned
  • Several metrics are used to help in software project
    management and software quality assurance
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Emergence of Software Engineering

A
  • 1950s-1960s: Early Days and Software Crisis
  • Programs were being written in assembly language.
  • Every programmer developed his own style of writing programs:
  • According to his intuition (exploratory programming).
  • 1960s-1970s: Structured Programming and Software
    Engineering Emergence
  • Structured programming principles, such as modularization and control flow,
    were introduced to improve software quality.
  • The idea of systematic software development gained traction, leading to the
    emergence of software engineering as a formal discipline.
  • In 1968, NATO held a conference on software engineering, helping to establish
    foundational principles.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Emergence of Software Engineering

A
  • 1970s-1980s: Waterfall Model and Early Methodologies
  • The Waterfall model, a linear approach to software development, became popular. It involved
    sequential phases like requirements, design, implementation, testing, and maintenance.
  • Methods like the Structured Systems Analysis and Design Method (SSADM),
    and Yourdon’s methodologies became popular.
  • 1980s-2000s: Object-Oriented Programming and Agile Movement
  • Object-oriented programming (OOP) gained prominence, encouraging modular design and reusable
    code.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Emergence of Software Engineering

A
  • The Agile movement emerged in the early 2000s as a response to rigid methodologies. Agile
    methodologies like Scrum and Extreme Programming (XP) prioritized collaboration, flexibility, and
    incremental development.
    49
  • 2000s-2010: Rapid Technological Advancements
  • The growth of the internet and the rise of e-commerce led to increased demand for web
    applications and software.
  • DevOps practices emerged, emphasizing collaboration between development and operations
    teams to streamline software delivery.
  • 2010s-Present: Cloud Computing, Continuous Integration, Agile
    and DevOps
  • Cloud computing revolutionized software deployment and scalability.
  • Continuous Integration/Continuous Deployment (CI/CD) became integral to software
    development, enabling rapid and automated testing and deployment.
  • DevOps practices continued to evolve, focusing on cultural changes, automation, and
    collaboration.
    50
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Emergence of Software Engineering

A
  • Current and Future Trends: AI, Machine Learning, and Beyond
  • Artificial intelligence (AI) and machine learning (ML) are being integrated into software
    systems, enabling automation, data analysis, cybersecurity and
    predictive capabilities.
  • Emphasis on user experience (UX) design and user-centered
    development has grown.
17
Q

8 Key Principles
* Software Engineering Code of Ethics and Professional Practice

A
  • Product
  • Public
  • Judgement
  • Client and Employer
  • Management
  • Profession
  • Colleagues
  • Self