Today, almost every modern computing device is equipped with multicore processors capable of efficient concurrent and parallel execution of threads. This processor feature can be leveraged by concurrent programming, which is a challenge for software developers for two reasons: first, it introduces a paradigm shift that requires a new way of thinking. Second, it can lead to issues that are unique to concurrent programs due to the non-deterministic, interleaved execution of threads. Consequently, the debugging of concurrency and related performance issues is a rather difficult and often tedious task. Developers still lack on thread-aware programming tools that facilitate the understanding of concurrent programs. Ideally, these tools should be part of their daily working environment, which typically includes an Integrated Development Environment (IDE). In particular, the way source code is visually presented in traditional source-code editors does not convey much information on whether the source code is executed concurrently or in parallel in the first place.
With this dissertation, we pursue the main goal of facilitating and supporting the understanding and debugging of concurrent programs. To this end, we formulate and utilize a visualization paradigm that particularly includes the display of interactive glyph-based visualizations embedded in the source-code editor close to their corresponding artifacts (in-situ).
To facilitate the implementation of visualizations that comply with our paradigm as plugins for IDEs, we designed, implemented and evaluated a programming framework called CodeSparks. After presenting the design goals and the architecture of the framework, we demonstrate its versatility with a total of fourteen plugins realized by different developers using the CodeSparks framework (CodeSparks plugins). With focus group interviews, we empirically investigated how developers of the CodeSparks plugins experienced working with the framework. Based on the plugins, deliberate design decisions and the interview results, we discuss to what extent we achieved our design goals. We found that the framework is largely target programming-language independent and that it supports the development of plugins for a wide range of source-code-related tasks while hiding most of the details of the underlying plugin development API.
In addition, we applied our visualization paradigm to thread-related runtime data from concurrent programs to foster the awareness of source code being executed concurrently or in parallel. As a result, we developed and designed two in-situ thread visualizations, namely ThreadRadar and ThreadFork, with the latter building on the former. Both thread visualizations are based on a debugging approach, which combines statistical profiling, thread-aware runtime metrics, clustering of threads on the basis of these metrics, and finally interactive glyph-based in-situ visualizations. To address scalability issues of the ThreadRadar in terms of space required and the number of displayable thread clusters, we designed a revised thread visualization. This revision also involved the question of how many thread clusters k should be computed in the first place. To this end, we conducted experiments with the clustering of threads for artifacts from a corpus of concurrent Java programs that include real-world Java applications and concurrency bugs. We found that the maximum k on the one hand and the optimal k according to four cluster validation indices on the other hand rarely exceed three. However, occasionally thread clusterings with k > 3 are available and also optimal. Consequently, we revised both the clustering strategy and the visualization as parts of our debugging approach, which resulted in the ThreadFork visualization. Both in-situ thread visualizations, including their additional features that support the exploration of the thread data, are implemented in a tool called CodeSparks-JPT, i.e., as a CodeSparks plugin for IntelliJ IDEA.
With various empirical studies, including anecdotal usage scenarios, a usability test, web surveys, hands-on sessions, questionnaires and interviews, we investigated quality aspects of the in-situ thread visualizations and their corresponding tools. First, by a demonstration study, we illustrated the usefulness of the ThreadRadar visualization in investigating and fixing concurrency bugs and a performance bug. This was confirmed by a subsequent usability test and interview, which also provided formative feedback. Second, we investigated the interpretability and readability of the ThreadFork glyphs as well as the effectiveness of the ThreadFork visualization through anonymous web surveys. While we have found that the ThreadFork glyphs are correctly interpreted and readable, it remains unproven that the ThreadFork visualization effectively facilitates understanding the dynamic behavior of threads that concurrently executed portions of source code. Moreover, the overall usability of CodeSparks-JPT is perceived as "OK, but not acceptable" as the tool has issues with its learnability and memorability. However, all other usability aspects of CodeSparks-JPT that were examined are perceived as "above average" or "good".
Our work supports software-engineering researchers and practitioners in flexibly and swiftly developing novel glyph-based visualizations that are embedded in the source-code editor. Moreover, we provide in-situ thread visualizations that foster the awareness of source code being executed concurrently or in parallel. These in-situ thread visualizations can, for instance, be adapted, extended and used to analyze other use cases or to replicate the results. Through empirical studies, we have gradually shaped the design of the in-situ thread visualizations through data-driven decisions, and evaluated several quality aspects of the in-situ thread visualizations and the corresponding tools for their utility in understanding and debugging concurrent programs.
Die vorliegende Meta-Analyse zeigt eindeutig, dass von Familienmitgliedern geführte Familienunternehmen eine schlechtere Performance aufweisen als Unternehmen, die von Managern geleitet werden, die der Inhaberfamilie nicht angehören. Basierend auf uni- und multivariaten Analysen von 270 wissenschaftlichen Publikationen aus 42 verschiedenen Ländern, wurde die Performance von Familienunternehmen im Vergleich zu Nicht-Familienunternehmen untersucht. Das erste robuste Ergebnis zeigt eindeutig, dass Familienunternehmen hinsichtlich der Performance Nicht-Familienunternehmen übertreffen. Dieses Ergebnis ist im Einklang mit den meisten Primärstudien und früheren Meta-Analysen. Das zweite Ergebnis dieser Arbeit kann dem "Finance"-Forschungszweig zugeordnet werden und basiert auf der Unterscheidung von Markt- und Accounting-Performance-Kennzahlen. Markt-Performance-Kennzahlen, welche durch Analysten errechnet werden, zeigen, dass Familienunternehmen Nicht-Familienunternehmen hinsichtlich der Performance unterlegen sind. Dieses Ergebnis steht im Gegensatz zu den Accounting-Performance-Kennzahlen, welche von den Familienunternehmen selbst in ihren von Wirtschaftsprüfern freigegebenen Bilanzen veröffentlicht wurden. Die dritte Forschungsfrage untersucht im Detail, ob die Zusammensetzung des Datensatzes in Primärstudien das Gesamtergebnis in eine bestimmte Richtung verzerrt. Das Ergebnis wird nicht durch Datensätzen mit Unternehmen, welche öffentlich gelistet, im produzieren Gewerbe tätig oder Technologie getriebene Unternehmen, sind getrieben. Kleine und Mittlere Unternehmen (KMU) veröffentlichen kleinere Kennzahlen und reduzieren somit die Höhe der abhängigen Variable. Das vierte Ergebnis gibt eine Übersicht über die Art und Weise der Beteiligung der Familie an der Aufsicht oder dem operativen Geschäft des Unternehmens. Dieses Ergebnis zeigt klar, dass Manager aus Familien einen signifikanten negativen Einfluss auf die Performance des Unternehmens haben. Dies kann auf die Erhaltung des Wohlstandes der Familienmitglieder zurückzuführen sein und somit spielen finanzielle Kennzahlen keine vordergründige Rolle. Die letzte Forschungsfrage untersucht, ob die Performance von Familienunternehmen im Vergleich zu Nicht-Familienunternehmen auch durch institutionelle Faktoren beeinflusst wird. In Europa zeigen die Familienunternehmen im Vergleich zu Nordamerika eine geringere Performance hinsichtlich der Kennzahlen. Das ist darauf zurückzuführen, dass europäische Unternehmen im Vergleich zu nordamerikanischen unterbewertet sind (Caldwell, 07.06.2014). Darüber hinaus zeigen Familienunternehmen im Vergleich zu Nicht-Familienunternehmen eine bessere Performance in eher maskulin geprägten Kulturen. Maskulinität, ist nach Hofstede, gekennzeichnet durch höhere Wettbewerbsorientierung, Selbstbewusstsein, Streben nach Wohlstand und klar differenzierte Geschlechterrollen. Rechtsregime hingegen (Common- oder Civil-Law) spielen im Performance-Zusammenhang von Familienunternehmen keine Rolle. Die Durchsetzbarkeit der Gesetze hat jedoch einen signifikanten positiven Einfluss auf die Performance von Familienunternehmen im Vergleich zu Nicht-Familienunternehmen. Dies ist damit zu begründen, dass die Kosten für Kredite in Länder mit einer sehr guten Durchsetzbarkeit von Gesetzen für Familienunternehmen geringer sind.