- Level Professional
- Duration 19 hours
- Course by University of Minnesota
-
Offered by
About
This course introduces state-of-the-art techniques for automated analysis. Automated analysis encompasses both approaches to automatically generate a very large number of tests to check whether programs meet requirements, and also means by which it is possible to *prove* that software meets requirements and that it is free from certain commonly-occurring defects, such as divide-by-zero, overflow/underflow, deadlock, race-condition freedom, buffer/array overflow, uncaught exceptions, and several other commonly-occurring bugs that can lead to program failures or security problems. The learner will become familiar with the fundamental theory and applications of such approaches, and apply a variety of automated analysis techniques on example programs. After completing this course, a learner will be able to: - Understand the foundations of automated verification: randomization and symbolic representations - Distinguish the strengths and weaknesses of random testing, symbolic analysis, static analysis, and model checking - Use a variety of state-of-the-art static analysis and automated testing tools for automated verification - Create executable requirements as an oracle suitable for automated testing and symbolic analysis - Understand how the choice of oracle affects fault-finding for automated analysis strategies. - Use automated testing to achieve full mutation coverage - Create a test plan that utilizes both manually-written tests and automated tests towards maximizing rigor, minimizing effort and time, and minimizing test costs. This course is intended for learners interested in understanding the principles of automation and the application of tools for analysis and testing of software This knowledge would benefit several typical roles: Software Engineer, Software Engineer in Test, Test Automation Engineer, DevOps Engineer, Software Developer, Programmer, Computer Enthusiast. We expect that you have some familiarity with the Software development Life-Cycle, an understanding of the fundamentals of software testing, similar to what is covered in the Introduction to Software Testing and Black-box and White-Box Testing Courses. Familiarity with an object-oriented language such as Java or ability to pick-up Java syntax quickly to write and modify code, and willingness to use tools and IDEs are assumed.Modules
Overview
5
Assignment
- Introduction to Automated Analysis
- Automated Analysis Techniques
- Symbolic Representations
- Property Specification
- Environmental Specifications and Assumptions
5
Videos
- Introduction to Automated Analysis
- Automated Analysis Techniques
- Symbolic Representations
- Property Specification
- Environmental Specification and Assumptions
1
Readings
- Overview and Syllabus
Parameterized Unit Testing
- Parameterized Unit Tests with junit-quickcheck
3
Videos
- Parameterized Unit Testing using junit-quickcheck
- Environmental Specifications in junit-quickcheck
- (Optional) Installation of Eclipse and Gradle
Automated Test Generation Techniques
3
Assignment
- Overview of Automated Test Generation
- Automated Test Generation using Random Testing
- Automated Test Generation Using Metaheuristic Search
4
Videos
- Overview of Automated Test Generation
- Automated Test Generation using Random Testing
- Automated Test Generation using Symbolic Execution
- Automated Test Generation using Metaheuristic Search
Property-Based Testing for Real-Time Systems
- Property-Based Testing with junit-quickcheck
1
Assignment
- Property-Based Testing for Real-Time Systems
4
Videos
- Property-Based Testing for Real-Time Systems
- Biasing Input Values in junit-quickcheck
- Using Generators to Create Complex Inputs in junit-quickcheck
- Explanation of Test Harness and Assignment for Microwave Example
Introduction to Static Analysis
3
Assignment
- What is static analysis?
- Designing programs for analyzability
- Summative Review
5
Videos
- What is Static Analysis
- Dataflow Analysis
- Program Wellformedness Properties
- Designing programs for analyzability
- Static Analysis with Infer
1
Readings
- Analysis Exercise with Infer
Automated Testing for Purpose
3
Assignment
- Automating Regression Testing
- Automating Security Testing Using Fuzz Testing
- Runtime Monitoring
3
Videos
- Automating Regression Testing
- Automating Security Testing Using Fuzz Testing
- Runtime Monitoring
2
Readings
- Fuzz Testing with AFL
- Runtime Monitoring Tools
Effective Verification
3
Videos
- Where Automation Fails
- Using Multiple Methods Effectively
- The Evolution of Software Testing
Review and Assessment
1
Assignment
- Summative Review of Week 4 material
Auto Summary
**Introduction to Automated Analysis** Embark on a journey into the cutting-edge world of software verification with this comprehensive course designed for IT and Computer Science enthusiasts. Guided by expert instructors from Coursera, this course delves into advanced techniques for automated analysis, aiming to equip learners with the ability to generate extensive tests and prove software reliability, free from common defects like divide-by-zero, overflow/underflow, and race conditions. In this immersive learning experience, you will explore the foundational theories and practical applications of automated analysis. Key topics include randomization, symbolic representations, static analysis, and model checking. You'll gain hands-on experience with state-of-the-art tools, enabling you to distinguish the strengths and weaknesses of various testing methods and create robust executable requirements suitable for automated testing and symbolic analysis. By the end of the course, you will possess the skills to: - Implement automated verification techniques. - Utilize static analysis and automated testing tools effectively. - Develop comprehensive test plans combining manual and automated tests to maximize efficiency and minimize costs. This course is ideal for software engineers, test automation engineers, DevOps engineers, and anyone with a passion for computer science looking to deepen their understanding of automated software testing and analysis. Prerequisites include familiarity with software development life cycles, basic software testing principles, and proficiency in an object-oriented programming language like Java. With a duration of 1140 minutes, this professional-level course is available through Coursera's Starter and Professional subscription plans. Join now to enhance your skills and ensure software excellence with automated analysis!

Mike

Kevin Wendt