Introduction and Overview
Throughout development, maintenance and evolution of a software system, developers are faced with continual learning. They may be onboarding to a new software project and team, learning how to use a new API or new part of an API, determining how to implement a specific feature, identifying which language feature or design pattern is most appropriate for a particular task, or learning which tool to use and how to use that tool to work more efficiently. Both novice and experienced developers find themselves in these situations as applications, libraries, languages, tools and techniques evolve.
Problems

Solution
Automated assistance to ease the learning process for software developers in the context of their current maintenance or evolution task.
How?
extracting and exploiting valuable information from programmers’ natural language (NL) usage in source code (identifiers, method signatures, and comments) [33, 37, 38, 46, 78, 94, 95, 111] and state of the art techniques in traceability [1, 4, 22, 23, 25, 65].
Challenges

  1. to enable a granularity of textual analysis of source code that provides more accurate semantic information, bridging the wide gap between single word and method level analysis,
  2. to automatically extract and distinguish between different kinds of facts, advice on good practices and pitfalls, and examples (even code templates) to learn from across a wide set of different available software artifacts containing natural language and code snippets (mixed text-code documents), and
  3. to determine adequate information about the developers’ current context to use in place of, or along with a user query, for relating the mined learning nuggets to the current developer context.


Current Traceability
We will contribute to the state of the art by developing analyses

Action Unit Granularity for Text Analysis of Source Code
The first goal of this task is to automatically identify such action units because they provide a level of semantic meaning between individual statements and whole methods that can be leveraged in supporting learning in context.
The action unit also appears to be at the same granularity as examples that developers write for API usage as part of documentation [16]. Action units provide a fine granularity of context surrounding an API call, and serve as natural candidates for code examples and for generating code templates. In addition, by identifying and generating descriptions for action units within a method, the accuracy of text analysis of source code could be improved. For example, an action unit might be an “update” or “check” for some variable, but there are no such words in the code. Relying only on matching words in the source code would not attain the same accuracy.



Identifying/Characterizing Facts & Advice from Mixed Text-Code Artifacts


Context-based Learning Nugget Analysis