{'fraction_non_alphanumeric': 0.023835319609967497, 'fraction_numerical': 0.0, 'mean_word_length': 5.243243243243243, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Towards an Ontology of Software: a Requirements Engineering Perspective

Although software plays an essential role in modern society, its ontological nature is still unclear. For many, software is just code, but this is not illuminating. Several researchers have attempted to understand the core nature of software and programs in terms of concepts such as code, copy, medium and execution. More recently, a proposal was made to consider software as an abstract artifact, distinct from code, just because code may change while the software remains the same. We explore in this paper the implications of such a proposal in the light of software engineering and requirements engineering literature. We make a sharp distinction between different kinds of software artifacts (code, program, software system, and software product), and describe the ways they are inter-connected in the context of a software engineering process.