Specialized Analysis and Modification Tools

Code Formatters/Obfuscators/Hyperlinked CrossReferences

These tools take a badly formatted source program, and reformat it into a standard style with appropriate indentation for language block structures. This makes source code much easier to read. Since programmers spend 50% of their time reading code, this can yield a significant cost savings. Variants produce hyperlinked cross-reference information, or make code very hard to read, to hamper reverse engineering efforts (obfuscation).

Source Code Metrics

Tools to measure software quality by computing metrics over source code. SD provides these for Java and C#, covering SLOC, method counts, cyclomatic complexity, as well as summaries over entire subsystems. SD can easily configure metrics tools for your language.

Source Code Search

These tools enable investigation of large source code bases in multiple languages. After the source code based is indexed, an interactive GUI can be used to quickly find program elements according to language structures, content, or patterns. Because the tool understands language structures, it can accurately locate program constructs even if they are split across line boundaries or spelled in unusual ways. Searches can be applied across multiple languages at the same time, enabling interlanguage linkages to be easily investigated. From a list of matches, the source code can be called up called up for direct inspection. SD can easily configure this to handle even unusual languages.

Source Code comparison tools (diff)

These tools compare programming language source files, using the structure of the source language to determine source code deltas. Results are stated in terms of source language concepts such as statements, blocks, declarations, etc. and abstract editing operations such as delete, move, insert and rename. Language items which have no effect on code functionality are ignored, e.g., whitespace, comments, formatting, radix of numbers, and equivalent string representations. By providing deltas in terms familiar to the programmer, they are easier to understand and thus save time when inspecting code changes during reviews and debugging.

Memory Safety ("buffer overrun") Checking

These tools tools detect various kinds of memory access faults, including buffer overruns, array access errors, and bad pointer dereferences.

Dead and Duplicate Code Detection and Removal

CloneDR™ (Clone Doctor™)

A tool to detect and remove exact and near-miss duplicated code "clones" in large C, C++, Java, or COBOL application suites. This tool typically finds 10% redundant code in any large system. Since it costs roughly $US1.00/line/year to maintain a line of source code, removing 100K SLOC from a million line system saves $US100K/year for every year of life remaining in the software system. The CloneDR can be configured by SD for nearly any programming language.

Deactived Code detection and Removal

SD can build tools to detect and remove deactivated code (an FAA DO-178B requirement for avionics software) or dead code from large software systems. A specific version of this tool automatically removes deactived code from Java or RealTime Java systems, which is useful for footprint reduction. Please direct inquiries to sales@semdesigns.com


Test ( Code ) Coverage for Standard and Custom Languages/Embedded Systems

Branch coverage tools are valuable for assessing the completeness of a test suite. They can be obtained for standard languages (e.g., C++) on standard platforms (Unix, Windows), but are nearly impossible to find for nonstandard languages (FORTRAN, JavaScript) or even for standard languages on nonstandard platforms (C in embedded contexts). SD offers test coverage tools for standard languages, as well as custom tools that can insert branch coverage or other instrumentation in source codes for nonstandard languages and/or nonstandard environments.

Source Code Performance Profilers for Standard and Custom Languages/Embedded Systems

Tuning software for performance requires location of execution hot spots. SD supplies performance measuring tools for standard languages (e.g., Java, C, C++, COBOL, ...) on standard platforms (Unix, Windows), and can configure such tools for for nonstandard languages (FORTRAN, JavaScript) or even for standard languages on nonstandard platforms (C in embedded contexts).

Source Code Style Checking tools

These tools apply language-specific rules to source code to help ensure that "best practice" programming style is being observed. The Style Checkers invoke Semantic Designs' core analysis capabilities of parsing, name and type resolution, and flow analysis to gain a semantic understanding of the program, and then apply a variety of style-checking rules, emitting diagnostics when style violations are discovered. The diagnostics contain brief and, if necessary, detailed informative messages, identify the precise locations of the style violations, and in many cases suggest specific fixes to repair the problems. Diagnostics are annotated by severity, and warnings accompany potentially risky fixes, such as suggested repairs to shared infrastructure files. Diagnostics are output in both text and XML form for browsing by user-appropriate means. The Style Checkers can be invoked, project-style, on collections of source files. Output includes a summary report that collates total diagnostics by rule type and by source file, and that for each source file collates by rule type.

On certain development platforms, the Style Checkers come packaged with a graphical user interface that integrates configuration support, source file selection, source file editing, tool invocation and re-invocation, diagnostic browsing, and automatic application of suggested fixes. The tool can be thus integrated with development environment familiar to the software system's development engineers.

Understanding of Code and Architecture

Code Understanding

A common issue in most software organizations is simply trying to understand the software they have, how it is organized and connected. SD provides tools to help programmers learn about the software elements and their relationships to enable problem diagnosis, feature location and impact analysis.

Component Connectivity

Key to understanding or impact analysis of a large system is understanding how the sofware system elements (code modules, databases, scripts, I/O devices or screens) are connected. Key connections are typically causes-execution, reads/writes data, uses-component. SD's Component Connecivity tool extracts precise relations between the components comprising a software system, and make these easily inspected by business analysts, system architects, and software engineers.

Custom Tools

The following tools are not available as off-the-shelf products, but rather as customized products from SD. Please direct inquiries to sales@semdesigns.com

Preprocessor Conditional Removal

A tool for C and/or C++ programs, to automatically and reliably remove conditional code controlled by designated preprocessor configuration variables. This is often used to remove dead or useless configurations (such as "#IF ...VAX..."). Making such changes manually across several thousand files can cost man-years; this tool can accomplish the same effect in a day.
A technical paper is available in PDF Format

Tools for Specific Programming, Specification, or Hardware Languages

If you are looking for tools relevant to a specific language, you can see an index of languages and the tools provided by Semantic Designs.

For more information: info@semanticdesigns.com    Follow us at Twitter: @SemanticDesigns

Specialized Analysis and
Modification Tools