Software Engineering Flashcards
Software Engineering definition
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.
Characteristics of a good software
- Budget
- Efficiency
- Usability
- Correctness
- Safety
- Reusability
- Portability
- Flexibility
- Maintainability
Need/Use of software engineering
- Handling of Big projects
- Cost Management
- Decrease time
- Reliable software
- Effectiveness
Software Process
Nature of Software
- System Software: is a interaction between hardware & application software.
* Examples : Operating Systems like macOS, Linux, Android and Microsoft Windows. - Application Software: Examples: Social medias apps, Gaming apps, Word processing apps, Multimedia apps, Banking
apps, Shopping apps, Booking - 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:
OOP Aspects
Encapsulation
Abstraction
Inheritance
Polymorphism
SDLC Phases
- requirements gathering,
- design,
- implementation,
- testing,
- deployment,
and maintenance.
Software Engineering vs Software programming
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.
challenges faced by the development team while implementing the software?
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
Software Testing importance
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.
Distinguish between Black- box testing and White- box testing?
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.
What’s validation and verification as applied in software testing?
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.
why is software metrics and measures important
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
Software metrics examples
- Size metrics: Measure of the number of lines of codes involved in the program.
- Function point count:
- Complexity metrics: measure of the number of paths involved in the program.
- Quality metrics: Defects, types, causes, consequences, intensity of severity
- Process Metrics:
- Resource metrics: effort, time used in implementing tasks
Define Software Quality
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: