<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE article  PUBLIC "-//NLM//DTD Journal Publishing DTD v3.0 20080202//EN" "http://dtd.nlm.nih.gov/publishing/3.0/journalpublishing3.dtd"><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" dtd-version="3.0" xml:lang="en" article-type="research article"><front><journal-meta><journal-id journal-id-type="publisher-id">JSEA</journal-id><journal-title-group><journal-title>Journal of Software Engineering and Applications</journal-title></journal-title-group><issn pub-type="epub">1945-3116</issn><publisher><publisher-name>Scientific Research Publishing</publisher-name></publisher></journal-meta><article-meta><article-id pub-id-type="doi">10.4236/jsea.2017.102010</article-id><article-id pub-id-type="publisher-id">JSEA-74347</article-id><article-categories><subj-group subj-group-type="heading"><subject>Articles</subject></subj-group><subj-group subj-group-type="Discipline-v2"><subject>Computer Science&amp;Communications</subject></subj-group></article-categories><title-group><article-title>
 
 
  How Do You Know What You Know: Epistemology in Software Engineering
 
</article-title></title-group><contrib-group><contrib contrib-type="author" xlink:type="simple"><name name-style="western"><surname>Oluwatosin</surname><given-names>Ogundare</given-names></name><xref ref-type="aff" rid="aff1"><sub>1</sub></xref><xref ref-type="corresp" rid="cor1"><sup>*</sup></xref></contrib></contrib-group><aff id="aff1"><label>1</label><addr-line>Industrial and Systems Engineering, Texas Tech University, Lubbock, TX, USA</addr-line></aff><pub-date pub-type="epub"><day>07</day><month>02</month><year>2017</year></pub-date><volume>10</volume><issue>02</issue><fpage>168</fpage><lpage>173</lpage><history><date date-type="received"><day>20,</day>	<month>January</month>	<year>2017</year></date><date date-type="rev-recd"><day>21,</day>	<month>February</month>	<year>2017</year>	</date><date date-type="accepted"><day>24,</day>	<month>February</month>	<year>2017</year></date></history><permissions><copyright-statement>&#169; Copyright  2014 by authors and Scientific Research Publishing Inc. </copyright-statement><copyright-year>2014</copyright-year><license><license-p>This work is licensed under the Creative Commons Attribution International License (CC BY). http://creativecommons.org/licenses/by/4.0/</license-p></license></permissions><abstract><p>
 
 
  Ubiquitous computing emphasizes the notion of automation in the daily human experience. With the ease, comes the responsibility of knowing, the knowledge of the intrinsic nature of the machine and the evolution of Human-Computer Interaction (HCI). The quest for knowledge is inevitable and exists even in the mundane experience. This innate search is the soul of the act of questioning. “How?” “What? “Why?” dominate our communal vocabulary and model the endlessness of our natural inquisitiveness. For example, an interaction of software systems in the case of a user who withdraws money from the ATM and automatically gets a text message and an e-mail containing notification of the transaction, engenders questions about how it all works; 
  <em>i.e.</em>, the nature of the special science that enables wireless communications. The focus is establishing foundational Truths for the modern human-software co-existence. The discussion that follows involves a delineation between the function that an intelligent software system performs and the knowledge it implicitly encapsulates. The paper expounds the role of ontology in formalizing knowledge in software systems and its contribution to the unveiling of the mystical black box that intelligent software systems often present to their human counterpart.
 
</p></abstract><kwd-group><kwd>Software Engineering</kwd><kwd> Epistemology</kwd><kwd> Ontology</kwd></kwd-group></article-meta></front><body><sec id="s1"><title>1. Introduction</title><p>“Knowledge” according to Plato is “Justified True Belief”. Knowledge that derives from aphorisms or other self-evident truths is easier to acknowledge. For example, the knowledge of “multiplication” is justified by the truthfulness of “addition”—which is often referred to as the Apriori. However, in Software Engineering, the Apriori is more obscure. The investigation of the nature of knowledge in Software Engineering requires an expansion of the general idea of the Apriori in establishing knowledge.</p><p>First, we examine the two types of technical knowledge that exist viz. Engineering Knowledge and Scientific Knowledge. The delineation of engineering knowledge to emphasize its distinction from scientific knowledge forms the premise of its understanding and highlights its own importance. According to Antonio Dias de Figueiredo, engineering knowledge is multidimensional and every notion it portrays can only be completely understood when analyzed as such [<xref ref-type="bibr" rid="scirp.74347-ref1">1</xref>]. So how is engineering knowledge constructed and what is its nature? Diana Forsythe “an anthropologist studying a scientific community engaged in formulating knowledge descriptions” asserts that knowledge in the applied sciences (engineering) is established through acquisition and formalization [<xref ref-type="bibr" rid="scirp.74347-ref2">2</xref>]. “Knowledge Acquisition” according to R. Studer et al. can be realized in one of two ways:</p><p>1) Transfer Process</p><p>2) Modeling Process</p><p>The Transfer and Modeling processes demonstrate some of the differences in constructing scientific and engineering knowledge as discussed subsequently.</p></sec><sec id="s2"><title>2. Examining the Differences between Scientific &amp; Engineering Paradigms</title><p>There is a marked distinction between knowledge realized through scientific methods and knowledge established from an engineering process. The question is how are they different? The difference is in the approach. Scientific theories or paradigms are largely based on controlled empirical processes while engineering methods are derived predominantly from the experience of what works. <xref ref-type="fig" rid="fig1">Figure 1</xref> suggests that while both paradigms begin as a search for the solution to a problem, the steps taken to find answers are very different [<xref ref-type="bibr" rid="scirp.74347-ref3">3</xref>].</p><p>The 10 steps in the engineering paradigm will in fact be an example of knowledge acquired through the “modeling” process. This process is widely used and accepted in modern enterprise software engineering. As software gets more focused on problem solving for mundane or everyday tasks, the need for a formal characterization of its encapsulated knowledge models, workflows and limitations is increasingly more important.</p></sec><sec id="s3"><title>3. Ontologies in Software Engineering</title><p>“Software engineering is one of the most knowledge-intensive professions. Knowledge and its management are relevant to several aspects of software engineering at different levels, from the strategic or organizational to the technical” [<xref ref-type="bibr" rid="scirp.74347-ref4">4</xref>]</p><p>If engineering is largely viewed or broadly considered to be the application of pure “hard” science(s), then it follows that “Software Engineering” can be simply viewed as the application of principles or theories from the discipline of computer science to real world problems. However, IEEE gives the formal definition of “Software Engineering” as follows:</p><p>“… It is the application of a systematic, disciplined, quantifiable approach to development, operation, and maintenance of software; that is, the application of engineering to software” [<xref ref-type="bibr" rid="scirp.74347-ref5">5</xref>]</p><p>From the definition, the adjectives “systematic” and “quantifiable” implies there must be a set of agreed upon rules by which measurement is carried out. Cuadrado-Gallego et al. suggest that the development of such global quantifiers will be impossible in Software Engineering without ontology. In fact, he says that without these formal ontologies, there will be no “shared, consensual conceptualization” in Software Engineering [<xref ref-type="bibr" rid="scirp.74347-ref6">6</xref>].</p><p>There are different types of Ontologies in Software Engineering, each of them serving different purposes. For example, Reference ontologies, whose main purpose is to eliminate ambiguities in terminology and mitigate the occurrence of what Thomas Kuhn refers to as “local incommensurability” [<xref ref-type="bibr" rid="scirp.74347-ref7">7</xref>]. The role of philosophy in creating such standard terminologies is elegantly stated by Nicola Guarino “… philosophy and linguistics play a fundamental role in analyzing the structure of a given reality at a high level of generality and in formulating a clear and rigorous vocabulary.” [<xref ref-type="bibr" rid="scirp.74347-ref8">8</xref>]</p><p>In contrast however, Application Ontologies are not as dense as its counterpart and thus do not require the detail and structure that would involve either Philosophy or Linguistics (at least in a formal sense). Application ontologies can be generally viewed as taxonomies of domain specific vocabulary. Apart from establishing commensurability, ontologies are relevant to epistemology in Software Engineering because they help establish Fidelity. This is especially important because according to Zelkowitz and Wallace, at least 30% of papers published on Software Engineering are not based on empirical science. Empirical methods are how we establish justified Truths or Knowledge in many science, applied science and quantitative fields where mathematical proofs are less applicable. The accepted pathway to science begins with a reasonable hypothesis, that is then tested rigorously without bias and its conclusions accepted as Knowledge. In modern software development, however, an intuition or a cross-pollinated idea from another discipline is implemented as an algorithm without ever having established its own truthfulness. Forsythe expresses a similar sentiment about her interaction with AI engineers in the excerpt below:</p><p>“Talking with AI professionals, I had been struck by the apparent parallels between the process that they call ‘knowledge acquisition’ … and what anthropologist do in the course of field research … Asked how they went about the task of gathering knowledge for their expert systems, the knowledge engineers I met tended to look surprised and say, ‘We just do it’ …”. [<xref ref-type="bibr" rid="scirp.74347-ref2">2</xref>]</p><p>Furthermore, a distinction should be made between what is considered a reasonable output of an intelligent system and what is verified knowledge produced by the same system. This is only possible if there is a formal knowledge acquisition and verification system integrated into the design of intelligent systems. In this regard, developing ontologies tie into the quest for establishing the foundation of knowledge in intelligent software systems. Ontologies in Software Engineering formalize the domain taxonomies, which leads to asking the right questions, establishing Truth and derived knowledge in line with what philosophers (empiricists) have always maintained. Furthermore, ontologies help establish technical aphorisms which may constitute Apriori truths in Software Engineering.</p><sec id="s3_1"><title>3.1. Reference Ontologies</title><p>Reference Ontologies (ROs) focuses on presenting generalized expressions (uses quantified variables in statements in line with First-Order logic) in favor of orthodox propositions (propositional logic) and is grounded in both metaphysical and epistemological realism. The central theme of Reference Ontologies is establishing Truth. However, Reference Ontologies can be wrong [<xref ref-type="bibr" rid="scirp.74347-ref9">9</xref>].</p></sec><sec id="s3_2"><title>3.2. Application Ontologies</title><p>Application Ontologies focus on reasoning and is localized to a specific computational application. Application Ontologies are philosophically grounded in pragmatism. In essence, it admits knowledge of a solution to be whatever works in the resolution of the problem. Application Ontologies have a strong methodological emphasis on fidelity i.e. maintaining consistent expressions within a specific computational application. However, Application Ontologies also admit as equivalent, pragmatic alternatives to metaphysical realism, to enable their adoption in real world computational applications [<xref ref-type="bibr" rid="scirp.74347-ref9">9</xref>]. For example, a mathematical integration problem in calculus with limits in the closed range [−∞, +∞] cannot be computationally realized but an approximate solution using a numerical method is admitted by an Application Ontology as equivalent. This form of informal equivalence relation might be problematic in mission critical intelligent systems with very limited error tolerance. In the case of computing the solution of an indefinite integral, approximations are inevitable for real world applications but the weakness of Application Ontologies in establishing knowledge is its tendency to admit approximations even for realizable computational problems. A reasonable conclusion from the preceding arguments is that the foundation of establishing knowledge in engineering and specifically Software Engineering begins with the definition of a formal Ontology. In the case of Software Engineering, we may prefer to define a Reference Ontology.</p></sec></sec><sec id="s4"><title>4. “Knowing” in Software Engineering</title><p>Following the discussion on the foundational notions of establishing knowledge and the formalization of ontologies as an important step in this regard, it is important to understand what can be potentially qualified as “known” and how they can be constructed and validated in Software Engineering.</p><sec id="s4_1"><title>4.1. The Nature of What Can Be Known in Software Engineering</title><p>Knowledge in Software Engineering is primarily acquired through modeling. The directed abstraction of “real world” problem solving without the interference of computational or software constructs or artifacts [<xref ref-type="bibr" rid="scirp.74347-ref10">10</xref>]. Constructing knowledge from modeling, according to Guus, is done at a conceptual level. This abstraction is grounded in the metaphysical nature of a Reference Ontology (RO), the goal here is not applicability but foundational Truth. Along these lines, the model must maintain internal consistency [<xref ref-type="bibr" rid="scirp.74347-ref11">11</xref>].</p></sec><sec id="s4_2"><title>4.2. Knowledge Models in Software Engineering</title><p>Knowledge models in Software Engineering can be realized as a group of closed-form mathematical transformations composing an algorithm mimicking a problem solving “use case” in a specific problem domain. Otherwise, it could also be viewed as a logical combination of rules, like the “if-else-then” method (popular in expert systems), with each branch yielding an Apriori Truth or eventually leading to one. Regardless of how the model is realized, it is important that it is grounded in ontology and maintains internal consistency.</p></sec><sec id="s4_3"><title>4.3. Validating Knowledge Models in Software Engineering (SE)</title><p>Establishing knowledge requires validation. Validating knowledge models can be viewed as providing justification for the model in reality. According to Kathleen Carly, validating models (computational models, engineering models, etc.) can be assessed at different levels targeting distinct aspects of the model. She identified at least eight aspects of the model that requires validation [<xref ref-type="bibr" rid="scirp.74347-ref12">12</xref>]. A summary of the prescribed knowledge validation techniques is presented as follows:</p><p>Face-Value validation: This measures how closely the model resembles the actual problem solving method in the real world [<xref ref-type="bibr" rid="scirp.74347-ref12">12</xref>].</p><p>Parameter Validation: This measures how closely the model parameters fit real world parameters [<xref ref-type="bibr" rid="scirp.74347-ref12">12</xref>].</p><p>Process Validation: This measures how closely the process described by the model resembles the actual real world process [<xref ref-type="bibr" rid="scirp.74347-ref12">12</xref>].</p><p>Pattern Validation: This measures if the pattern of outputs generated by the model exhibit the same pattern as in the real world [<xref ref-type="bibr" rid="scirp.74347-ref12">12</xref>].</p><p>Theoretical Validity: This checks the model for adherence to established theoretical constructs and procedures [<xref ref-type="bibr" rid="scirp.74347-ref12">12</xref>].</p></sec></sec><sec id="s5"><title>5. Conclusion</title><p>Guus Schreiber claims that attempts at describing the nature of knowledge are irrelevant to its application to “problem solving” or inventing new technologies. His justification lies in the perceived inarticulate nature of engineers when asked to expound a topic they have learned, compared to scientists, fall short in providing rigorous detail yet constantly apply these concepts to building faster and more efficient technologies. Essentially, he seems to be saying that we do not need to be able to explain knowledge to apply it [<xref ref-type="bibr" rid="scirp.74347-ref10">10</xref>]. In spite of the truth of the aforementioned, without the ability to learn the nature of knowledge, construct and validate it, establishing fidelity in AI and Software Engineering models will remain problematic. Sound epistemology will open up the future to even more engineering marvels.</p></sec><sec id="s6"><title>Conflicts of Interest</title><p>The author declares no conflicts of interest regarding the publication of this paper.</p></sec><sec id="s7"><title>Cite this paper</title><p>Ogundare, O. (2017) How Do You Know What You Know: Epistemology in Software Engineering. Journal of Software Engineering and Applications, 10, 168-173. https://doi.org/10.4236/jsea.2017.102010</p></sec></body><back><ref-list><title>References</title><ref id="scirp.74347-ref1"><label>1</label><mixed-citation publication-type="other" xlink:type="simple">Figueiredo, A. (2008) Toward an Epistemology of Engineering. In: 2008 Workshop on Philosophy and Engineering, The Royal Academy of Engineering, London, 94-95.</mixed-citation></ref><ref id="scirp.74347-ref2"><label>2</label><mixed-citation publication-type="other" xlink:type="simple">Forsythe, D.E. (1993) Engineering Knowledge: The Construction of Knowledge in Artificial Intelligence. Social Studies of Science, 23, 445–477.  
https://doi.org/10.1177/0306312793023003002.</mixed-citation></ref><ref id="scirp.74347-ref3"><label>3</label><mixed-citation publication-type="other" xlink:type="simple">http://research.uc.edu/sciencefair/resources-forms/topic-suggestions/scientific-method-v-engineering-design-procedures.aspx</mixed-citation></ref><ref id="scirp.74347-ref4"><label>4</label><mixed-citation publication-type="book" xlink:type="simple">Aurum, A., et al., Eds. (2013) Managing Software Engineering Knowledge. Springer Science &amp; Business Media, Berlin.</mixed-citation></ref><ref id="scirp.74347-ref5"><label>5</label><mixed-citation publication-type="other" xlink:type="simple">IEEE (1990) IEEE Standard Glossary of Software Engineering Terminology. IEEE Std.610, 12-1990.</mixed-citation></ref><ref id="scirp.74347-ref6"><label>6</label><mixed-citation publication-type="other" xlink:type="simple">Cuadrado-Gallego, J., Rodríguez, D., Garre, M. and Rejas, R. (2007) Epistemological and Ontological Representation in Software Engineering. International Conference on Computational Science, Springer Berlin Heidelberg, 1162-1169.  
https://doi.org/10.1007/978-3-540-72586-2_162</mixed-citation></ref><ref id="scirp.74347-ref7"><label>7</label><mixed-citation publication-type="other" xlink:type="simple">Kuhn, T.S. (2012) The Structure of Scientific Revolutions. University of Chicago Press, Chicago. https://doi.org/10.7208/chicago/9780226458144.001.0001</mixed-citation></ref><ref id="scirp.74347-ref8"><label>8</label><mixed-citation publication-type="other" xlink:type="simple">Guarino, N. (1998) Formal Ontology and Information Systems. Proceedings of FOIS, 98, No. 1998.</mixed-citation></ref><ref id="scirp.74347-ref9"><label>9</label><mixed-citation publication-type="other" xlink:type="simple">Menzel, C. (2003) Reference Ontologies-Application Ontologies: Either/Or or Both/And? KI Workshop on Reference Ontologies and Application Ontologies, CEUR Workshop Proceedings, Vol. 94, Hamburg,</mixed-citation></ref><ref id="scirp.74347-ref10"><label>10</label><mixed-citation publication-type="other" xlink:type="simple">Schreiber, G. (2000) Knowledge Engineering and Management: The Common KADS Methodology. MIT Press, Cambridge.</mixed-citation></ref><ref id="scirp.74347-ref11"><label>11</label><mixed-citation publication-type="other" xlink:type="simple">Wielinga, B.J., Schreiber, A.Th. and Breuker, J.A. (1992) KADS: A Modelling Approach to Knowledge Engineering. Knowledge Acquisition, 4, 5-53.  
https://doi.org/10.1016/1042-8143(92)90013-Q</mixed-citation></ref><ref id="scirp.74347-ref12"><label>12</label><mixed-citation publication-type="other" xlink:type="simple">Carley, K.M. (1996) Validating Computational Models.  
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.195.6257</mixed-citation></ref></ref-list></back></article>