Artifact 62bfdbb944702d71759735e92be011c362cf0e4533506e1782f9c5beae46284d:
- Executable file
r38/packages/mathml/testing.tex
— part of check-in
[f2fda60abd]
at
2011-09-02 18:13:33
on branch master
— Some historical releases purely for archival purposes
git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/trunk/historical@1375 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 11574) [annotate] [blame] [check-ins using] [more...]
\chapter{Testing} In order to confirm that the task of interfacing MathML and OpenMath has been achieved, we must test the program in a variety of situations. We will be ensuring that all guidelines described in Chapter \ref{analysis} are properly adhered to. The testing will also prove the efficiency of the overall design. The most important feature to look for is that the translation process does not alter or modify the expressions being translated. Additionally, it is essential that all results produced by the translator are compliant to the OpenMath and MathML standards. We will focus on ensuring semantic value is preserved as well as making sure that CDs appear correctly next to symbols, MathML attributes are accurate, and that OpenMath symbols not handled are properly dealt with. Finally we will test MathML outputs with the widespread MathML renderer: IBM TechExplorer. We will aim to test varios specific aspects in more detail. We will describe the testing method and the results obtained. The testing should verify whether the program accomplishes its task of translating OpenMath to MathML. \section{Translation} In order to verify whether the translation process is attained, we have created a test suite comprising over 170 MathML and OpenMath examples, more than 80 of each. Most of these examples come from the standard specifications and others have been designed to test specific aspects of the translator. Many of these examples were extensively used throughout the implementation phase. By running these examples through the translator, it was possible to carefully check if the output produced for each example corresponded to the expected result. This careful analysis, example by example, has proven that in most cases, semantic value was preserved and a proper translation was carried out. However, it is important to concentrate on the difficulties arising from translating OpenMath and MathML. \subsection{Content Dictionaries} \paragraph{Aim:} Given that symbols from different CDs may have the same name albeit different meanings, we must test the ability of the translator to relate symbols to their CDs and recognize the difference in meaning different CDs convey. \paragraph{Testing method:} In the test suite of 170 examples, there are a set of expressions testing the ability of the translator to relate symbols to their CDs. These examples contain expressions with symbols from different CDs but with the same name, to test the translator's faculty to properly handle them. There are examples where correct symbols appear next to wrong CDs and vice versa. The translator should recognize only the valid CDs. \paragraph{Results:} All examples were correctly treated. The translator was capable of recognizing valid symbols by consulting the tables, translating them accordingly. The results produced by these examples were very satisfactory. \paragraph{Aim:} To test whether OpenMath expressions generated have symbols appearing next to the correct CDs. \paragraph{Testing Method:} Running all the examples contained in {\tt examples.mml} will generate a large number of OpenMath expressions. By looking at them carefully we will see if symbols are correctly related to their CDs. \paragraph{Results:} All examples analysed were correct. The generated symbols appeared next to the appropriate CDs. However, whenever a MathML element mapped to a symbol which belonged to more than one CD (like {\it inverse} for instance), there was no rule determining which CD to place. Nevertheless, all translation were correct. \subsection{MathML Attributes} \paragraph{Aim 1:} In many cases attribute values modify the semantic value of MathML expressions and must be taken into account when translating. We would like to determine if the translator detects attribute values and takes them into account when translating. \paragraph{Aim 2:} Various OpenMath symbols map to MathML elements with specific attribute values. Does the translator detect these symbols in order to generate MathML elements with their correct attribute values? \paragraph{Testing Method:} We must gather all examples containing elements whose attribute values convey semantic meaning. We translate these elements from MathML to OpenMath and see if the semantic meaning has been preserved. We then translate back to MathML and the translator will have recognized these OpenMath elements and reproduced the original MathML element with the correct attribute value. \paragraph{Results:} All results were satisfactory. Attribute values were recognized, correctly interpreted and semantic meaning was preserved in all cases. \subsection{Extensibility} \paragraph{Aim:} To test how well the translator copes with OpenMath symbols having no equivalent MathML element. We want to determine if they are properly translated and preserve their structure and meaning. \paragraph{Testing Method:} There are various types of situations where extensibility mechanisms must be employed. These are: \begin{itemize} \item Both the CD and symbol are not recognized \item The symbol is not recognized \item The CD is not recognized \end{itemize} In these three cases, the translator must employ MathML \verb|<semantic>| tags to preserve semantic meaning. We will tes expressions based on these three cases. \paragraph{Results:} The translator automatically detected the unknown symbols and enveloped them inside \verb|<semantic>| tags. The translator worked well in cases where the OpenMath symbol translated was constructed by {\it application}. An example of this is the {\tt rank} operator seen in figure \ref{rank}. In other cases (such as {\it binding}) the results were poor and in many cases incorrect. \section{Standard Compliance} For this translator to produce usable results it must imperatively conform to MathML and OpenMath standards. This implies that all expressions produced must be lexically and syntactically correct according to the specifications. We must examine that the translator can parse and generate valid expressions. \subsection{Parsing of Expressions} \paragraph{Aim:} Valid MathML and OpenMath expressions must be parsed without difficulty by the translator. Lexical and syntax errors must be detected and attribute values must be extracted for use in translating. \paragraph{Testing Method:} The translator should correctly parse a large amount of valid MathML and OpenMath examples taken from the standards. These examples are contained in the 170 examples mentioned earlier and are considered to be correct. The World Wide Web Consortium also offers a test suite for testing applications for MathML compliance. This test suite is a series of valid MathML expressions, which if parsed prove that an application is MathML compliant. Unfortunately the URL link to this test suite was broken throughout the duration of this project and has not been able to be used. We will also introduce incorrect expressions to see if the translator declares them as erroneous. \paragraph{Results:} The translator performs well. All supported operators are correctly parsed. Syntax is validated in both standards, thus distinguishing amongst correct and incorrect expressions. Unsupported elements as described in section ref{nosupport} cause the translator to abort. The translator is MathML and OpenMath compliant. \subsection{Generation of Expressions} \paragraph{Aim:} To determine if expressions produced by the translator are MathML and OpenMath compliant. \paragraph{Testing Method 1:} In order to determine whether the OpenMath expressions are compliant, we shall introduce them back into the translator. If the translator correctly parses them then they are compliant. Additionally, we will check the expressions individually to ensure they are correct. \paragraph{Testing Method 2:} To determine if MathML expressions produced are MathML compliant, we shall translate them back to OpenMath. If the translator reads through them correctly then we can conclude the expressions are compliant. Furthermore, we will try and render the generated MathML expressions using IBM's TechExplorer. If TechExplorer renders all MathML expressions generated then we have more reason's to confirm that the MathML output is MathML compliant. \paragraph{Results:} The testing procedures all produced satisfying results. The translator's output can be parsed by itself validating the expressions. Furthermore, IBM's TechExplorer successfully parsed and rendered a large number of generated MathML1.0 expressions. \\ The results produced throughout these tests were mostly accurate, and when not, the translator was corrected. We recomend the user to run all the examples in {\tt examples.om} and {\tt examples.mml} to get a better idea of the translation efficiency. It is possible that mistakes have pased unnoticed. Reassuringly, the design is robust enough and most bugs should be quick to eliminate. \section{Interface Limitations} Testing of the interface has also revealed its limitations. Various aspects of the translation process have not been properly solved. It is important that we enumerate the areas where the translator performs poorly. In section \ref{boundvars} we mentioned that some OpenMath operators encoded their bound variables within lambda expressions. We also said that this was not compulsory. The translator however only deals with expressions where the bound variable is within a lambda expression. Other cases cause the translator to abort promptly. The analysis in section \ref{scope} discussed the importance of defining each operator's scope. The OpenMath/MathML translator gets confused when scopes are ambiguous and aborts. MathML element {\tt partialdiff} is not translated properly in most cases. Only when the variables of differentiation have an order of derivation equal to one. In all other cases the translator produces incorrect results or aborts. The translator will reject MathML expressions containing operators defined within \verb|<semantic>| tags. This is clearly something which will have to be implemented in the future, since the \verb|<semantic>| tags may contain OpenMath code. The translator is capable of distinguishing incorrect expressions from valid ones. Unfortunately there was not enough time to implement a constructive set of error messages. These error messages should have been able to quickly inform the user why a translation might have been aborted, or what problems there are with the input impeding tranlation. Finally, there is an aspect of REDUCE which limits the interface. Contrary to XML, which is case sensitive as is stated in the XML standard~\cite{xml}, REDUCE is case insensitive. Consequently when translating an expression with variables or function names using capital letters, REDUCE will produce only small letters. This may in some occasions create confusion for the user or even distort the semantics. \section{Conclusion} Although 170 examples might not be enough to test the translator in all situations, they did demonstrate that the translator coped well with the difficulties of OpenMath/MathML translation. Because these examples are a representative selection of most OpenMath and MathML operators and situations, the satisfying results confirm that the task of accurate translating has been achieved.