13 research outputs found
Handling Communication via APIs for Microservices
Enterprises in their journey to the cloud, want to decompose their monolith
applications into microservices to maximize cloud benefits. Current research
focuses a lot on how to partition the monolith into smaller clusters that
perform well across standard metrics like coupling, cohesion, etc. However,
there is little research done on taking the partitions, identifying their
dependencies between the microservices, exploring ways to further reduce the
dependencies, and making appropriate code changes to enable robust
communication without modifying the application behaviour.
In this work, we discuss the challenges with the conventional techniques of
communication using JSON and propose an alternative way of ID-passing via APIs.
We also devise an algorithm to reduce the number of APIs. For this, we
construct subgraphs of methods and their associated variables in each class and
relocate them to their more functionally aligned microservices. Our
quantitative and qualitative studies on five public Java applications clearly
demonstrate that our refactored microservices using ID have decidedly better
time and memory complexities than JSON. Our automation reduces 40-60\% of the
manual refactoring efforts.Comment: 15 page
A Visual Programming Paradigm for Abstract Deep Learning Model Development
Deep learning is one of the fastest growing technologies in computer science
with a plethora of applications. But this unprecedented growth has so far been
limited to the consumption of deep learning experts. The primary challenge
being a steep learning curve for learning the programming libraries and the
lack of intuitive systems enabling non-experts to consume deep learning.
Towards this goal, we study the effectiveness of a no-code paradigm for
designing deep learning models. Particularly, a visual drag-and-drop interface
is found more efficient when compared with the traditional programming and
alternative visual programming paradigms. We conduct user studies of different
expertise levels to measure the entry level barrier and the developer load
across different programming paradigms. We obtain a System Usability Scale
(SUS) of 90 and a NASA Task Load index (TLX) score of 21 for the proposed
visual programming compared to 68 and 52, respectively, for the traditional
programming methods
Prompting with Pseudo-Code Instructions
Prompting with natural language instructions has recently emerged as a
popular method of harnessing the capabilities of large language models. Given
the inherent ambiguity present in natural language, it is intuitive to consider
the possible advantages of prompting with less ambiguous prompt styles, such as
the use of pseudo-code.
In this paper we explore if prompting via pseudo-code instructions helps
improve the performance of pre-trained language models. We manually create a
dataset of pseudo-code prompts for 132 different tasks spanning classification,
QA and generative language tasks, sourced from the Super-NaturalInstructions
dataset. Using these prompts along with their counterparts in natural language,
we study their performance on two LLM families - BLOOM and CodeGen. Our
experiments show that using pseudo-code instructions leads to better results,
with an average increase (absolute) of 7-16 points in F1 scores for
classification tasks and an improvement (relative) of 12-38% in aggregate
ROUGE-L scores across all tasks. We include detailed ablation studies which
indicate that code comments, docstrings, and the structural clues encoded in
pseudo-code all contribute towards the improvement in performance.
To the best of our knowledge our work is the first to demonstrate how
pseudo-code prompts can be helpful in improving the performance of pre-trained
LMs.Comment: Published in EMNLP 2023 main trac
Graph Neural Network to Dilute Outliers for Refactoring Monolith Application
Microservices are becoming the defacto design choice for software architecture. It involves partitioning the software components into finer modules such that the development can happen independently. It also provides natural benefits when deployed on the cloud since resources can be allocated dynamically to necessary components based on demand. Therefore, enterprises as part of their journey to cloud, are increasingly looking to refactor their monolith application into one or more candidate microservices; wherein each service contains a group of software entities (e.g., classes) that are responsible for a common functionality. Graphs are a natural choice to represent a software system. Each software entity can be represented as nodes and its dependencies with other entities as links. Therefore, this problem of refactoring can be viewed as a graph based clustering task. In this work, we propose a novel method to adapt the recent advancements in graph neural networks in the context of code to better understand the software and apply them in the clustering task. In that process, we also identify the outliers in the graph which can be directly mapped to top refactor candidates in the software. Our solution is able to improve state-of-the-art performance compared to works from both software engineering and existing graph representation based techniques