Chapter 1 - Introduction Flashcards

1
Q

Software engineering

A

Software engineering is the process of designing, developing, testing, and maintaining software systems using a structured and systematic approach.

approach. It involves applying engineering principles, methods, and tools to create reliable,
efficient, and high-quality software that meets user requirements.

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

importance of software engineering

A

Quality:
Software engineering ensures that software is developed using industry-standard best practices and techniques, resulting in high-quality
software that meets user needs.

Reliability:
Software engineering emphasizes the importance of testing and verification, ensuring that software is reliable and free from errors or
bugs.

Efficiency:
Software engineering focuses on designing and developing software that is efficient and optimized, making the most efficient use of system
resources.

Scalability:
Software engineering ensures that software is designed to handle increased workloads and can scale up or down as needed.

Maintainability:
Software engineering emphasizes the importance of maintaining software over its entire lifecycle, ensuring that it remains up to date,
secure, and reliable.

Innovation:
Software engineering encourages innovation by providing a structured framework for creating new software applications and
technologies.

Cost-Effective:
Software engineering ensures that software is developed in a cost-effective manner, maximizing the return on investment for
organizations.

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

Fundamental Software Engineering Activities

A

There are several fundamental software engineering activities involved in the process of designing, developing, testing, and maintaining
software systems. These activities include:

Requirements analysis:
The process of gathering and analyzing user needs and requirements, and translating them into functional and
non-functional specifications for the software system.

Design:
The process of creating a blueprint or a plan for the software system that meets user requirements, and outlines the software
architecture, interfaces, and data structures.

Implementation:
The process of writing code and creating the software system based on the design specifications, using programming
languages and software development tools.

Testing:
The process of verifying and validating the software system, ensuring that it meets user requirements and is free from errors and
bugs.

Deployment:
The process of installing the software system in the production environment and making it available to users.

Maintenance:
The process of making changes to the software system over its entire lifecycle, including fixing bugs, adding new features,
and updating the system to keep it up to date.

Project management:
The process of managing the software development project, including scheduling, resource allocation, risk
management, and quality assurance.

These software engineering activities are iterative and interactive, meaning they may be repeated several times throughout the software
development lifecycle to ensure the quality and effectiveness of the software system.

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

Challenges and Cost of Software Engineering

A

Requirements volatility:
Changes in user requirements during the software development process can lead to delays, increased
costs, and reduced quality of the final product.

Complexity:
Software systems are becoming increasingly complex, making it difficult to design, implement, and maintain
them.

Quality assurance:
Ensuring the quality of software systems can be a significant challenge, as it requires rigorous testing and
verification processes to identify and fix defects.

Technical debt:
Technical debt is the cost of taking shortcuts during the software development process, which can lead to
lower quality, increased maintenance costs, and reduced flexibility.

Scalability:
As software systems grow in size and complexity, they need to be designed and implemented in a way that allows
them to scale efficiently.

Security:
Ensuring the security of software systems is becoming increasingly important, as cyber threats become more
sophisticated and widespread.

Cost:

Developing software systems can be expensive, particularly for large and complex projects. Costs can include hardware,
software, personnel, and other resources.

Time: Developing software systems can be time-consuming, particularly for large and complex projects. Delays can lead to
increased costs and reduced quality.

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

Professional Software Development

A

Professional software development refers to the process of developing software applications that meet industry standards and best practices.

Professional software development involves a range of activities, including requirements gathering, design, coding, testing, and maintenance.

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

some key characteristics of professional software development:

A

Emphasis on quality:
Professional software development places a strong emphasis on software quality, including reliability, scalability, maintainability, and security. Quality assurance processes, such as testing and code reviews, are used to ensure that software meets these
standards.

Use of best practices:
Professional software development follows established best practices, such as using design patterns, adhering to coding standards, and using version control systems. This helps to ensure that software is developed efficiently and can be maintained over time.

Focus on user needs:
Professional software development places a strong focus on meeting the needs of users. Requirements gathering and user testing are used to ensure that software is developed to meet the needs of its intended audience.

Collaboration:
Professional software development is typically a collaborative process, involving teams of developers, designers, project managers, and other stakeholders. Collaboration helps to ensure that software is developed efficiently and effectively.

Continuous learning:
Professional software development requires ongoing learning and skill development, as new technologies and techniques are constantly emerging. Developers must stay up-to-date with the latest trends and best practices in order to remain effective.

Documentation:
Professional software development involves the creation of documentation, such as user manuals and technical specifications.
This helps to ensure that software is well-documented and can be maintained over time.

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

Software Engineering Diversity

Dimensions of software engineering diversity that can influence software development practices and
outcomes. These dimensions include:

A

Technical diversity:
Technical diversity refers to the range of programming languages, tools, and platforms used in software
development. Technical diversity can impact software quality, maintainability, and compatibility with other systems.

Cultural diversity:
Cultural diversity refers to differences in background, experiences, and perspectives among members of a
software development team. Cultural diversity can influence communication, collaboration, and decision-making within a team.

Organizational diversity:
Organizational diversity refers to differences in organizational culture, structure, and goals among
organizations that develop software. Organizational diversity can impact software development processes, project management, and stakeholder involvement.

Process diversity
: Process diversity refers to the range of software development methodologies and practices used in software development. Process diversity can impact software quality, project management, and stakeholder involvement.

Domain diversity:
Domain diversity refers to differences in the domain or industry in which software is developed. Domain
diversity can impact software requirements, design, and testing.

Lifecycle diversity:
Lifecycle diversity refers to differences in the software development lifecycle, such as waterfall, iterative, or
agile. Lifecycle diversity can impact software quality, project management, and stakeholder involvement.

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

Internet Software Engineering

A

software applications that run on the Internet

It involves the use of various technologies and practices to ensure that software systems are reliable, secure,
and scalable in a networked environment.

Some of the key components of Internet software engineering include web development frameworks,
programming languages, database systems, network protocols, and security mechanisms.

The development process for Internet software engineering follows similar phases as traditional software engineering, including requirements gathering, analysis, design, implementation, testing, and maintenance.

However, there are some unique challenges that arise when developing software for the Internet, such as
dealing with network latency, handling large-scale data, ensuring security and privacy, and providing reliable
and scalable services.

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

Software Engineering Ethics

A

To ensure that software products are safe, reliable, and respectful of users’ privacy and rights. Engineers have a
responsibility to consider the potential ethical implications of their work and to act in a way that is consistent with
ethical principles and values.

Software engineering ethics are concerned with the ethical issues that arise during the development and use of
software systems.

to ensure that their products are safe and reliable.

considering the potential consequences of software errors and ensuring that appropriate measures are taken to
prevent harm to users.

Another key ethical issue in software engineering is privacy :

Software engineers have a responsibility to respect the privacy of individuals and to ensure that personal
data is protected from unauthorized access or misuse. This includes issues such as data breaches, the use
of personal data for marketing purposes, and the collection and use of data without informed consent.

intellectual property rights, conflicts of interest, and discrimination :

Engineers need to ensure that they respect the intellectual property rights of others and do not engage in
unethical behavior that could harm their clients or stakeholders.

importance of a code of ethics in software engineering :

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

Software Engineering (SE) vs Computer Science(CS:)

A

Software Engineering (SE)
vs
Computer Science(CS:)

SE:
Focuses on the development, design, and maintenance of software systems using
engineering principles and methods.

CS:
Focuses on the theoretical foundations and principles of computing, algorithms, and
data structures.

SE:
Concerned with the entire software development lifecycle, including requirements
analysis, design, implementation, testing, deployment, and maintenance.

CS:
Focuses on programming, software development tools, and techniques for solving computational problems.

SE:
Emphasizes the importance of software quality, reliability, scalability, efficiency,
maintainability, and security.

CS:
Emphasizes the mathematical and theoretical foundations of computing, including
algorithms, data structures, and computational complexity.

SE:
Includes practical skills such as project management, software testing, software design, and coding best practices.

CS:
Includes theoretical skills such as algorithm design, computational complexity analysis, and automata theory.

SE:
Applies engineering principles to the design and development of software
systems, using a structured and systematic approach.

CS:
Focuses on the theoretical aspects of computing and programming, including the design and analysis of algorithms and data structures.

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

Difference between Software Engineering and System Engineering

A

Software Engineering (SOF:)

System Engineering (SYS:)

SOF:
Focuses on the design, development, testing, and maintenance of software systems
using engineering principles and methods.

SYS:
Focuses on the design, development, testing, and maintenance of complex systems, which may include software, hardware, and other components.

SOF:
Primarily concerned with software development processes, including requirements
analysis, design, implementation, testing, deployment, and maintenance.

SYS:
Concerned with the entire system development process, including system
requirements analysis, design, implementation, testing, deployment, and maintenance.

SOF:
Emphasizes the importance of software quality, reliability, scalability, efficiency,
maintainability, and security.

SYS:
Emphasizes the importance of system quality, reliability, scalability, efficiency,
maintainability, and security, which may include software as a component.

SOF:
Includes practical skills such as software project management, software testing,
software design, and coding best practices.

SYS:
Includes practical skills such as system integration, system testing, system design, and
system architecture.

SOF:
Applies engineering principles to the design and development of software systems,
using a structured and systematic approach.

SYS:
Applies engineering principles to the design and development of complex systems,
using a structured and systematic approach.

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

Attributes of Good Software

A

Good software can be defined by several attributes, which include:

Reliability:
Good software must be reliable, meaning it should function as expected and deliver consistent results without crashing or malfunctioning.

Scalability:
Good software should be able to handle an increasing amount of workloads and users without compromising its performance and functionality.

Maintainability:
Good software should be easy to maintain and update. The code should be well-organized, and there should be proper documentation and
support available.

Usability:
Good software should be user-friendly and intuitive, making it easy for users to interact with it and perform tasks efficiently.

Efficiency:
Good software should be designed to consume minimal resources, such as memory, disk space, and processing power, while still delivering
optimal performance.

Portability:
Good software should be portable across different platforms and environments, making it easy to install, configure, and run on various devices
and operating systems.

Security:
Good software should be secure, meaning it should protect user data and privacy and prevent unauthorized access and data breaches.

Compatibility:
Good software should be compatible with other software and systems, allowing it to integrate with other applications and share data
seamlessly.

By adhering to these attributes, developers can create software that delivers a superior user experience and meets the needs of both users and
organizations.

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

Software and its Types

A

Software refers to computer programs, data, and instructions that tell a computer what to do. There are many different types of software, each with its
own unique purpose and functionality.

Here are some of the most common types of software:

Operating system (OS) software:
The most important software on a computer, an OS manages all of the other programs and applications on the computer.

Application software:
Applications are programs that perform specific tasks, such as word processing, accounting, or photo editing.

Utility software:
Utility software is used to maintain and optimize the performance of a computer, such as antivirus software, disk cleanup, and backup
software.

Programming software:
Programming software is used to create computer programs, such as integrated development environments (IDEs) and compilers.

System software:
System software controls and manages the hardware components of a computer, such as device drivers, firmware, and BIOS.

Middleware:
Middleware is software that connects different software applications, allowing them to communicate with each other and share data.

Enterprise software:
Enterprise software is used by organizations to manage their business operations, such as customer relationship management (CRM)
and enterprise resource planning (ERP) software.

Embedded software:
Embedded software is programmed into devices such as automobiles, medical devices, and appliances.

Web applications:
Web applications are software programs that run on web servers and are accessed through a web browser.

Open-source software:
Open-source software is software that is developed and distributed with its source code freely available to the public, allowing users
to modify and improve upon the software.

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