{"id":21918,"date":"2025-11-13T16:05:46","date_gmt":"2025-11-13T21:05:46","guid":{"rendered":"https:\/\/www.monmouth.edu\/magazine\/?p=21918"},"modified":"2025-11-13T16:23:08","modified_gmt":"2025-11-13T21:23:08","slug":"making-software-safer","status":"publish","type":"post","link":"https:\/\/www.monmouth.edu\/magazine\/making-software-safer\/","title":{"rendered":"Making Software Safer"},"content":{"rendered":"\n<p>Modern software often juggles sensitive dada, user privacy, and performance demands, all while operating in unpredictable, real-world conditions. In that environment, verification\u2014the process of ensuring a program works as intended\u2014is a critical form of quality control. But for today\u2019s increasingly complex software systems, that control isn\u2019t always easy to achieve.<\/p>\n\n\n\n<p>Earlier this year, Weihao Qu, Ph.D., received a two-year grant from the National Science Foundation to develop a new software verification framework\u2014 one that allows more detailed, accurate analysis, particularly in programs that use mutable arrays, a data structure that can be difficult to test.<\/p>\n\n\n\n<p>We asked Qu, an assistant professor in the Department of Computer Science and Software Engineering, about the challenges of verification and what he hopes to achieve through this work.<\/p>\n\n\n\n<div class=\"wp-block-magazine-qa qa\">\n<div class=\"wp-block-magazine-question question\">\n<p>Why is software verification important?<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-magazine-answer answer\">\n<p>Take a simple program like a login system, which people basically use for every application today. The danger is that it might leak your personal password information via side-channel attacks if the software is not written well.<\/p>\n\n\n\n<p>But to verify that a login system doesn\u2019t leak information, analyzing just one run of the program isn\u2019t enough. That\u2019s why we use what\u2019s called relational reasoning\u2014a method for comparing two different versions, or runs, of a program to see how they relate to each other. It\u2019s a way of checking relationships between programs or program states, such as whether two security-related processes handle information in a similar way.<\/p>\n\n\n\n<p>So, for the example of the login system, if we can compare two runs of the same login software, we can make sure that, no matter what the input is, whether the password is 100 digits or just two digits, the difference between the running time of the two runs is always zero or small. That consistency means the software is invulnerable to side-channel attacks. In other words, it will not leak your personal information.<\/p>\n\n\n\n<div class=\"wp-block-magazine-qa qa\">\n<div class=\"wp-block-magazine-question question\">\n<p>How will you be using this grant to improve the software verification process?<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-magazine-answer answer\">\n<p>There is already a lot of research in relation to software verification, and I have done some research work in this area. However, there is still one specific area that is particularly challenging, and that is programs that use mutable arrays.<\/p>\n\n\n\n<p>Arrays are places that store data in a database in an ordered way. They\u2019re important for verification because many programs use them to hold and manipulate information like lists of numbers, names, or other records.<\/p>\n\n\n\n<p>Once a regular array is created, it doesn\u2019t change, so it\u2019s easier for testers to check that the program works correctly. But mutable arrays can change as the program runs, which makes verification more challenging.<\/p>\n\n\n\n<p>Software testers have to consider not just the initial setup of the array but also every possible way it might change over time. This means more scenarios to check, more chances for mistakes, and a greater need to carefully track how the data moves so that the program can be trusted to work correctly.<\/p>\n\n\n\n<p>My framework captures the behavior of individual array elements instead of treating arrays as a whole, which leads to significantly more detailed and accurate verification results.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-magazine-qa qa\">\n<div class=\"wp-block-magazine-question question\">\n<p>What does that look like in practice?<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-magazine-answer answer\">\n<p>When a programmer writes a program, we can add something to the programming language called a type system, which is like a set of rules that helps keep information organized and consistent so that a program runs smoothly. It makes sure numbers are treated like numbers, words are treated like text, and so on.<\/p>\n\n\n\n<p>If a programmer uses mutable arrays and their program doesn\u2019t clearly state what kind of data belongs inside, the type system can suggest or automatically fill in the missing information. A type system is valuable because it guides the process of keeping data safe and consistent, reducing error and making complex programs easier to verify.<\/p>\n\n\n\n<p>But I developed a type system where a programmer has to follow its rules as specified in the system. So, if they write something that does not follow my rule, then the program won\u2019t run. If they do follow the rules I define in the system, then the program will be verified, and it\u2019s safe to run.<\/p>\n\n\n\n<div class=\"wp-block-magazine-qa qa\">\n<div class=\"wp-block-magazine-question question\">\n<p>What is the end goal, or deliverable, of your project? Is it a product or a method that other organizations can use?<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-magazine-answer answer\">\n<p>The end goal is a product, a piece of software, that people can buy. But it\u2019s also a theory that can guide people to explore relational software verification for aspects of programming beyond mutable arrays, which is just one aspect of software programming.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>With support from an NSF grant, Assistant Professor Weihao Qu is developing a framework to help programmers more precisely verify software.<\/p>\n","protected":false},"author":57,"featured_media":21920,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"image_focus":"{\"x\":33,\"y\":35}","hide_title":"","footnotes":""},"categories":[4],"tags":[91],"class_list":["post-21918","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-currents","tag-alumni-student-faculty"],"thumbnail":"<img width=\"300\" height=\"200\" src=\"https:\/\/www.monmouth.edu\/magazine\/wp-content\/uploads\/sites\/7\/2025\/11\/14-Weihao-Qu-013A0983-copy-300x200.jpg\" class=\"lazyload wp-image-21920 wp-post-image\" alt=\"\" role=\"presentation\" style=\"object-position:33% 35%\" loading=\"lazy\" decoding=\"async\" srcset=\"https:\/\/www.monmouth.edu\/magazine\/wp-content\/uploads\/sites\/7\/2025\/11\/14-Weihao-Qu-013A0983-copy-300x200.jpg 300w, https:\/\/www.monmouth.edu\/magazine\/wp-content\/uploads\/sites\/7\/2025\/11\/14-Weihao-Qu-013A0983-copy-1024x683.jpg 1024w, https:\/\/www.monmouth.edu\/magazine\/wp-content\/uploads\/sites\/7\/2025\/11\/14-Weihao-Qu-013A0983-copy-768x512.jpg 768w, https:\/\/www.monmouth.edu\/magazine\/wp-content\/uploads\/sites\/7\/2025\/11\/14-Weihao-Qu-013A0983-copy-1536x1024.jpg 1536w, https:\/\/www.monmouth.edu\/magazine\/wp-content\/uploads\/sites\/7\/2025\/11\/14-Weihao-Qu-013A0983-copy-2048x1366.jpg 2048w, https:\/\/www.monmouth.edu\/magazine\/wp-content\/uploads\/sites\/7\/2025\/11\/14-Weihao-Qu-013A0983-copy-2800x1867.jpg 2800w, https:\/\/www.monmouth.edu\/magazine\/wp-content\/uploads\/sites\/7\/2025\/11\/14-Weihao-Qu-013A0983-copy-1400x934.jpg 1400w, https:\/\/www.monmouth.edu\/magazine\/wp-content\/uploads\/sites\/7\/2025\/11\/14-Weihao-Qu-013A0983-copy-828x552.jpg 828w, https:\/\/www.monmouth.edu\/magazine\/wp-content\/uploads\/sites\/7\/2025\/11\/14-Weihao-Qu-013A0983-copy-360x240.jpg 360w, https:\/\/www.monmouth.edu\/magazine\/wp-content\/uploads\/sites\/7\/2025\/11\/14-Weihao-Qu-013A0983-copy-9x6.jpg 9w, https:\/\/www.monmouth.edu\/magazine\/wp-content\/uploads\/sites\/7\/2025\/11\/14-Weihao-Qu-013A0983-copy.jpg 3500w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/>","catString":"Currents","issue":"Fall\/Winter 2025","_links":{"self":[{"href":"https:\/\/www.monmouth.edu\/magazine\/wp-json\/wp\/v2\/posts\/21918","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.monmouth.edu\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.monmouth.edu\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.monmouth.edu\/magazine\/wp-json\/wp\/v2\/users\/57"}],"replies":[{"embeddable":true,"href":"https:\/\/www.monmouth.edu\/magazine\/wp-json\/wp\/v2\/comments?post=21918"}],"version-history":[{"count":3,"href":"https:\/\/www.monmouth.edu\/magazine\/wp-json\/wp\/v2\/posts\/21918\/revisions"}],"predecessor-version":[{"id":22087,"href":"https:\/\/www.monmouth.edu\/magazine\/wp-json\/wp\/v2\/posts\/21918\/revisions\/22087"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.monmouth.edu\/magazine\/wp-json\/wp\/v2\/media\/21920"}],"wp:attachment":[{"href":"https:\/\/www.monmouth.edu\/magazine\/wp-json\/wp\/v2\/media?parent=21918"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.monmouth.edu\/magazine\/wp-json\/wp\/v2\/categories?post=21918"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.monmouth.edu\/magazine\/wp-json\/wp\/v2\/tags?post=21918"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}