diff --git a/test/common/software/software.cpp b/test/common/software/software.cpp
new file mode 100644
index 0000000..9741b3c
--- /dev/null
+++ b/test/common/software/software.cpp
@@ -0,0 +1,80 @@
+#include "../exampledevice/example_device.hpp"
+
+#include <phosphor-logging/lg2.hpp>
+#include <sdbusplus/asio/connection.hpp>
+#include <sdbusplus/asio/object_server.hpp>
+#include <sdbusplus/async.hpp>
+#include <sdbusplus/server.hpp>
+
+#include <memory>
+#include <regex>
+
+#include <gtest/gtest.h>
+
+PHOSPHOR_LOG2_USING;
+
+using namespace phosphor::software;
+using namespace phosphor::software::example_device;
+
+class SoftwareTest : public testing::Test
+{
+  protected:
+    SoftwareTest() :
+        exampleUpdater(ctx, true, nullptr), device(exampleUpdater.getDevice())
+    {}
+    ~SoftwareTest() noexcept override {}
+
+    sdbusplus::async::context ctx;
+    ExampleCodeUpdater exampleUpdater;
+    std::unique_ptr<ExampleDevice>& device;
+
+  public:
+    SoftwareTest(const SoftwareTest&) = delete;
+    SoftwareTest(SoftwareTest&&) = delete;
+    SoftwareTest& operator=(const SoftwareTest&) = delete;
+    SoftwareTest& operator=(SoftwareTest&&) = delete;
+};
+
+TEST_F(SoftwareTest, TestSoftwareConstructor)
+{
+    // the software version is currently unknown
+    EXPECT_EQ(device->softwareCurrent, nullptr);
+
+    auto sw = std::make_unique<Software>(ctx, *device);
+
+    // since that software is not an update, there is no progress
+    EXPECT_EQ(sw->softwareActivationProgress, nullptr);
+}
+
+TEST_F(SoftwareTest, TestVersionPurpose)
+{
+    auto sw = std::make_unique<ExampleSoftware>(ctx, *device);
+
+    EXPECT_EQ(sw->getPurpose(), std::nullopt);
+
+    sw->setVersion("swVersion");
+    EXPECT_EQ(sw->getPurpose(), SoftwareVersion::VersionPurpose::Unknown);
+}
+
+TEST_F(SoftwareTest, TestSoftwareId)
+{
+    auto sw = std::make_unique<Software>(ctx, *device);
+
+    std::regex re("ExampleSoftware_[0-9]+");
+    std::cmatch m;
+
+    // design: Swid = <DeviceX>_<RandomId>
+    EXPECT_TRUE(std::regex_match(sw->swid.c_str(), m, re));
+}
+
+TEST_F(SoftwareTest, TestSoftwareObjectPath)
+{
+    auto sw = std::make_unique<ExampleSoftware>(ctx, *device);
+
+    debug("{PATH}", "PATH", sw->objectPath);
+
+    // assert that the object path is as per the design
+    // design: /xyz/openbmc_project/Software/<SwId>
+    EXPECT_TRUE(std::string(sw->objectPath)
+                    .starts_with("/xyz/openbmc_project/software/"));
+}
