Introduction: Introduction to software testing and analysis, Error, Fault, Failure, Incident, Test Cases, Testing Process, Limitations of Testing, No absolute proof of correctness, Overview of Graph Theory. Specification-based testing techniques, code-based testing techniques, Model-based testing, Functional Testing: Boundary Value Analysis, Equivalence Class Testing, Decision Table Based Testing, Cause Effect Graphing Technique. Structural Testing: Path testing, DD-Paths, Cyclomatic Complexity, Graph Metrics, Data Flow Testing, Mutation testing, Static Analysis, Dynamic Analysis Reducing the number of test cases: Prioritization guidelines, Priority category, Scheme, Risk Analysis, Regression Testing, Slice-based testing Testing Activities: Unit Testing, Levels of Testing, Integration Testing, System Testing, Debugging, Domain Testing, Regression Testing, Acceptance testing Object Oriented Testing: Issues in Object Oriented Testing, Class Testing, GUI Testing, Object Oriented Integration and System Testing, Methods of test data generation and validation. Program slicing and its application, Reliability analysis, Formal methods; verification methods; oracles. Testing Tools: Static Testing Tools, Dynamic Testing Tools, and Characteristics of Modern Tools.