  We present new operational semantics for serverless computing that model the
event-driven relationships between serverless functions, as well as their
interaction with platforms services such as databases and object stores. These
semantics precisely encapsulate how control transfers between functions, both
directly and through reads and writes to platform services. We use these
semantics to define the notion of the service call graph for serverless
applications that captures program flows through functions and services.
Finally, we construct service call graphs for twelve serverless JavaScript
applications, using a prototype of our call graph construction algorithm, and
we evaluate their accuracy.
