Software Engineering Flashcards

1
Q

Software Engineering definition

A

It is an engineering branch related to the evolution of software products using well-defined scientific principles, techniques and procedures.
The result of software engineering is an effective and reliable software product.

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

Characteristics of a good software

A
  1. Budget
  2. Efficiency
  3. Usability
  4. Correctness
  5. Safety
  6. Reusability
  7. Portability
  8. Flexibility
  9. Maintainability
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Need/Use of software engineering

A
  1. Handling of Big projects
  2. Cost Management
  3. Decrease time
  4. Reliable software
  5. Effectiveness
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Software Process

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

Nature of Software

A
  1. System Software: is a interaction between hardware & application software.
    * Examples : Operating Systems like macOS, Linux, Android and Microsoft Windows.
  2. Application Software: Examples: Social medias apps, Gaming apps, Word processing apps, Multimedia apps, Banking
    apps, Shopping apps, Booking
  3. Engineering and Scientific Softwares: This software is used to facilitate the engineering function and task take real time.
    * It has very high accuracy, complex formula evolution & data analysis. * Examples:
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

OOP Aspects

A

Encapsulation
Abstraction
Inheritance
Polymorphism

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

SDLC Phases

A
  1. requirements gathering,
  2. design,
  3. implementation,
  4. testing,
  5. deployment,
    and maintenance.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Software Engineering vs Software programming

A

Software Engineering:

Focuses on the systematic approach to developing and maintaining software systems.
Involves the entire software development lifecycle, including requirements gathering, design, implementation, testing, deployment, and maintenance.
Emphasizes principles such as project management, software architecture, quality assurance, and teamwork.
Concerned with designing and managing large-scale software projects to ensure they meet quality, time, and budget requirements.
Software Programming:

Refers to the act of writing code to create software applications or systems.
Part of the software development process where developers write code using programming languages like Python, Java, C++, etc.
Involves translating software requirements into instructions that a computer can execute.
Focuses on coding, debugging, and implementing algorithms and logic to achieve specific functionalities or solve problems.

In summary, software engineering encompasses the broader process of developing software systems, while software programming specifically refers to the act of writing code to create software applications.

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

challenges faced by the development team while implementing the software?

A

Unclear Requirements: Ambiguous or constantly changing requirements can lead to confusion and rework, delaying the development process.
Tight Deadlines: Unrealistic deadlines can put pressure on the team, leading to rushed development, increased stress, and compromised quality.
Technical Complexity: Complex architectures, integration with multiple systems, or the use of new technologies can pose technical challenges and require additional time for research and implementation.
Resource Constraints: Limited resources such as budget, skilled personnel, or access to necessary tools and technologies can hinder progress and impact the quality of the software.
Communication Issues: Poor communication within the team or with stakeholders can lead to misunderstandings, delays in decision-making, and ineffective collaboration.
Scope Creep: Scope creep occurs when the project scope expands beyond the initially defined boundaries, resulting in additional work and potential delays.
Quality Assurance: Ensuring the quality of the software through testing and debugging can be time-consuming, especially if proper testing frameworks and processes are not in place.
Integration Challenges: Integrating new software components with existing systems or third-party services can be challenging due to compatibility issues, API changes, or data migration challenges.
Risk Management: Identifying and mitigating risks such as security vulnerabilities, data breaches, or technical failures requires proactive planning and monitoring throughout the development lifecycle.
Adapting to Change: Embracing changes in project requirements, technology advancements, or market dynamics requires flexibility and agility to pivot and adjust the development approach accordingly

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

Software Testing importance

A

Bug Detection: Testing helps identify defects and errors in the software, ensuring they are fixed before deployment.

Quality Assurance: Testing ensures that the software meets specified requirements and functions correctly.

Risk Reduction: By uncovering issues early in the development process, testing reduces the risk of costly failures or malfunctions in production.
User Satisfaction: Thorough testing improves the overall quality of the software, leading to higher user satisfaction and trust.

Compliance: Testing helps ensure that the software complies with industry standards, regulations, and security requirements.

Cost Savings: Detecting and fixing issues early in the development lifecycle is more cost-effective than addressing them later.

Continuous Improvement: Testing provides feedback that can be used to improve future iterations of the software and development processes.

Overall, software testing plays a critical role in delivering reliable, high-quality software that meets user expectations and business needs.

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

Distinguish between Black- box testing and White- box testing?

A

Black-box testing:
Definition: Black-box testing is a testing technique that focuses on the external behavior of the software without considering its internal structure or implementation details.
Testing perspective: Testers view the software as a black box, where they are only concerned with inputs, outputs, and the expected behavior of the system.
Testing methods: Test cases are designed based on the software’s functional specifications, requirements, and user expectations. Testers do not have access to the internal code or design of the software.
Advantages: Black-box testing is effective for assessing the software’s functionality from an end-user perspective. It helps identify issues related to usability, functionality, and compatibility without requiring knowledge of the internal implementation.
Examples: Equivalence partitioning, boundary value analysis, usability testing, and acceptance testing are common black-box testing techniques.
White-box testing:
Definition: White-box testing, also known as glass-box testing or structural testing, is a testing technique that examines the internal structure, logic, and code of the software.
Testing perspective: Testers have access to the internal workings of the software, including source code, algorithms, and data structures. They design test cases based on this knowledge to ensure thorough coverage of the code paths.
Testing methods: Test cases are derived from the software’s internal logic, code structure, and design specifications. Testers analyze the code to identify potential errors, logical flaws, and execution paths that may not be covered by black-box testing alone.
Advantages: White-box testing provides insights into the internal quality of the software, such as code coverage, branch coverage, and path coverage. It helps uncover issues related to code correctness, optimization, and maintainability.
Examples: Statement coverage, branch coverage, path coverage, code review, and static code analysis are common white-box testing techniques.
In summary, black-box testing focuses on the software’s external behavior without considering its internal structure, while white-box testing examines the internal logic and code to ensure thorough test coverage and code quality. Both approaches are valuable and complement each other in achieving comprehensive software testing.

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

What’s validation and verification as applied in software testing?

A

Validation: Validation ensures that the software meets the requirements and expectations of the end-users and stakeholders. It answers the question, “Are we building the right product?” Validation involves assessing whether the software fulfills its intended purpose and provides value to the users. Techniques used in validation include user acceptance testing (UAT), beta testing, and customer feedback analysis.
Verification: Verification confirms that the software adheres to its specifications and requirements. It answers the question, “Are we building the product right?” Verification involves checking whether the software conforms to predefined standards and specifications throughout the development process. Techniques used in verification include code reviews, static analysis, unit testing, and integration testing.
In summary, validation ensures that the software meets user needs and expectations, while verification ensures that the software conforms to predefined standards and requirements. Both processes are essential for delivering high-quality software that satisfies both users and stakeholders.

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

why is software metrics and measures important

A

Software Metrics and Measures is the process of quantifying and symbolizing various attribute and aspects of software.

Software metrics and measures are important for several reasons:

Performance evaluation: Metrics provide objective measures to assess the performance and quality of software products and processes. They help stakeholders evaluate whether software development goals and objectives are being met efficiently and effectively.

Decision-making: Metrics enable informed decision-making by providing quantifiable data about various aspects of software development, such as productivity, quality, and resource utilization. Decision-makers can use these metrics to identify areas for improvement, allocate resources effectively, and prioritize tasks based on their impact.

Process improvement: Metrics serve as a basis for process improvement initiatives by identifying areas of inefficiency, bottlenecks, and waste in the software development lifecycle. By analyzing metrics over time, organizations can implement targeted process improvements to enhance productivity, quality, and delivery speed.

Risk management: Metrics help identify and mitigate risks associated with software development projects. By tracking metrics related to schedule adherence, defect density, and requirements volatility, project managers can proactively address issues before they escalate into larger problems, thereby reducing project risks and uncertainties.

Quality assurance: Metrics play a crucial role in quality assurance by providing insights into the quality of software products and processes. Quality metrics such as defect density, code coverage, and test effectiveness help assess the reliability, maintainability, and overall quality of software systems, enabling teams to deliver higher-quality products to customers.
Benchmarking: Metrics facilitate benchmarking activities by comparing the performance of software projects, teams, or processes against industry standards or best practices. Benchmarking allows organizations to identify areas of competitive advantage or areas where improvement is needed to align with industry norms and standards.
Communication and transparency: Metrics promote transparency and communication within software development teams and with stakeholders by providing objective data that can be easily understood and interpreted. By sharing relevant metrics with team members and stakeholders, organizations foster collaboration, accountability, and shared understanding of project goals and progress.
In summary, software metrics and measures are essential for evaluating performance, informing decision-making, driving process improvement, managing risks, ensuring quality, benchmarking against industry standards, and promoting communication and transparency within software development organizations

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

Software metrics examples

A
  1. Size metrics: Measure of the number of lines of codes involved in the program.
  2. Function point count:
  3. Complexity metrics: measure of the number of paths involved in the program.
  4. Quality metrics: Defects, types, causes, consequences, intensity of severity
  5. Process Metrics:
  6. Resource metrics: effort, time used in implementing tasks
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Define Software Quality

A

Software quality refers to the degree to which a software product meets specified requirements and user expectations. It encompasses various attributes and characteristics that determine the software’s effectiveness, reliability, maintainability, usability, and overall value to stakeholders. Software quality is multidimensional and includes both functional and non-functional aspects. Key dimensions of software quality include:

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

Software development chsllenges

A

These challenges include the shortage of developers,
finding time to build apps,
an inability to keep pace with innovations in developer tools,
difficulty with third-party integrations, workload management,
security threats,
project management, and
increased client expectations.
Requirements Management: Gathering and managing accurate and complete requirements can be challenging, especially when dealing with changing or unclear customer needs.
Resource Constraints: Limited resources, including time, budget, and skilled personnel, can hinder project progress and impact the quality of deliverables.
Technical Complexity: Developing software solutions with intricate architectures, integrations, or functionality can pose technical challenges that require innovative solutions and expertise.
Technology Stack Selection: Choosing the right technology stack, including programming languages, frameworks, and tools, can be daunting due to the multitude of options available and the need to align with project requirements and team expertise.
Team Collaboration: Effective collaboration among team members, including developers, testers, designers, and stakeholders, is crucial for project success but can be challenging to achieve, especially in distributed or cross-functional teams.
Quality Assurance: Ensuring the quality of software products through comprehensive testing, debugging, and validation processes requires significant effort and attention to detail.
Project Scope Management: Managing project scope

17
Q

Software Testing

A

Software testing is the process of evaluating a software application or system to identify defects, errors, or discrepancies between expected and actual behavior.

18
Q

Importance of Software Testing

A
  1. Quality Assurance
  2. Bug Detection
  3. Risk Detection
  4. Customer Satisfaction
  5. Cost Savings
19
Q

Software Verification and validation

A

Verification: Verification is the process of evaluating whether the software product fulfills the specified requirements and meets its intended purpose. It involves checking the software against its design documents, specifications, and standards to ensure that it has been built correctly. Verification answers the question, “Are we building the product right?” and focuses on ensuring that the software conforms to its specifications.

Validation: Validation is the process of evaluating whether the software product meets the needs and expectations of the end-users. It involves testing the software in the real-world environment to ensure that it performs as intended and delivers the desired outcomes. Validation answers the question, “Are we building the right product?” and focuses on ensuring that the software meets user requirements and provides value to stakeholders.
In summary, verification ensures that the software is built correctly according to its specifications, while validation ensures that the software meets user needs and expectations in the real-world context. Both verification and validation are essential for ensuring the quality, reliability, and usability of software products.

20
Q
  1. Software Product
  2. Software Engineering
  3. Software Evolution
  4. Software design
A
  1. Software Product: A software product is a tangible outcome of software development efforts that is designed, developed, and delivered to fulfill specific user needs or address particular problems. It encompasses both the executable code and any accompanying documentation, user interfaces, and support materials.
  2. Software Engineering: Software engineering refers to the systematic approach to the design, development, testing, and maintenance of software systems. It encompasses a disciplined and structured process to manage software projects efficiently and effectively, ensuring that the resulting software products meet quality, reliability, and performance requirements. Software engineering involves applying engineering principles, methodologies, and tools to address the challenges associated with large-scale software development, including requirements engineering, software architecture, coding standards, testing strategies, and project management techniques.
  3. Software Evolution: Software evolution refers to the continuous process of change and adaptation that software systems undergo throughout their lifecycle. It encompasses all modifications, enhancements, updates, and maintenance activities performed on software products to address evolving user needs, fix defects, improve performance, and incorporate new features or technologies. Software evolution is driven by various factors, including changes in user requirements, advancements in technology, bug fixes, regulatory compliance, and market demands. Effective software evolution requires careful planning, version control, documentation, and collaboration among stakeholders to ensure that changes are implemented smoothly without compromising system stability or functionality.
  4. Software design is the process of conceptualizing and defining the architecture, structure, and behavior of a software system before it is implemented.
21
Q

Define Software Architecture

A

Software architecture refers to the high-level structure or blueprint of a software system that outlines its components, their interactions, and the relationships between them. It defines the fundamental principles and guidelines for designing and building the software, providing a foundation for the development process. Software architecture focuses on making critical design decisions that impact the system’s quality attributes, such as performance, scalability, reliability, maintainability, and security.

22
Q

Why is software architecture important?

A

Software architecture is crucial for several reasons:

System Understanding: It provides a high-level view of the system’s structure, components, and interactions, helping stakeholders understand the system’s design and functionality. This understanding is essential for effective communication among team members, stakeholders, and users.

Quality Attributes: Software architecture addresses quality attributes or non-functional requirements, such as performance, scalability, reliability, maintainability, and security. By making deliberate architectural decisions, architects can optimize these attributes to meet the system’s goals and user expectations.

Risk Management: Architecture helps identify and mitigate technical risks early in the development process. By analyzing architectural decisions and potential trade-offs, teams can anticipate and address potential issues before they become critical problems.

Flexibility and Adaptability: A well-designed architecture provides flexibility and adaptability to accommodate changes in requirements, technology, and business needs. It allows the system to evolve over time without requiring significant redesign or reimplementation.

Scalability: Architecture defines the system’s scalability mechanisms, enabling it to handle increasing loads, users, and data volumes. Scalable architectures can grow with the business and support future expansion without sacrificing performance or reliability.

Maintainability: Good architecture facilitates system maintenance and evolution by promoting modularization, encapsulation, and separation of concerns. It makes it easier to understand, modify, and extend the system’s functionality without introducing unintended side effects or breaking existing functionality.

Cost-Efficiency: A well-designed architecture can reduce development costs by promoting code reuse, simplifying maintenance, and minimizing the need for costly rework or refactoring. It enables efficient use of resources and helps avoid unnecessary complexity.

Performance Optimization: Architecture influences the system’s performance characteristics by defining its structure, data flow, and processing logic. By carefully designing the architecture and selecting appropriate technologies and patterns, teams can optimize performance and responsiveness.

Alignment with Business Goals: Architecture aligns technical decisions with business goals and objectives, ensuring that the system meets the needs of users, customers, and stakeholders. It enables informed decision-making and prioritization of features based on their impact on business value.

23
Q

Software is Developed and Engineered and not Manufactured

A
  1. Creativity and Innovation
  2. Intangibility
  3. Flexibility and Customization
  4. Continuous Improvement
24
Q

Define and explain software stagnation and fatigue

A

Stagnation: Stagnation occurs when a software system fails to evolve or improve over time. This can happen due to factors such as lack of funding, resource constraints, technical debt, or organizational inertia. Stagnant software may become outdated, less competitive, and less able to meet user needs and expectations.

Fatigue: Software fatigue refers to the diminishing returns of efforts to maintain or enhance a software system. As software ages, it may become increasingly complex, fragile, and difficult to maintain. Developers may experience fatigue from dealing with legacy code, technical debt, and outdated technologies, leading to decreased productivity and morale.