diff --git a/tests/daemon/face/dummy-face.hpp b/tests/daemon/face/dummy-face.hpp
index 15ab445..bdca129 100644
--- a/tests/daemon/face/dummy-face.hpp
+++ b/tests/daemon/face/dummy-face.hpp
@@ -51,23 +51,23 @@
             ndn::nfd::FacePersistency persistency = ndn::nfd::FACE_PERSISTENCY_PERSISTENT,
             ndn::nfd::LinkType linkType = ndn::nfd::LINK_TYPE_POINT_TO_POINT);
 
-  /** \brief changes face state
+  /** \brief Changes face state.
    *  \throw std::runtime_error state transition is invalid
    */
   void
   setState(face::FaceState state);
 
-  /** \brief causes the face to receive an Interest
+  /** \brief Causes the face to receive an Interest.
    */
   void
   receiveInterest(const Interest& interest, const EndpointId& endpointId = {});
 
-  /** \brief causes the face to receive a Data
+  /** \brief Causes the face to receive a Data.
    */
   void
   receiveData(const Data& data, const EndpointId& endpointId = {});
 
-  /** \brief causes the face to receive a Nack
+  /** \brief Causes the face to receive a Nack.
    */
   void
   receiveNack(const lp::Nack& nack, const EndpointId& endpointId = {});
diff --git a/tests/daemon/face/ethernet-fixture.hpp b/tests/daemon/face/ethernet-fixture.hpp
index 915b2c0..dfd5615 100644
--- a/tests/daemon/face/ethernet-fixture.hpp
+++ b/tests/daemon/face/ethernet-fixture.hpp
@@ -63,7 +63,7 @@
     }
   }
 
-  /** \brief returns the first running interface
+  /** \brief Returns the first running interface.
    */
   shared_ptr<ndn::net::NetworkInterface>
   getRunningNetif() const
@@ -77,7 +77,7 @@
     return nullptr;
   }
 
-  /** \brief create a UnicastEthernetTransport
+  /** \brief Create a UnicastEthernetTransport.
    */
   void
   initializeUnicast(shared_ptr<ndn::net::NetworkInterface> netif = nullptr,
@@ -93,7 +93,7 @@
     transport = make_unique<UnicastEthernetTransport>(*netif, remoteEp, persistency, 2_s);
   }
 
-  /** \brief create a MulticastEthernetTransport
+  /** \brief Create a MulticastEthernetTransport.
    */
   void
   initializeMulticast(shared_ptr<ndn::net::NetworkInterface> netif = nullptr,
@@ -112,7 +112,7 @@
 protected:
   LimitedIo limitedIo;
 
-  /** \brief EthernetTransport-capable network interfaces
+  /** \brief EthernetTransport-capable network interfaces.
    */
   std::vector<shared_ptr<const ndn::net::NetworkInterface>> netifs;
 
diff --git a/tests/daemon/face/face-system-fixture.hpp b/tests/daemon/face/face-system-fixture.hpp
index 1891a97..1b94646 100644
--- a/tests/daemon/face/face-system-fixture.hpp
+++ b/tests/daemon/face/face-system-fixture.hpp
@@ -50,7 +50,7 @@
     faceSystem.setConfigFile(configFile);
   }
 
-  /** \brief Copy a snapshot of NetworkInterface information to \p netmon
+  /** \brief Copy a snapshot of NetworkInterface information to \p netmon.
    *  \pre netmon contains no NetworkInterface
    */
   void
@@ -81,7 +81,7 @@
     configFile.parse(text, isDryRun, "test-config");
   }
 
-  /** \brief get ProtocolFactory from FaceSystem
+  /** \brief Get ProtocolFactory from FaceSystem.
    *  \tparam F ProtocolFactory subclass
    *
    *  If ProtocolFactory with \p scheme does not exist or has an incompatible type,
@@ -96,7 +96,7 @@
     return *factory;
   }
 
-  /** \brief get ProtocolFactory from FaceSystem
+  /** \brief Get ProtocolFactory from FaceSystem.
    *  \tparam F ProtocolFactory subclass
    *
    *  If ProtocolFactory with \p scheme does not exist or has an incompatible type,
@@ -111,7 +111,7 @@
     return *factory;
   }
 
-  /** \brief list faces of specified scheme from FaceTable
+  /** \brief List faces of specified scheme from FaceTable.
    *  \param scheme local or remote FaceUri scheme
    *  \param linkType if not NONE, filter by specified LinkType
    */
@@ -140,7 +140,7 @@
 };
 
 /**
- * \brief FaceSystemFixture with a ProtocolFactory reference
+ * \brief FaceSystemFixture with a ProtocolFactory reference.
  */
 template<typename FactoryType>
 class FaceSystemFactoryFixture : public FaceSystemFixture
diff --git a/tests/daemon/face/lp-reliability.t.cpp b/tests/daemon/face/lp-reliability.t.cpp
index 81c28e0..76a92db 100644
--- a/tests/daemon/face/lp-reliability.t.cpp
+++ b/tests/daemon/face/lp-reliability.t.cpp
@@ -116,7 +116,7 @@
                        [txSeq] (auto fragIt) { return fragIt->first == txSeq; });
   }
 
-  /** \brief make an LpPacket with fragment of specified size
+  /** \brief Make an LpPacket with fragment of specified size.
    *  \param pktNum packet identifier, which can be extracted with \p getPktNum
    *  \param payloadSize total payload size; must be >= 4 and <= 255
    */
@@ -131,7 +131,7 @@
     return pkt;
   }
 
-  /** \brief extract packet identifier from LpPacket made with \p makeFrag
+  /** \brief Extract packet identifier from LpPacket made with \p makeFrag.
    *  \retval 0 packet identifier cannot be extracted
    */
   static uint32_t
diff --git a/tests/daemon/face/transport.t.cpp b/tests/daemon/face/transport.t.cpp
index 9545b83..e3e427c 100644
--- a/tests/daemon/face/transport.t.cpp
+++ b/tests/daemon/face/transport.t.cpp
@@ -68,13 +68,13 @@
   BOOST_CHECK_EQUAL(transport->persistencyHistory.back(), ndn::nfd::FACE_PERSISTENCY_PERSISTENT);
 }
 
-/** \brief a macro to declare a TransportState as a integral constant
+/** \brief A macro to declare a TransportState as a integral constant.
  *  \note we cannot use mpl::integral_c because TransportState is not an integral type
  */
 #define TRANSPORT_STATE_C(X) mpl::int_<static_cast<int>(TransportState::X)>
 
-/** \brief a map from every TransportState to a valid state transition sequence
- *         for entering this state from UP
+/** \brief A map from every TransportState to a valid state transition sequence
+ *         for entering this state from UP.
  */
 typedef mpl::map<
   mpl::pair<TRANSPORT_STATE_C(UP),
@@ -98,14 +98,14 @@
     >>
 > StateEntering;
 
-/** \brief a sequence of all valid TransportStates
+/** \brief A sequence of all valid TransportStates.
  */
 typedef mpl::fold<StateEntering,
   mpl::vector<>,
   mpl::push_back<mpl::_1, mpl::first<mpl::_2>>
 >::type States;
 
-/** \brief a set of all valid state transitions
+/** \brief A set of all valid state transitions.
  */
 typedef mpl::set<
   mpl::pair<TRANSPORT_STATE_C(UP), TRANSPORT_STATE_C(DOWN)>,
@@ -118,8 +118,8 @@
   mpl::pair<TRANSPORT_STATE_C(FAILED), TRANSPORT_STATE_C(CLOSED)>
 > ValidStateTransitions;
 
-/** \brief a metafunction to generate a sequence of all state transitions
- *         from a specified state
+/** \brief A metafunction to generate a sequence of all state transitions
+ *         from a specified state.
  */
 template<typename FromState, typename Result>
 struct StateTransitionsFrom : mpl::fold<
@@ -129,7 +129,7 @@
 {
 };
 
-/** \brief a sequence of all state transitions
+/** \brief A sequence of all state transitions.
  */
 typedef mpl::fold<
   States,
diff --git a/tests/daemon/face/udp-factory.t.cpp b/tests/daemon/face/udp-factory.t.cpp
index 41a5dfd..259dbb3 100644
--- a/tests/daemon/face/udp-factory.t.cpp
+++ b/tests/daemon/face/udp-factory.t.cpp
@@ -88,7 +88,7 @@
     }
   }
 
-  /** \brief returns a non-loopback IP address suitable for the creation of a UDP multicast face
+  /** \brief Returns a non-loopback IP address suitable for the creation of a UDP multicast face.
    */
   boost::asio::ip::address
   findNonLoopbackAddressForMulticastFace(ndn::net::AddressFamily af) const
@@ -115,7 +115,7 @@
     return this->listFacesByScheme("udp6", linkType);
   }
 
-  /** \brief determine whether \p netif has at least one IP address of the given family
+  /** \brief Determine whether \p netif has at least one IP address of the given family.
    */
   static bool
   hasAddressFamily(const NetworkInterface& netif, ndn::net::AddressFamily af)
@@ -124,7 +124,7 @@
                        [af] (const auto& a) { return a.getFamily() == af; });
   }
 
-  /** \brief determine whether a UDP multicast face is created on \p netif
+  /** \brief Determine whether a UDP multicast face is created on \p netif.
    */
   static bool
   isFaceOnNetif(const Face& face, const NetworkInterface& netif)
@@ -135,17 +135,17 @@
   }
 
 protected:
-  /** \brief MulticastUdpTransport-capable network interfaces (IPv4 + IPv6)
+  /** \brief MulticastUdpTransport-capable network interfaces (IPv4 + IPv6).
    *
    *  This should be used in test cases that do not depend on a specific address family
    */
   std::vector<shared_ptr<const NetworkInterface>> netifs;
 
-  /** \brief MulticastUdpTransport-capable network interfaces (IPv4 only)
+  /** \brief MulticastUdpTransport-capable network interfaces (IPv4 only).
    */
   std::vector<shared_ptr<const NetworkInterface>> netifsV4;
 
-  /** \brief MulticastUdpTransport-capable network interfaces (IPv6 only)
+  /** \brief MulticastUdpTransport-capable network interfaces (IPv6 only).
    */
   std::vector<shared_ptr<const NetworkInterface>> netifsV6;
 };
diff --git a/tests/daemon/face/websocket-transport-fixture.hpp b/tests/daemon/face/websocket-transport-fixture.hpp
index eed4923..c6f25da 100644
--- a/tests/daemon/face/websocket-transport-fixture.hpp
+++ b/tests/daemon/face/websocket-transport-fixture.hpp
@@ -39,12 +39,12 @@
 namespace ip = boost::asio::ip;
 using face::WebSocketTransport;
 
-/** \brief a fixture that accepts a single WebSocket connection from a client
+/** \brief A fixture that accepts a single WebSocket connection from a client.
  */
 class WebSocketTransportFixture : public GlobalIoFixture
 {
 protected:
-  /** \brief initialize server and start listening
+  /** \brief Initialize server and start listening.
    */
   void
   serverListen(const ip::tcp::endpoint& ep,
@@ -67,7 +67,7 @@
     server.start_accept();
   }
 
-  /** \brief initialize client and connect to server
+  /** \brief Initialize client and connect to server.
    */
   void
   clientConnect(const std::string& uri)
@@ -88,7 +88,7 @@
   }
 
   /**
-   * \brief Initialize both server and client, and have each other connected, create Transport
+   * \brief Initialize both server and client, and have each other connected, create Transport.
    */
   void
   initialize(const shared_ptr<const ndn::net::NetworkInterface>&,
diff --git a/tests/daemon/fw/choose-strategy.hpp b/tests/daemon/fw/choose-strategy.hpp
index 5416384..8fc1951 100644
--- a/tests/daemon/fw/choose-strategy.hpp
+++ b/tests/daemon/fw/choose-strategy.hpp
@@ -37,7 +37,7 @@
 
 namespace nfd::tests {
 
-/** \brief choose the strategy for a namespace
+/** \brief Choose the strategy for a namespace.
  *  \tparam S strategy type, must be a complete type
  *  \param forwarder the forwarder
  *  \param prefix namespace to choose the strategy for
diff --git a/tests/daemon/fw/dummy-strategy.hpp b/tests/daemon/fw/dummy-strategy.hpp
index 6785cc6..a4cc414 100644
--- a/tests/daemon/fw/dummy-strategy.hpp
+++ b/tests/daemon/fw/dummy-strategy.hpp
@@ -31,7 +31,7 @@
 namespace nfd::tests {
 
 /**
- * \brief Forwarding strategy for unit testing
+ * \brief Forwarding strategy for unit testing.
  *
  * Triggers are recorded but do nothing.
  *
@@ -48,7 +48,7 @@
   getStrategyName(uint64_t version = std::numeric_limits<uint64_t>::max());
 
   /**
-   * \brief Constructor
+   * \brief Constructor.
    *
    * \p name is recorded unchanged as getInstanceName(), and will not automatically
    * gain a version number when instantiated without a version number.
@@ -57,7 +57,7 @@
   DummyStrategy(Forwarder& forwarder, const Name& name = getStrategyName());
 
   /**
-   * \brief After receive Interest trigger
+   * \brief After receive Interest trigger.
    *
    * If interestOutFace is not null, \p interest is forwarded to that face;
    * otherwise, rejectPendingInterest() is invoked.
@@ -86,7 +86,7 @@
   afterNewNextHop(const fib::NextHop& nextHop, const shared_ptr<pit::Entry>& pitEntry) override;
 
 protected:
-  /** \brief register an alias
+  /** \brief Register an alias.
    *  \tparam S subclass of DummyStrategy
    */
   template<typename S>
@@ -112,7 +112,7 @@
 };
 
 /**
- * \brief DummyStrategy with specific version
+ * \brief DummyStrategy with specific version.
  */
 template<uint64_t VERSION>
 class VersionedDummyStrategy : public DummyStrategy
@@ -130,7 +130,7 @@
     return DummyStrategy::getStrategyName(VERSION);
   }
 
-  /** \brief constructor
+  /** \brief Constructor.
    *
    *  The strategy instance name is taken from \p name ; if it does not contain a version component,
    *  \p VERSION will be appended.
diff --git a/tests/daemon/fw/forwarding-hint.t.cpp b/tests/daemon/fw/forwarding-hint.t.cpp
index ce7c414..46e75f0 100644
--- a/tests/daemon/fw/forwarding-hint.t.cpp
+++ b/tests/daemon/fw/forwarding-hint.t.cpp
@@ -102,7 +102,7 @@
     topo.registerPrefix(nodeS, linkSQ->getFace(nodeS), "/net/ndnsim", 10);
   }
 
-  /** \brief express an Interest with Link object from consumerA
+  /** \brief Express an Interest with Link object from consumerA.
    */
   void
   consumerExpressInterest(int seq)
diff --git a/tests/daemon/fw/strategy-tester.hpp b/tests/daemon/fw/strategy-tester.hpp
index e8e795a..e7dcccc 100644
--- a/tests/daemon/fw/strategy-tester.hpp
+++ b/tests/daemon/fw/strategy-tester.hpp
@@ -68,11 +68,11 @@
     return name;
   }
 
-  /** \brief Signal emitted after each action
+  /** \brief Signal emitted after each action.
    */
   signal::Signal<StrategyTester<S>> afterAction;
 
-  /** \brief execute f and wait for a number of strategy actions
+  /** \brief Execute f and wait for a number of strategy actions.
    *  \note The actions may occur either during f() invocation or afterwards.
    *  \return whether expected number of actions have occurred
    */
diff --git a/tests/daemon/fw/topology-tester.hpp b/tests/daemon/fw/topology-tester.hpp
index 5d97392..35c1fd5 100644
--- a/tests/daemon/fw/topology-tester.hpp
+++ b/tests/daemon/fw/topology-tester.hpp
@@ -24,7 +24,7 @@
  */
 
 /** \file
- *  \brief allows testing forwarding in a network topology
+ *  \brief Allows testing forwarding in a network topology.
  */
 
 #ifndef NFD_TESTS_DAEMON_FW_TOPOLOGY_TESTER_HPP
@@ -40,11 +40,11 @@
 
 namespace nfd::tests {
 
-/** \brief identifies a node (forwarder) in the topology
+/** \brief Identifies a node (forwarder) in the topology.
  */
 typedef size_t TopologyNode;
 
-/** \brief represents a network link in the topology which connects two or more nodes
+/** \brief Represents a network link in the topology which connects two or more nodes.
  */
 class TopologyLink : noncopyable
 {
@@ -52,7 +52,7 @@
   explicit
   TopologyLink(time::nanoseconds delay);
 
-  /** \brief fail the link, cause packets to be dropped silently
+  /** \brief Fail the link, cause packets to be dropped silently.
    */
   void
   fail()
@@ -60,7 +60,7 @@
     m_isUp = false;
   }
 
-  /** \brief recover the link from a failure
+  /** \brief Recover the link from a failure.
    */
   void
   recover()
@@ -68,7 +68,7 @@
     m_isUp = true;
   }
 
-  /** \brief block transmission from i to j
+  /** \brief Block transmission from i to j.
    *
    *  Packets transmitted by i would not be delivered to j. Packets from j to i are unaffected.
    *  This can be used to simulate a wireless channel.
@@ -76,18 +76,18 @@
   void
   block(TopologyNode i, TopologyNode j);
 
-  /** \brief unblock transmission from i to j
+  /** \brief Unblock transmission from i to j.
    */
   void
   unblock(TopologyNode i, TopologyNode j);
 
-  /** \brief change the link delay
+  /** \brief Change the link delay.
    *  \param delay link delay, must be positive
    */
   void
   setDelay(time::nanoseconds delay);
 
-  /** \brief attach a face to the link
+  /** \brief Attach a face to the link.
    *  \param i forwarder index
    *  \param face a Face with InternalForwarderTransport
    */
@@ -146,12 +146,12 @@
   std::unordered_map<TopologyNode, NodeTransport> m_transports;
 };
 
-/** \brief represents a link on a single forwarder
+/** \brief Represents a link on a single forwarder.
  */
 class TopologySingleLink : noncopyable
 {
 public:
-  /** \brief constructor
+  /** \brief Constructor.
    *  \param forwarderFace a Face with InternalForwarderTransport
    */
   explicit
@@ -170,23 +170,23 @@
   face::InternalForwarderTransport* m_forwarderTransport;
 };
 
-/** \brief represents a link to a local application
+/** \brief Represents a link to a local application.
  */
 class TopologyAppLink : public TopologySingleLink
 {
 public:
-  /** \brief constructor
+  /** \brief Constructor.
    *  \param forwarderFace a Face with InternalForwarderTransport
    */
   explicit
   TopologyAppLink(shared_ptr<Face> forwarderFace);
 
-  /** \brief fail the link, cause packets to be dropped silently
+  /** \brief Fail the link, cause packets to be dropped silently.
    */
   void
   fail();
 
-  /** \brief recover the link from a failure
+  /** \brief Recover the link from a failure.
    */
   void
   recover();
@@ -204,12 +204,12 @@
   shared_ptr<ndn::Face> m_client;
 };
 
-/** \brief allows the test case to inject and observe L2 packets on a link
+/** \brief Allows the test case to inject and observe L2 packets on a link.
  */
 class TopologyBareLink : public TopologySingleLink
 {
 public:
-  /** \brief constructor
+  /** \brief Constructor.
    *  \param forwarderFace a Face with InternalForwarderTransport
    */
   explicit
@@ -226,7 +226,7 @@
   unique_ptr<Observer> m_observer;
 };
 
-/** \brief captured packets on a face
+/** \brief Captured packets on a face.
  */
 class TopologyPcap : noncopyable
 {
@@ -236,16 +236,16 @@
   std::vector<lp::Nack> sentNacks;
 };
 
-/** \brief captured packet timestamp tag
+/** \brief Captured packet timestamp tag.
  */
 using TopologyPcapTimestamp = ndn::SimpleTag<time::steady_clock::time_point, 0>;
 
-/** \brief builds a topology for forwarding tests
+/** \brief Builds a topology for forwarding tests.
  */
 class TopologyTester : noncopyable
 {
 public:
-  /** \brief creates a forwarder
+  /** \brief Creates a forwarder.
    *  \return index of new forwarder
    */
   TopologyNode
@@ -259,7 +259,7 @@
     return m_forwarders.at(i)->forwarder;
   }
 
-  /** \brief sets strategy on forwarder \p i
+  /** \brief Sets strategy on forwarder \p i.
    *  \tparam S the strategy type
    *  \note Test scenario can also access StrategyChoice table directly.
    */
@@ -272,38 +272,38 @@
     choose<S>(forwarder, prefix, instanceName);
   }
 
-  /** \brief makes a link that interconnects two or more forwarders
-   *  \brief linkType desired link type; LINK_TYPE_NONE to use point-to-point for two forwarders
+  /** \brief Makes a link that interconnects two or more forwarders.
+   *  \param linkType Desired link type; LINK_TYPE_NONE to use point-to-point for two forwarders
    *                  and multi-access for more than two forwarders; it's an error to specify
-   *                  point-to-point when there are more than two forwarders
+   *                  point-to-point when there are more than two forwarders.
    *
-   *  A face is created on each of \p forwarders .
-   *  When a packet is sent onto one of the faces on this link,
-   *  this packet will be received by all other faces on this link after \p delay .
+   *  A face is created on each of \p forwarders.
+   *  When a packet is sent onto one of the faces on this link, the packet will be
+   *  received by all other faces on this link after the specified delay.
    */
   shared_ptr<TopologyLink>
   addLink(const std::string& label, time::nanoseconds delay,
           std::initializer_list<TopologyNode> forwarders,
           ndn::nfd::LinkType linkType = ndn::nfd::LINK_TYPE_NONE);
 
-  /** \brief makes a link to local application
+  /** \brief Makes a link to a local application.
    */
   shared_ptr<TopologyAppLink>
   addAppFace(const std::string& label, TopologyNode i);
 
-  /** \brief makes a link to local application, and register a prefix
+  /** \brief Makes a link to a local application and registers a prefix.
    */
   shared_ptr<TopologyAppLink>
   addAppFace(const std::string& label, TopologyNode i, const Name& prefix, uint64_t cost = 0);
 
-  /** \brief makes a link that allows the test case to inject and observe L2 packets
+  /** \brief Makes a link that allows the test case to inject and observe layer-2 packets.
    */
   shared_ptr<TopologyBareLink>
   addBareLink(const std::string& label, TopologyNode i,
               ndn::nfd::FaceScope scope = ndn::nfd::FACE_SCOPE_LOCAL,
               ndn::nfd::LinkType linkType = ndn::nfd::LINK_TYPE_POINT_TO_POINT);
 
-  /** \brief enables packet capture on every forwarder face
+  /** \brief Enables packet capture on every forwarder face.
    */
   void
   enablePcap(bool isEnabled = true)
@@ -317,17 +317,17 @@
   TopologyPcap&
   getPcap(const Face& face);
 
-  /** \brief registers a prefix on a forwarder face
+  /** \brief Registers a prefix on a forwarder face.
    */
   void
   registerPrefix(TopologyNode i, const Face& face, const Name& prefix, uint64_t cost = 0);
 
-  /** \brief creates a producer application that answers every Interest with Data of same Name
+  /** \brief Creates a producer application that answers every Interest with Data of same Name.
    */
   void
   addEchoProducer(ndn::Face& face, const Name& prefix = "/", time::nanoseconds replyDelay = 0_ns);
 
-  /** \brief creates a consumer application that sends \p n Interests under \p prefix
+  /** \brief Creates a consumer application that sends \p n Interests under \p prefix
    *         at \p interval fixed rate.
    *  \param seq if non-negative, append sequence number instead of timestamp
    */
diff --git a/tests/daemon/limited-io.hpp b/tests/daemon/limited-io.hpp
index 68d85e2..123b370 100644
--- a/tests/daemon/limited-io.hpp
+++ b/tests/daemon/limited-io.hpp
@@ -54,7 +54,7 @@
     EXCEPTION
   };
 
-  /** \brief g_io.run() with operation count and/or time limit
+  /** \brief `g_io.run()` with operation count and/or time limit.
    *  \param nOpsLimit operation count limit, pass UNLIMITED_OPS for no limit
    *  \param timeLimit time limit, pass UNLIMITED_TIME for no limit
    *  \param tick if this LimitedIo is constructed with GlobalIoTimeFixture,
@@ -68,7 +68,7 @@
   afterOp();
 
   /**
-   * \brief Defer for the specified duration
+   * \brief Defer for the specified duration.
    *
    * Equivalent to run(UNLIMITED_OPS, d)
    */
@@ -85,7 +85,7 @@
   }
 
 private:
-  /** \brief an exception to stop IO operation
+  /** \brief An exception to stop IO operation.
    */
   class StopException : public std::exception
   {
diff --git a/tests/daemon/mgmt/face-manager.t.cpp b/tests/daemon/mgmt/face-manager.t.cpp
index 794c363..140b1c6 100644
--- a/tests/daemon/mgmt/face-manager.t.cpp
+++ b/tests/daemon/mgmt/face-manager.t.cpp
@@ -60,7 +60,7 @@
     RANDOMIZE_COUNTERS       = 1 << 3,
   };
 
-  /** \brief adds a face to the FaceTable
+  /** \brief Adds a face to the FaceTable.
    *  \param options bitwise OR'ed AddFaceFlags
    */
   shared_ptr<Face>
diff --git a/tests/daemon/mgmt/fib-manager.t.cpp b/tests/daemon/mgmt/fib-manager.t.cpp
index 5ab310d..09145c5 100644
--- a/tests/daemon/mgmt/fib-manager.t.cpp
+++ b/tests/daemon/mgmt/fib-manager.t.cpp
@@ -79,7 +79,7 @@
   };
 
   /**
-   * @brief check whether the nexthop record is added / removed properly
+   * @brief Check whether the nexthop record is added / removed properly.
    *
    * @param expectedNNextHops use nullopt to skip this check
    * @param faceId use nullopt to skip NextHopRecord checks
diff --git a/tests/daemon/mgmt/manager-common-fixture.hpp b/tests/daemon/mgmt/manager-common-fixture.hpp
index 4741ea4..b0ddf08 100644
--- a/tests/daemon/mgmt/manager-common-fixture.hpp
+++ b/tests/daemon/mgmt/manager-common-fixture.hpp
@@ -47,7 +47,7 @@
   InterestSignerFixture();
 
   /**
-   * \brief Create a ControlCommand request
+   * \brief Create a ControlCommand request.
    * \param commandName Command name including prefix, such as `/localhost/nfd/fib/add-nexthop`
    * \param params Command parameters
    * \param format Signed Interest format
@@ -82,7 +82,7 @@
 
 public: // test
   /**
-   * @brief cause management to receive an Interest
+   * @brief Cause management to receive an Interest.
    *
    * call DummyClientFace::receive to receive Interest and then call advanceClocks to ensure
    * the Interest dispatched
@@ -109,7 +109,7 @@
   };
 
   /**
-   * @brief check a specified response data with the expected ControlResponse
+   * @brief Check a specified response data with the expected ControlResponse.
    *
    * @param idx the index of the specified Data in m_responses
    * @param expectedDataName the expected name of this Data
@@ -135,7 +135,7 @@
                 int expectedContentType = -1);
 
   /**
-   * @brief concatenate specified response Data into a single block
+   * @brief Concatenate specified response Data into a single block.
    *
    * @param startIndex the start index in m_responses
    * @param nResponses the number of response to concatenate
@@ -157,7 +157,7 @@
 class ManagerFixtureWithAuthenticator : public ManagerCommonFixture
 {
 public:
-  /** \brief grant m_identityName privilege to sign commands for the management module
+  /** \brief Grant m_identityName privilege to sign commands for the management module.
    */
   void
   setPrivilege(const std::string& privilege);
diff --git a/tests/daemon/rib-io-fixture.hpp b/tests/daemon/rib-io-fixture.hpp
index 73a43bc..e825f7d 100644
--- a/tests/daemon/rib-io-fixture.hpp
+++ b/tests/daemon/rib-io-fixture.hpp
@@ -56,15 +56,15 @@
   poll();
 
 protected:
-  /** \brief pointer to global main io_service
+  /** \brief Pointer to global main io_service.
    */
   boost::asio::io_service* g_mainIo = nullptr;
 
-  /** \brief pointer to global RIB io_service
+  /** \brief Pointer to global RIB io_service.
    */
   boost::asio::io_service* g_ribIo = nullptr;
 
-  /** \brief global RIB thread
+  /** \brief Global RIB thread.
    */
   std::thread g_ribThread;
 
diff --git a/tests/daemon/table/dead-nonce-list.t.cpp b/tests/daemon/table/dead-nonce-list.t.cpp
index 7df4ec8..6c6add2 100644
--- a/tests/daemon/table/dead-nonce-list.t.cpp
+++ b/tests/daemon/table/dead-nonce-list.t.cpp
@@ -125,7 +125,7 @@
     addNonceEvent = getScheduler().schedule(ADD_INTERVAL, [this] { addNonce(); });
   }
 
-  /** \brief advance clocks by LIFETIME*t
+  /** \brief Advance clocks by `LIFETIME*t`.
    */
   void
   advanceClocksByLifetime(double t)
diff --git a/tests/daemon/table/name-tree.t.cpp b/tests/daemon/table/name-tree.t.cpp
index 8a7665e..ba87cf4 100644
--- a/tests/daemon/table/name-tree.t.cpp
+++ b/tests/daemon/table/name-tree.t.cpp
@@ -419,7 +419,7 @@
   BOOST_CHECK_EQUAL(nt.size(), 8);
 }
 
-/** \brief verify a NameTree enumeration contains expected entries
+/** \brief Verify a NameTree enumeration contains expected entries.
  *
  *  Example:
  *  \code
diff --git a/tests/daemon/table/strategy-choice.t.cpp b/tests/daemon/table/strategy-choice.t.cpp
index 574317d..b285234 100644
--- a/tests/daemon/table/strategy-choice.t.cpp
+++ b/tests/daemon/table/strategy-choice.t.cpp
@@ -40,7 +40,7 @@
     DummyStrategy::registerAs(strategyNameQ);
   }
 
-  /** \brief insert StrategyChoice entry at \p prefix for \p instanceName
+  /** \brief Insert StrategyChoice entry at \p prefix for \p instanceName.
    *  \return constructed instance name
    */
   Name
@@ -52,7 +52,7 @@
     return foundName;
   }
 
-  /** \brief determine whether the effective strategy type at \p prefix is \p S
+  /** \brief Determine whether the effective strategy type at \p prefix is \p S.
    *  \tparam S expected strategy type
    */
   template<typename S>
