eWEEK Labs Takes MoMA for a Spin
Here's a rundown of what happens in MoMA. The program gets installed in its own directory, as it includes several DLLs and is itself a .NET binary. Since MoMA is a .NET binary, I figured I could use it to analyze itself. Indeed, I was able to run MoMA under MoMA (out of sheer curiosity), and expected that it would come up clean.Step 1 shows an introductory screen explaining how MoMA works. In Step 2, you choose your binaries and specify the version of Mono you're testing against. The screen includes a listbox that you fill with the binaries you want to test (you can test multiple binaries.) This step lets you choose individual files or an entire directory. For entire directories, you click through a tree until you get to the directory containing the binaries you want to test. Then you select the directory. The tool's listbox will fill up with all the DLL and .exe files it finds in that directory; you then have to manually remove the ones you don't want to test. If you have a lot of binaries, this works great; otherwise, just click the button with a plus sign and add individual binaries. (I also discovered a little trick: The File-Open box where you can select individual files lets you select multiple files. So there are many ways to choose your binaries.) For this particular test, I filled the listbox with the three DLLs and single executable file found in its directory. Then I clicked Next to move to the next screen in the wizard. Step 3 in the wizard starts the scanning. The first thing the tool does is make sure the binaries are all indeed CLI binaries. If you choose, for example, a plain old Win32 DLL or .exe, the tool will alert you that it's skipping that file. The screen then shows a summary of the problems found. The test on the tool's own binaries found no problems, as I suspected would be the case. It tested four categories, and each passed: --All methods called exist in Mono, which means you're not calling methods that the Mono project hasn't implemented. --No P/Invokes are called, which means you're not calling directly into the operating system. --No methods that throw NotImplementedException are called, which means you're not calling methods that technically exist as a stub in Mono but haven't yet been coded. (Remember, Mono is an ongoing project.) --No methods marked with [MonoTodo] are called, which is similar in nature to the previous category. Step 4 is pretty interesting, as long as you don't abuse it: It lets you submit your results directly to the Mono project. Since I'm using MoMA to test itself, and since it passed with flying colors, I didn't click the "Submit Report" button. Instead, I just clicked Next to move to Step 5, which is really just three buttons that let you download Mono and some other tools.
The program runs as a wizard with several steps.