General Principle of Software Engineering Practices
General Principle of Software Engineering Practices
1.Modularity:Break down complex systems into smaller, manageable, and independent Design Concepts are fundamental ideas that guide how a software system is Requirement Engineering is the process of defining, documenting, and maintaining the
modules. structured, organized, and implemented during the design phase. requirements for a software system
2. Abstraction:Focus on what an object does instead of how it does it. 1.Abstraction:Helps simplify complexity by modeling classes, functions, or Requirement Engineering is a systematic process of gathering, analyzing, specifying,
3. Encapsulation:Keep data and methods that operate on the data bundled together. components at a higher level. validating, and managing the needs and requirements of stakeholders for a software
4. Separation of Concerns:Each part of a program should handle a distinct concern or 2. Modularity:Divides a system into separate components (modules) that can be system.
responsibility. developed and tested independently. 1. Requirements Elicitation (Gathering): Collecting requirements from stakeholders like
5. DRY (Don’t Repeat Yourself) 3. Information Hiding:Limits access to the internal workings of a module. clients, users, managers, etc.
Avoid duplication of code or logic. 4. Functional Independence:Each module should perform a single task and interact 2. Requirements Analysis: Understanding and refining the gathered requirements.
6. KISS (Keep It Simple, Stupid):Simpler systems are easier to understand, debug, and minimally with other modules. 3. Requirements Specification: Documenting the requirements clearly and
maintain. 5. Refinement:A step-by-step process of elaborating a high-level design into more unambiguously.
7. Continuous Testing detailed designs. 4. Requirements Validation: Ensuring the documented requirements reflect the actual
Test early and often to catch bugs quickly. 6. Refactoring:Helps make the design cleaner, more efficient, and easier to maintain. needs.
8.Version Control:Use systems like Git to track changes, collaborate, and manage code 7. Software Architecture:Describes the overall structure and organization of the 5. Requirements Management: Handling changes to requirements as the project
history. system. evolves.
9. Documentation 8. Patterns
Maintain clear and concise documentation. Reusable solutions to common design problems.
10. Code Reviews 9. Design for Quality Attributes:While designing, consider attributes like:
Have peers review your code to catch issues, improve quality, and share knowledge. Performance,Security,Scalability,Usability
11. Security 10. Design Notation
Build software with security in mind from the Use of diagrams to visually represent the design.
beginning.
Why and Where We Can Use Agile Processes in Software #Requirement Elicitation: is the process of gathering information from stakeholders #Discuss different software testing levels.
1. Flexibility & Adaptability:Agile allows quick changes in requirements, which is ideal (like clients, users, business managers, etc.) to understand what the software system 1.Unit Testing:it tests Individual components or functions Goal: Ensure each unit of
when clients or market demands shift. should do. code works as intended.Done by: Developers.Example: Testing a single function that
2.Faster Delivery:Software is developed in small iterations (sprints), so working Purpose of Requirement Elicitation: calculates a discount.junit,pytest,nunit.
features are delivered early and regularly. To find out: 2. Integration Testing: it tests How multiple components or modules work together.
3.Improved Collaboration:Agile emphasizes constant communication between What problems the users face. Goal: Detect issues in data flow, interfaces, or module interactions.
developers, testers, and stakeholders. What features or solutions they expect. Done by: Developers or testers. Tools: JUnit (with mocks), Postman (for APIs),
4.Higher Customer Satisfaction:Frequent demos and feedback loops ensure the What constraints (budget, time, tech limits) are involved. Selenium.
product is built according to actual user needs, not assumptions. Who is Involved? Example: Testing login module with both front-end and back-end integration.
5.Better Risk Management:Regular testing and incremental development help detect Stakeholders (Clients, End Users, Managers) 3. System Testing:it tests The entire application as a complete system. Goal: Ensure the
issues early. Business Analysts whole software meets the specified requirements. Done by: QA/testers in a testing
Where:-Projects with Evolving Requirements Software Engineers or Architects environment.Tools: Selenium, QTP.
Innovative or Complex Projects Project Managers Example: Testing an e-commerce website’s end-to-end flow: search, cart, checkout,
Collaborative Teams Common techniques: interviews,workshops,quetionnaires,observation, payment.
Product Development (Web, Mobile, SaaS) 4. Acceptance Testing : it tests Whether the system meets business needs and user
Startups & Fast-paced Environments expectations.
Goal: Validate if the software is ready for delivery.
Done by: End users or clients.
#Nature of Software #Software Testing is the process of evaluating a software application to ensure it works #Software Myths are false beliefs or misconceptions about software development that
The nature of software refers to the unique characteristics that make it different from as expected, is free of defects, and meets the user and business requirements. are commonly held by clients, managers, or even developers.
physical products. It defines how software is created, behaves, evolves, and interacts Fundamentals Types of Software Myths:
with users and systems. 1.Testing Shows Presence of Defects 1.Management Myths:These are myths believed by managers, especially those not
1.Intangible Testing can show bugs are present, but can’t prove there are none. directly involved in technical development.Common Examples:"Adding more people to
Software is not a physical product—you can’t touch it. 2.Exhaustive Testing is Impossible a late project will help it finish faster."
It exists as code and data, running on hardware. You can't test all possible inputs and paths. → In reality, it usually causes delays due to the time needed for training and
2. Engineered, Not Manufactured 3.Early Testing Saves Time and Money communication.
Software is developed and engineered, not assembled like hardware. Testing should begin as early as the requirement and design stages. 2.Developer Myths:These are myths believed by software engineers or technical
3. Subject to Change (Highly Malleable) 4.Defect Clustering staff.Common Examples:"The job is done when the code works."
Requirements can change anytime. Most bugs are often found in a small number of modules. → No, it also needs documentation, testing, and maintainability.
Software is easy to modify, but changes can introduce bugs or complexity if not 5.Pesticide Paradox 3.Customer Myths:These are myths believed by clients, users, or customers.Common
managed well. Running the same tests over and over will no longer find new bugs. Examples:"A general statement of objectives is enough to start coding."
4. No Wear and Tear Types of Testing Covered by Fundamentals → In reality, clear and complete requirements are essential before coding begins.
Unlike machines, software doesn't degrade physically over time. Functional Testing,Non-Functional Testing,Manual Testing ,Automated Testing.
5. Complex but Logical
Software systems can become extremely complex, with many modules, features, and
integrations.
#control Structure Testing is a type of white-box testing that focuses on testing the #Strategic Issues in Software Development: #Software quality: refers to the degree to which a software product meets specified
control flow of a program, i.e., how the program's logic branches and loops work. 1. Aligning Software with Business Goals requirements, satisfies user needs, and is free of defects. It’s a broad concept that
Control structure testing checks if all the decisions, loops, and paths in the program's 2. Technology Selection & Innovation involves ensuring software is reliable, maintainable, efficient, and user-friendly.
control flow execute correctly.keyconcept:- 3. Talent Management & Skill Development Two Main Aspects of Software Quality
Sequential Statements 4. Project Management and Risk Mitigation Functional Quality
The default flow of execution, where one statement follows another. 5. Scalability & Performance Concerns Refers to how well the software meets functional requirements.
Decision Statements (Conditional Statements) 6. Security and Compliance This includes correctness, compliance, and completeness.
if, else, switch, etc. where the control flow branches based on conditions. 7. User Experience (UX) and Customer-Centric Design Example: A banking app correctly calculating interest and processing transactions.
Example: if (x > 10) { // Do something } 8. Time-to-Market (Speed of Delivery) Non-Functional Quality (Quality Attributes)
Looping Statements 9. Cost Management and Budgeting Refers to how well the software performs under specific conditions.
for, while, do-while loops that repeat certain actions based on a condition. 10. Legacy Systems and Technical Debt. Includes:
Example: for (int i = 0; i < 10; i++) { // Do something } Reliability – Does it work consistently without crashing?
Case Statements Usability – Is it user-friendly?
Similar to switch, where one of many possible paths is chosen based on a value. Performance – Is it fast and responsive?
#explain test case design #explain quality assurance #The Incremental Process Model is a popular software development approach where
Test case design is the process of creating a set of conditions or variables under which a Quality Assurance = Process-focused approach the system is developed and delivered in small, manageable pieces or increments,
tester determines whether a software application works correctly. A test case defines It aims to prevent defects by improving development and testing processes, whereas rather than being built all at once.
what to test, how to test it, and what the expected result should be. testing is more about finding defects. phases of the Incremental Model
Black Box Testing Techniques 1.Requirement Analysis:Making sure requirements are clear, complete, and testable. Requirement Analysis: Initial requirements are gathered for the base increment
Focus on input/output without knowing internal code. 2.Process Definition & Improvement:Defining and improving processes used in Design: Architecture is planned with future increments in mind
White Box Testing Techniques software development (like Agile, Scrum, or Waterfall). Implementation: Code the first increment
Focuses on internal code structure. 3.Audits & Reviews:Checking whether processes are followed correctly (e.g., code Testing: Each increment is tested individually
reviews, design reviews). Evaluation:Client reviews each increment
#Generic Process Model is a high-level framework that outlines the main activities 4.Test Planning:Creating a test strategy, test plan, and defining test cases. Feedback may influence future increments
involved in developing software, regardless of the specific methodology (like Waterfall, 5.Monitoring and Reporting:Tracking test results, defect metrics, and quality indicators. #The Waterfall Model is one of the earliest and most traditional software development
Agile, etc.). It provides a universal structure that most software development processes Training and Guidelines:Providing developers and testers with best practices and life cycle (SDLC) models. It's called “waterfall” because the process flows sequentially
follow. standard downward like a waterfall — from one phase to the next, without going back.
1.Communication:Understand and gather the software requirements. Phases of the Waterfall Model
2.Planning:Create a project plan, define timeline, resources, and risk assessment. Requirement Gathering & Analysis:Collect all requirements from stakeholders
3.Modeling:Convert requirements into design (both architectural and detailed. System Design:Create the overall system architecture
4.Construction:Actual coding and testing of the software. Define hardware/software needs, database design, etc.
5.Deployment:Deliver the software to the customer for use. Implementation:Developers write code based on the design
Testing:Test the system to find bugs
Deployment:Software is delivered and installed in the user's environment
Maintenance:Fix bugs or update features as needed after delivery