eclipse-arrowhead / roadmap

Eclipse Public License 2.0
5 stars 9 forks source link

Regular Naming Convention for Systems, Services and Service Functions #4

Open emanuelpalm opened 3 years ago

emanuelpalm commented 3 years ago

Note that this is not the same as the naming convention established in (Paniagua, 2019). This is about how to come up with names, not with how to structure and spread them via DNS-SD.

As a programmer, I have been taught that consistency in naming is a boon to productivity. If you have a systematic way to name your artifacts, you will instantly know what types they have when you see their names. I wish Eclipse Arrowhead would have the same.

I propose the following:

System Names

Description: A system can be seen as something capable of fulfilling a role. As a consequence, I believe systems should always have agent nouns as names. An agent noun is the agent or title form of a verb. In English, such nouns typically end with "-or", "-ar", "-er" or "-ist". The verb indicates what the system does when fulfilling its role. It being in its agent noun form means that you are referring to the doer rather than the action itself. Examples: Service Registrar, Authorizer, Orchestrator, Gatekeeper, On-Boarder, and Certificate Authorizer. Exceptions: The current Gateway system is kind of an odd bird, as it does not provide any regular services at all (if not counting the echo and management services). As it can only function in tandem with a Gatekeeper system, I don't really mind it keep being called Gateway. The word Gateway gives it an obvious connection to the Gatekeeper system, which I also like.

Service Names

Description: A service represents a certain task a system is capable of performing. I believe services should have verbal nouns, or other nouns with derivable verbs, as names. Agent nouns are, of course, off limits, even though they qualify as deverbal nouns. The name is a noun to indicate that it can be performed rather than it being performed. The name being related to a verb means that it becomes more apparent what is happening when the service is invoked. Suitable endings of such verbal nouns could be "-ment", "-ing", "-y" or "-ion". Examples: Service Discovery, Authorization, Orchestration, Gatekeeping, On-Boarding, and Authorization Management.

Algorithm Names Operation Names

Description: A service algorithm operation represents a certain action a system is capable of performing as part of it fulfilling the task associated with one of its services. I believe algorithm names should be in the imperative mood, which means that they take the form of commandments. This is customary for naming functions in most programming languages. Examples: Authorize, On-Board, Register, Discover, Lookup and Qualify. Exceptions: This does not mean that RESTful service implementations should have endpoints like POST /authorize. The SDs should have the imperative mood names, while the corresponding RESTful IDDs should stick to the REST convention and use enpoints like POST /authorizations (which adds another authorization object to an imagined folder of authorizations).

Type Names

Description: A type names some kind of message, or structure or primitive that can be part of a message sent to or returned by a service function. Following regular programming convention, these should have names being proper nouns, optionally with preceding adjectives. Examples: Authorization Request, On-Boarding Request, Service Record, and Orchestration Record.

Words With Specific Arrowhead Definitions

It is typically wise to avoid using names that can become ambiguous in system contexts. Examples of such names are "Manager", "Handler" and "Data". The reason for this is that all systems manage data, and handling is synonymous with managing. What does a Data Manager really manage? It is not very obvious from the name, as all computers manage data. How exactly does an Event Handler handle events?

However, as Arrowhead is a new thing, we are free to give general words such as these very specific meanings. For example, it is already the case that the word "Management" in a service name indicates that the service is meant to allow for the administration and configuration of the system in question. Why not formalize it? @jenseliasson Could you think of a similarly precise definition for the word "Handler"?

emanuelpalm commented 3 years ago

These Names Need Not be Bound by Programming History

Among programmers, it is customary to stick to a subset of the ASCII character set ([A-Za-z_][0-9A-Za-z_]*) when naming artifacts. The reason for this is historical, as many programming languages have decided to stick to the limitations imposed by early programming languages and character sets. I want to propose, however, that the naming of systems, services, service functions and service function types are not bound by this convention, but are instead encouraged to use a form closer to regular English, which means that spaces, colons and commas may be used in these names (even I don't really see any reason why the two latter ever would be relevant).

In other words, these names would be preferred (especially in documentation):

Certificate Authorizer, Device Registrar, Event Publisher.

While these forms of the same names would be advised against (but may, of course, be used in computer code, configuration files or wherever it would be required by the programming language or context in general):

CertificateAuthorizer, DeviceRegistrar, EventPublisher.

emanuelpalm commented 3 years ago

@jerkerdelsing What would the process be through which a proposal like this is ratified or rejected? Would we have a ballot in a Roadmap WG meeting? The regular Bi-Weekly meeting? Who would be allowed cast a vote? Everyone present?

jerkerdelsing commented 3 years ago

We should think about this in relation to important standards like:

jerkerdelsing commented 3 years ago

Let's discuss this at age Roadmap session of the Vaccine WS next week.

emanuelpalm commented 3 years ago

@jerkerdelsing Were there any discussions on this topic at the Vaccine WS or afterwards?

jerkerdelsing commented 3 years ago

The connection standards was mentioned again. The reson why is that this is how things, sw and services are namned in different type of industrial installations. The basis is standards like to one mentioned in my previous comment.

emanuelpalm commented 3 years ago

@jerkerdelsing I tried to look for applicable parts of the ISO 10303 and 16926 standards. EXPRESS (ISO 10303-11:2004) was the only part with anything that seemed to be remotely applicable. I do not have access to it, however, since it is behind a paywall. Could you direct me to where to look for the naming convention you are referring to?

jerkerdelsing commented 3 years ago

A number of these standards and the specific parts concerning naming of things and services have been collected in Arrowhead Tools Owncloud. https://atmospheres.research.ltu.se/owncloud/index.php/apps/files/?dir=/Arrowhead_Tools/WP3%20Arrowhead%20Framework/Task%203.1/Work/SysML_Arrowhead_profile/Profile/JD/Datamodel%20standards&fileid=1944843

emanuelpalm commented 3 years ago

I have now scanned through the following documents:

  1. EXPRESS 1.1
  2. UML 2.5.1
  3. ISO/IEC 9594-8:2020 (a.k.a. ITU-T X.509 (10/2019))
  4. ISO 10303-55:2005
  5. ISO 15926-2:2003
  6. ISO 16757-2:2019
  7. ISO 23387:2020 (BIM)
  8. ISO/TS 81346-3:2012

Some of these documents are concerned with the structure of identifiers, such as ISO/TS 81346-3:2012. Others with naming specific entities (as opposed to groups of related entities, as we are), such as ISO 16757-2:2019. None of these documents are concerned about word endings, whether nouns should be used, etc. In other words, I do not see how we would be diverging from any of these standards by, for example, requiring that systems be given names that are agent nouns.

That being said, the names of the structure elements I use here is something we could use EXPRESS for, in particular. By structure element, I refer to the idea of systems containing services, which in turn are comprised of functions that take function types as input and return one such type as output. Systems and services are not something I believe to be relevant to even consider changing, the other names function and function type are, however, not something I perceive as being well-grounded. In EXPRESS, these are referred to as algorithms and types. More specifically, there are two types of algorithms, functions and procedures. They are different by only functions being able to produce a return value. There is quite a few different types, but their various forms and characteristics have no bearing on what I propose here.

emanuelpalm commented 3 years ago

@jerkerdelsing I changed the titles "Service Function Names" and "Service Function Type Names" to "Algorithm Names" and "Type Names" to better conform to EXPRESS terminology.

emanuelpalm commented 3 years ago

An alternative to calling them "algorithms" is to take on the name used by UML, "operations", which is used to name behavioral features associated with classes.

jerkerdelsing commented 3 years ago

A complex problem overall. We can almost always find another used approach for us to use. Using something well known is interesting but it need to serve our purpose and requirement.

emanuelpalm commented 3 years ago

@jerkerdelsing Could we use SysML 2 as our goto-standard for terminology? If we intend to SysML 2 it extensively it could be a good way to avoid having to map between concepts.

emanuelpalm commented 2 years ago

@jerkerdelsing @tsvetlin @borditamas @jenseliasson @vanDeventer Is making naming recommendations for Arrowhead entities something we want to pursue at all?

jenseliasson commented 2 years ago

I think the term "Algorithm" can be very confusing. I think we must be careful with renaming things.

vanDeventer commented 2 years ago

I prefer "operation". Going back to your first post, end up with: System name, Service name, Operation name. A system offers services that performs operations. A system consumes services that perform operations.

emanuelpalm commented 2 years ago

@vanDeventer I agree that "operation" is a better name than function. I will update the "Core Concepts" document (previously known as the "Eclipse Arrowhead Reference Model") to use the word.

We still have not come to any conclusion regarding the naming of the actual systems, services and operations, however.

jenseliasson commented 2 years ago

Hi. I also like the term 'operation.

Jens

On Fri, 19 Nov 2021, 09:32 Emanuel Palm @.***> wrote:

@vanDeventer https://github.com/vanDeventer I agree that "operation" is a better name than function. I will update the "Core Concepts" document (previously known as the "Eclipse Arrowhead Reference Model") to use the word.

We still have not come to any conclusion regarding the naming of the actual systems, services and operations, however.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/eclipse-arrowhead/roadmap/issues/4#issuecomment-973864517, or unsubscribe https://github.com/notifications/unsubscribe-auth/AA52PBILKPHZ26R3426DHTTUMYDS5ANCNFSM42RR36TQ .

jerkerdelsing commented 2 years ago

If we think the interoperability way we should be able to handle any approach to name a service, a service function, a system and a device. The different application area standards have various background like e.g. the Express language (10303 and 15926), KernML (SysML 2). We probably need to stick to one way of typing a service, service function, system and device within Arrowhead.

For the "service function" discussed I agree with using the type "operation" which matches SysML 1.6. I'm not sure about the SysML 2. Will ask Oystein.

emanuelpalm commented 2 years ago

@jerkerdelsing I have been unable to find any material in EXPRESS or SysML2 that specify what kind of grammatical spoken-language constructs should be used when naming anything. Also, I don't understand why any such names would lead to any kinds of interoperability-issues with any existing standards. I am not talking about identifiers now, but about names read and written by humans. Is identifiers what you are concerned with?

Only identifiers matching the regex [A-Za-Z][0-9A-Za-z_]* can be defined in EXPRESS. SysML2 allows for any UTF-8 characters to be used, even spaces. This as identifiers can be written surrounded by simple quotes ('). Is this what you are having in mind? If so, we could just demand that my above guidelines be followed but that the regex [A-Za-Z](_? [0-9A-Za-z])* is satisfied by all names. When names are written for humans only, underscores may be substituted for plain spaces. This should guarantee compatibility with pretty much every modeling format and programming language there is.

SysML2 seems to have changed the name from "Operation" to "Function" (see Kernel Modeling Language version 1.0 (ad/2021-11-02), Section 7.4.7).

jerkerdelsing commented 2 years ago

@emanuelpalm You should not find that there. But since EXPESS and KernML is used for higher level languages like ISO 10303 AP242 or AP209, ISO 15926, BIM, ... who each of them have a specification for how for example a sensor should be named. These specifications are driven by the application field and here will interoperability problems show up when things like IoT's need to talk to another IoT across an application domain boarder.

emanuelpalm commented 2 years ago

@jerkerdelsing Nothing is preventing us from both having Arrowhead-centric names and other names for the same entities. For example, I noted above that adhering to my convention for operation names is not compatible with the RESTful specification. This is not a problem, as long as a mapping is made between the Arrowhead names and the REST names in IDDs. Supporting multiple names for specific entities is probably something we will want in either case, since a use case may demand that a sensor, for example, both satisfies ISO 10303 AP242 and some other standard with an incompatible naming schema.