**Explain the difference between SQL and NoSQL databases.** SQL databases are relational databases that use structured schemas and tables to store data. NoSQL databases, on the other hand, are non-relational and can handle unstructured or semi-structured data. SQL databases are known for their ACID properties (Atomicity, Consistency, Isolation, Durability), while NoSQL databases often prioritize scalability and flexibility. **What is a primary key in SQL, and why is it important?** A primary key is a unique identifier for each record in a table. It ensures that each row in the table is uniquely identifiable and enforces data integrity. It is crucial for maintaining data accuracy and for establishing relationships between tables in a relational database. **Explain the differences between INNER JOIN, LEFT JOIN, RIGHT JOIN, and FULL JOIN in SQL.** - INNER JOIN returns only the rows that have matching values in both tables. - LEFT JOIN returns all rows from the left table and the matched rows from the right table. If there is no match, NULL values are returned. - RIGHT JOIN returns all rows from the right table and the matched rows from the left table. If there is no match, NULL values are returned. - FULL JOIN returns all rows when there is a match in either the left or right table. If there is no match, NULL values are returned. **What is normalization in SQL, and why is it important in database design?** Normalization is the process of organizing data in a database to reduce redundancy and dependency. It involves dividing large tables into smaller, related tables and defining relationships between them. Normalization helps maintain data integrity, reduce data duplication, and optimize query performance. **What is Agile testing, and how does it differ from traditional testing methodologies?** - Agile testing is iterative and incremental, with testing activities happening continuously throughout development. - Testers are involved from the project's inception, collaborating closely with developers and stakeholders. - Test cases are frequently updated to accommodate changing requirements. - Customer feedback is prioritized, and testing focuses on delivering a minimum viable product quickly. **Explain the role of a tester in an Agile development team. How does it vary from a tester's role in a Waterfall environment?** In Agile: - Testers work collaboratively with developers and other team members to define acceptance criteria and ensure that user stories meet them. - Testers frequently execute test cases, including regression testing, to maintain quality. - Testers participate in daily stand-up meetings to discuss progress and challenges. In Waterfall: - Testers typically have a more defined, sequential role, with testing occurring after development phases. - Testers follow detailed test plans and execute test cases according to a predetermined schedule. - Interaction with developers may be less frequent. **What is the purpose of the Daily Stand-up (Scrum) or Daily Huddle (Kanban) in Agile, and how does it impact testing?** Daily stand-up meetings foster communication among team members, including testers. Testers can share progress, discuss challenges, and collaborate with developers, ensuring testing efforts align with the sprint goals and addressing issues promptly. **Functional vs. Non-functional Testing:** - Functional testing verifies if the software functions according to specified requirements (e.g., checking if buttons work). - Non-functional testing assesses aspects like performance, usability, security, and scalability (e.g., load testing, security testing). **Black-box vs. White-box Testing:** - Black-box testing tests the software's functionality without knowing its internal code. - White-box testing examines the internal code, logic, and structure of the software. **Smoke Testing vs. Sanity Testing:** - Smoke testing checks if the critical functionalities of the software are working before in-depth testing begins. - Sanity testing verifies if specific new functionalities or changes are working as intended. **Test Design Techniques:** - Test design techniques include Equivalence Partitioning (dividing input values into equivalence classes), Boundary Value Analysis (testing values at the boundaries of input ranges), and Decision Tables (mapping different input conditions to corresponding actions).