Home > sysml, technical > What The Hell’s A Unit?

What The Hell’s A Unit?

  • CSCI = Computer Software Configuration Item
  • CSC = Computer Software Component
  • CSU = Computer Software Unit

In my industry (aerospace and defense), we use the abstract, programming-language-independent terms CSCI, CSC, and CSU as a means for organizing and conversing about software architectures and designs. The terms go way back, and I think (but am not sure) that someone in the Department Of Defense originally conjured them up.

The SysML diagram below models the semantic relationships between these “formal” terms. An application “contains” one or more CSCIs, each of which which contains one or more CSCs, each of which contains one or more CSUs. If we wanted to go one level higher, we could say that a  “system” contains one or more Applications.

CSCI CSC CSU

In my experience, the CSCI-CSC-CSU tree is almost never defined and recorded for downstream reference at project start. Nor is it evolved or built-up as the project progresses. The lack of explicit definition of the CSCs and, especially the CSUs, has often been a continuous source of ambiguity, confusion, and mis-communication within and between product development teams.

“The biggest problem in communication is the illusion that it has taken place.” – George Bernard Shaw.

A consequence of not classifying an application down to the CSU level is the classic “what the hell’s a unit?” problem. If your system is defined as just a collection of CSCIs comprised of hundreds of thousands of lines of source code and the identification of CSCs and CSUs is left to chance, then a whole CSCI can be literally considered a “unit” and you only have one unit test per CSCI to run (LOL!)

In preparation for an idea that follows, check out the language-specific taxonomies that I made up (I like to make stuff up so people can rip it to shreds) for complex C++ and Java applications below. If your app is comprised of a single, simple process without any threads or tasks (like they teach in school and intro-programming books), mentally remove the process and thread levels from the diagram. Then just plop the Application level right on top of the C++ namespace and/or the Java package levels.

Cpp And Java

To solve, or at least ameliorate the “what the hell’s a unit?” problem, I gently propose the consideration of the following concrete-to-abstract mappings for programs written in C++ and Java. In both languages, each process in an application “is a” CSCI and each thread within a process “is a” CSC. A CSU “is a” namespace (in C++) or a package (in Java).

I think that adopting a map such as this to use as a standard communication tool would lead to fewer mis-communications between and among development team members and, more importantly, between developer orgs and customer orgs that require design artifacts to employ the CSCI/CSC/CSU terminology.

Cpp Map

Java Map

As just stated, the BD00 proposal maps a C++ namespace or a java package into the lowest level element of abstract organization – the CSU. If that level of granularity is too coarse, then a class, or even a class member function (method in Java), can be designated as a CSU (as shown below). The point is that each company’s software development organization should pick one definition and use it consistently on all their projects. Then everyone would have a chance of speaking a common language and no one would be asking, “what the hell’s a freakin’ unit?“.

Finer CSU Granularity

So, “What the hell’s a unit?” in your org? A member function? A class? A namespace? A thread? A process? An application? A system?

  1. January 16, 2013 at 6:17 pm

    Was working on a proposal and this entry helped me alot. Thanks, Tony!

  2. Phil
    July 24, 2013 at 1:48 pm

    I realize this is an older post, but where would a RESTful (or even non-REST-ful) web service fit into this taxonomy? I am guessing services defined on the server side could possibly be defined as CSCI’s, but in SOA 2.0 when we tie automation to business processes perhaps the scoping becomes illusive. A service could be a collection of processes and threads serving a business’s needs.

    Click to access SOA_Manifesto.pdf

    • July 24, 2013 at 1:58 pm

      A “service” (non-web, or RESTful-web, or non-RESTful-web) can be a CSCI, or CSC, or CSU. It can be whatever you and your team and/or your customer define it to be. The point is that (AFAIK) there is no standard definition; simply define and record what your definitions are. 🙂

  3. Chris
    November 21, 2013 at 11:12 pm

    Note that CSCI comes along with its artifacts such as: SRS, SDD, .. so that choice needs to be done wisely 😉

  4. Jack Gold
    January 28, 2022 at 8:45 am

    Nicely put together article. As a 22 defense contracting vet, I’m constantly asked to define CSCIs, CSCs, and CSUs. In fact, I just got a review comment from a customer asking to explain what a CSU is. You’re article was extremely helpful in formulating my response.

    • January 28, 2022 at 9:25 am

      Thank you Jack. It’s wonderful to receive feedback like that. 👍

  5. hy
    August 21, 2023 at 9:11 pm

    Your post is very helpful to us even after a decade.
    Thank you.

  1. January 3, 2011 at 1:17 am
  2. August 18, 2011 at 1:03 am
  3. January 24, 2012 at 1:01 am
  4. March 31, 2014 at 1:00 am

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.