diff --git a/tests/other/wscript b/tests/other/wscript
index 0d94bd6..a2099aa 100644
--- a/tests/other/wscript
+++ b/tests/other/wscript
@@ -1,6 +1,6 @@
 # -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
 """
-Copyright (c) 2014-2019,  Regents of the University of California,
+Copyright (c) 2014-2023,  Regents of the University of California,
                           Arizona Board of Regents,
                           Colorado State University,
                           University Pierre & Marie Curie, Sorbonne University,
@@ -29,20 +29,20 @@
     for module, name in {"cs-benchmark": "CS Benchmark",
                          "pit-fib-benchmark": "PIT & FIB Benchmark"}.items():
         # main
-        bld.objects(target='other-tests-%s-main' % module,
+        bld.objects(target=f'other-tests-{module}-main',
                     source='../main.cpp',
                     use='BOOST',
-                    defines=['BOOST_TEST_MODULE=%s' % name])
+                    defines=[f'BOOST_TEST_MODULE={name}'])
         # module
         bld.program(name=module,
-                    target='../../%s' % module,
-                    source=bld.path.ant_glob('%s*.cpp' % module),
-                    use='daemon-objects other-tests-%s-main' % module,
+                    target=f'{top}/{module}',
+                    source=bld.path.ant_glob(f'{module}*.cpp'),
+                    use=f'daemon-objects other-tests-{module}-main',
                     install_path=None)
 
     # face-benchmark does not rely on Boost.Test
     bld.program(name='face-benchmark',
-                target='../../face-benchmark',
+                target=f'{top}/face-benchmark',
                 source=bld.path.ant_glob('face-benchmark*.cpp'),
                 use='daemon-objects',
                 install_path=None)
diff --git a/tests/wscript b/tests/wscript
index cf28718..ed4eb19 100644
--- a/tests/wscript
+++ b/tests/wscript
@@ -1,6 +1,6 @@
 # -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
 """
-Copyright (c) 2014-2020,  Regents of the University of California,
+Copyright (c) 2014-2023,  Regents of the University of California,
                           Arizona Board of Regents,
                           Colorado State University,
                           University Pierre & Marie Curie, Sorbonne University,
@@ -41,10 +41,10 @@
 
         for module in ['core', 'daemon', 'rib', 'tools']:
             # main() for the module
-            bld.objects(target='unit-tests-%s-main' % module,
+            bld.objects(target=f'unit-tests-{module}-main',
                         source='main.cpp',
                         use='BOOST',
-                        defines=['BOOST_TEST_MODULE=NFD %s' % module.capitalize()])
+                        defines=[f'BOOST_TEST_MODULE=NFD {module.capitalize()}'])
 
             subdir = 'daemon/rib' if module == 'rib' else module
             node = bld.path.find_dir(subdir)
@@ -66,10 +66,10 @@
 
             objmod = 'daemon' if module == 'rib' else module
             # unit-tests binary for the module
-            bld.program(name='unit-tests-%s' % module,
-                        target='../unit-tests-%s' % module,
+            bld.program(name=f'unit-tests-{module}',
+                        target=f'{top}/unit-tests-{module}',
                         source=src,
-                        use='%s-objects tests-common unit-tests-%s-main' % (objmod, module),
+                        use=f'{objmod}-objects tests-common unit-tests-{module}-main',
                         defines=[tmpdir],
                         install_path=None)
 
diff --git a/tools/wscript b/tools/wscript
index f3ee6a8..5a9c396 100644
--- a/tools/wscript
+++ b/tools/wscript
@@ -1,6 +1,6 @@
 # -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
 """
-Copyright (c) 2014-2022,  Regents of the University of California,
+Copyright (c) 2014-2023,  Regents of the University of California,
                           Arizona Board of Regents,
                           Colorado State University,
                           University Pierre & Marie Curie, Sorbonne University,
@@ -25,7 +25,7 @@
 
 from waflib import Context, Utils
 
-top = '../'
+top = '..'
 
 def build(bld):
     # Single object tools:
@@ -34,7 +34,7 @@
     for tool in bld.path.ant_glob('*.cpp'):
         name = tool.change_ext('').path_from(bld.path.get_bld())
         bld.program(name=name,
-                    target=top + 'bin/%s' % name,
+                    target=f'{top}/bin/{name}',
                     source=[tool],
                     use='core-objects')
 
@@ -59,7 +59,7 @@
         srcFiles = subdir.ant_glob('**/*.cpp', excl=['main.cpp'])
         srcObjects = ''
         if srcFiles:
-            srcObjects = 'tools-%s-objects' % name
+            srcObjects = f'tools-{name}-objects'
             bld.objects(target=srcObjects,
                         source=srcFiles,
                         features='pch',
@@ -69,7 +69,7 @@
             testableObjects.append(srcObjects)
 
         bld.program(name=name,
-                    target=top + 'bin/%s' % name,
+                    target=f'{top}/bin/{name}',
                     source=[mainFile],
                     use='core-objects ' + srcObjects,
                     includes=name)
@@ -84,7 +84,7 @@
         name = script.change_ext('').path_from(bld.path.get_bld())
         bld(features='subst',
             name=name,
-            target=top + 'bin/%s' % name,
+            target=f'{top}/bin/{name}',
             source=[script],
             install_path='${BINDIR}',
             chmod=Utils.O755,
diff --git a/wscript b/wscript
index 93f2c84..a89edf3 100644
--- a/wscript
+++ b/wscript
@@ -140,7 +140,7 @@
 
     conf.define_cond('WITH_TESTS', conf.env.WITH_TESTS)
     conf.define_cond('WITH_OTHER_TESTS', conf.env.WITH_OTHER_TESTS)
-    conf.define('DEFAULT_CONFIG_FILE', '%s/ndn/nfd.conf' % conf.env.SYSCONFDIR)
+    conf.define('DEFAULT_CONFIG_FILE', f'{conf.env.SYSCONFDIR}/ndn/nfd.conf')
     # The config header will contain all defines that were added using conf.define()
     # or conf.define_cond().  Everything that was added directly to conf.env.DEFINES
     # will not appear in the config header, but will instead be passed directly to the
@@ -304,16 +304,16 @@
     # first, try to get a version string from git
     gotVersionFromGit = False
     try:
-        cmd = ['git', 'describe', '--always', '--match', '%s*' % GIT_TAG_PREFIX]
-        out = subprocess.check_output(cmd, universal_newlines=True).strip()
+        cmd = ['git', 'describe', '--always', '--match', f'{GIT_TAG_PREFIX}*']
+        out = subprocess.run(cmd, capture_output=True, check=True, text=True).stdout.strip()
         if out:
             gotVersionFromGit = True
             if out.startswith(GIT_TAG_PREFIX):
                 Context.g_module.VERSION = out.lstrip(GIT_TAG_PREFIX)
             else:
                 # no tags matched
-                Context.g_module.VERSION = '%s-commit-%s' % (VERSION_BASE, out)
-    except (OSError, subprocess.CalledProcessError):
+                Context.g_module.VERSION = f'{VERSION_BASE}-commit-{out}'
+    except (OSError, subprocess.SubprocessError):
         pass
 
     versionFile = ctx.path.find_node('VERSION.info')
@@ -331,14 +331,14 @@
                 # already up-to-date
                 return
         except EnvironmentError as e:
-            Logs.warn('%s exists but is not readable (%s)' % (versionFile, e.strerror))
+            Logs.warn(f'{versionFile} exists but is not readable ({e.strerror})')
     else:
         versionFile = ctx.path.make_node('VERSION.info')
 
     try:
         versionFile.write(Context.g_module.VERSION)
     except EnvironmentError as e:
-        Logs.warn('%s is not writable (%s)' % (versionFile, e.strerror))
+        Logs.warn(f'{versionFile} is not writable ({e.strerror})')
 
 def dist(ctx):
     ctx.algo = 'tar.xz'
