Martin Kellogg
Martin Kellogg
Assistant Professor, Computer Science
4314 Guttenberg Information Technologies Center (GITC)
About Me
Martin Kellogg joined NJIT from the University of Washington, where he earned a Ph.D. in the Paul G. Allen School of Computer Science & Engineering, advised by Michael Ernst. His research focuses on making software verification - that is, using math to prove facts about what a program will do when it is run - practical for every developer by making it a standard part of every developer’s toolkit. Practical software verification increases the reliability and security of software by preventing entire classes of software errors. For example, Kellogg has published research on new, more practical verification techniques that guarantee the absence of security vulnerabilities caused by malformed object initialization, array bounds errors that might lead to buffer overflow attacks, and denial-of-service attacks against web servers caused by resource leaks at top software engineering and programming languages venues, including ICSE, ESEC/FSE, ASE, ISSTA, and OOPSLA. Verification tools based on his work that prove properties related to security, compliance, and program correctness have been deployed at large technology companies, including Amazon Web Services.
Education
Ph.D.; University of Washington-Seattle Campus; Computer Science; 2022
B.S.; University of Virginia-Main Campus; Computer Science; 2016
B.S.; University of Virginia-Main Campus; Computer Science; 2016
Website
2024 Fall Courses
CS 488 - INDEPENDENT STUDY IN CS
CS 726 - INDEPENDENT STUDY II
CS 700B - MASTER'S PROJECT
CS 701B - MASTER'S THESIS
CS 725 - INDEPENDENT STUDY I
CS 490 - DESIGN IN SOFTWARE ENGR
CS 792 - PRE-DOCTORAL RESEARCH
CS 790A - DOCT DISSERTATION & RES
CS 726 - INDEPENDENT STUDY II
CS 700B - MASTER'S PROJECT
CS 701B - MASTER'S THESIS
CS 725 - INDEPENDENT STUDY I
CS 490 - DESIGN IN SOFTWARE ENGR
CS 792 - PRE-DOCTORAL RESEARCH
CS 790A - DOCT DISSERTATION & RES
Teaching Interests
I teach classes on how to build better software. At the undergrad level, that means the tools and techniques for being a good software developer. At the graduate level, that usually means the tools and techniques for doing verification and building effective verification tools. You can think of my grad classes as being one meta-level higher than the undergrad classes: my undergrad classes cover how to be a good developer yourself; my grad classes mostly cover how to build tools that make others (and you) better developers.
Past Courses
CS 490: GUIDED DESIGN IN SOFTWARE ENGINEERING
CS 684: SOFTWARE TESTING AND QUALITY ASSURANCE
CS 785: SEMINAR IN COMPUTER AND INFORMATION SCIENCE I
CS 684: SOFTWARE TESTING AND QUALITY ASSURANCE
CS 785: SEMINAR IN COMPUTER AND INFORMATION SCIENCE I
Research Interests
My research focuses on making software verification practical for every developer: that is, on making proofs that code is correct a standard part of every developer’s toolkit, in the way that techniques like unit testing or code review are today. To achieve that goal, I work on problems ranging from the theoretical (e.g., how to verify some property using a better algorithm) to the practical (e.g., studies about how developers use and interact with verification tools). My research communities are in PL (e.g., OOPSLA, PLDI) and SE (e.g., ICSE, ASE, ISSTA).