rahlk / codenet-minerva-tools-app2callgraph

Other
1 stars 1 forks source link

Some application classes are missing in the generated callgraph #7

Open rahlk opened 1 year ago

rahlk commented 1 year ago

It turns out that when we build a call-graph when WALA (1.5.9) on various applications, we observe the following problems.

  1. All the classes in the application are available in CHA, but there are a number of classes that are not available in the call graph as seen in [§2]().
  2. We tried a number of context sensitivity levels, and for each level, we found a number of non-overlapping missing classes. a. Generally, RTA has more classes that 0-CFA and 01-CFA. b. There are some classes in 0-CFA and 01-CFA that are not seen in RTA and vice-versa.

    1. Setup

We looked at 4 applications:

  1. Daytrader JavaEE 7
  2. Daytrader JavaEE 8
  3. Cargotracker JakartaEE
  4. Plantsbywebsphere JavaEE 7

We take into account the dependencies that constitute these application.


Cargotracker

Output

'Total classes in cha = 113'
'Num nodes in RTA = 80'
'Num nodes in 01-CFA= 64'
'Num nodes in 0-CFA = 65'
'Missing nodes in CHA vs. Call graphs'
{
│   'org.eclipse.cargotracker.domain.model.location.SampleLocations',
│   'org.eclipse.cargotracker.interfaces.tracking.web.CargoTrackingViewAdapter$1',
│   'org.eclipse.cargotracker.interfaces.booking.web.ChangeArrivalDeadlineDialog',
│   'org.eclipse.cargotracker.interfaces.booking.facade.BookingServiceFacade',
│   'org.eclipse.cargotracker.infrastructure.messaging.jms.MisdirectedCargoConsumer',
│   'org.eclipse.cargotracker.infrastructure.logging.LoggerProducer',
│   'org.eclipse.cargotracker.infrastructure.messaging.jms.DeliveredCargoConsumer',
│   'org.eclipse.cargotracker.interfaces.handling.file.UploadDirectoryScanner',
│   'org.eclipse.cargotracker.domain.model.cargo.Delivery$1',
│   'org.eclipse.cargotracker.infrastructure.messaging.jms.RejectedRegistrationAttemptsConsumer',
│   'org.eclipse.cargotracker.infrastructure.events.cdi.CargoUpdated',
│   'org.eclipse.cargotracker.domain.model.cargo.CargoRepository',
│   'org.eclipse.cargotracker.application.util.ApplicationSettings',
│   'org.eclipse.cargotracker.application.CargoInspectionService',
│   'org.eclipse.cargotracker.domain.model.handling.HandlingEventRepository',
│   'org.eclipse.cargotracker.interfaces.handling.file.EventItemWriter',
│   'org.eclipse.cargotracker.domain.service.RoutingService',
│   'org.eclipse.cargotracker.application.util.RestConfiguration',
│   'org.eclipse.cargotracker.domain.model.voyage.VoyageRepository',
│   'org.eclipse.cargotracker.application.ApplicationEvents',
│   'org.eclipse.cargotracker.interfaces.handling.file.FileProcessorJobListener',
│   'org.eclipse.cargotracker.interfaces.booking.facade.internal.assembler.TrackingEventsDtoAssembler$1',
│   'org.eclipse.cargotracker.domain.model.voyage.SampleVoyages',
│   'org.eclipse.cargotracker.interfaces.Coordinates',
│   'org.eclipse.cargotracker.domain.shared.Specification',
│   'org.eclipse.cargotracker.domain.model.cargo.Itinerary$1',
│   'org.eclipse.cargotracker.application.BookingService',
│   'org.eclipse.cargotracker.application.HandlingEventService',
│   'org.eclipse.cargotracker.application.util.SampleDataGenerator',
│   'org.eclipse.cargotracker.interfaces.booking.web.ChangeDestinationDialog',
│   'org.eclipse.cargotracker.interfaces.booking.facade.internal.assembler.CargoStatusDtoAssembler$1',
│   'org.eclipse.cargotracker.interfaces.FacesConfiguration',
│   'org.eclipse.cargotracker.domain.model.location.LocationRepository'
}
'Nodes present in RTA and not in 0-CFA'
{
│   'org.eclipse.cargotracker.interfaces.booking.web.Track',
│   'org.eclipse.cargotracker.infrastructure.messaging.jms.HandlingEventRegistrationAttemptConsumer',
│   'org.eclipse.cargotracker.application.internal.DefaultHandlingEventService',
│   'org.eclipse.cargotracker.interfaces.booking.web.ListCargo',
│   'org.eclipse.cargotracker.interfaces.booking.web.ItinerarySelection',
│   'org.eclipse.cargotracker.interfaces.handling.file.LineParseExceptionListener',
│   'org.eclipse.cargotracker.infrastructure.persistence.jpa.JpaVoyageRepository',
│   'org.eclipse.cargotracker.interfaces.handling.file.EventLineParseException',
│   'org.eclipse.cargotracker.interfaces.booking.sse.RealtimeCargoTrackingService',
│   'org.eclipse.cargotracker.interfaces.booking.web.Booking',
│   'org.eclipse.cargotracker.application.internal.DefaultCargoInspectionService',
│   'org.eclipse.cargotracker.infrastructure.persistence.jpa.JpaLocationRepository',
│   'org.eclipse.cargotracker.interfaces.booking.web.CargoDetails',
│   'org.eclipse.cargotracker.interfaces.booking.web.ChangeDestination',
│   'org.eclipse.pathfinder.internal.GraphDao'
}
'Nodes present in 0-CFA and not in RTA'
{}
'Nodes present in RTA and not in 01-CFA'
{
│   'org.eclipse.cargotracker.interfaces.booking.web.Track',
│   'org.eclipse.cargotracker.infrastructure.messaging.jms.HandlingEventRegistrationAttemptConsumer',
│   'org.eclipse.cargotracker.application.internal.DefaultHandlingEventService',
│   'org.eclipse.cargotracker.interfaces.booking.web.ListCargo',
│   'org.eclipse.cargotracker.interfaces.booking.web.ItinerarySelection',
│   'org.eclipse.cargotracker.interfaces.booking.web.ChangeDestination',
│   'org.eclipse.cargotracker.interfaces.handling.file.LineParseExceptionListener',
│   'org.eclipse.cargotracker.infrastructure.persistence.jpa.JpaVoyageRepository',
│   'org.eclipse.cargotracker.interfaces.handling.file.EventLineParseException',
│   'org.eclipse.cargotracker.interfaces.booking.sse.RealtimeCargoTrackingService',
│   'org.eclipse.cargotracker.interfaces.booking.web.Booking',
│   'org.eclipse.cargotracker.application.internal.DefaultCargoInspectionService',
│   'org.eclipse.cargotracker.infrastructure.persistence.jpa.JpaLocationRepository',
│   'org.eclipse.cargotracker.interfaces.booking.web.CargoDetails',
│   'org.eclipse.cargotracker.domain.model.cargo.HandlingActivity',
│   'org.eclipse.pathfinder.internal.GraphDao'
}
'Nodes present in 0-CFA and not in RTA'
{}
'Nodes present in 0-CFA and not in 01-CFA'
{'org.eclipse.cargotracker.domain.model.cargo.HandlingActivity'}
'Nodes present in 0-CFA and not in RTA'
{}

Daytrader 8

'Total classes in cha = 155'
'Num nodes in RTA = 118'
'Num nodes in 01-CFA= 109'
'Num nodes in 0-CFA = 109'
'Missing nodes in CHA vs. Call graphs'
{
│   'com.ibm.websphere.samples.daytrader.interfaces.MarketSummaryUpdate',
│   'com.ibm.websphere.samples.daytrader.jaxrs.JAXRSApplication',
│   'com.ibm.websphere.samples.daytrader.web.prims.cdi.HitAsync',
│   'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingServletCDIBeanManagerViaJNDI',
│   'com.ibm.websphere.samples.daytrader.interfaces.QuotePriceChange',
│   'com.ibm.websphere.samples.daytrader.web.prims.jaxrs.JAXRSSyncService',
│   'com.ibm.websphere.samples.daytrader.web.prims.jaxrs.TestJSONObject',
│   'com.ibm.websphere.samples.daytrader.web.prims.PingServlet2IncludeRcv',
│   'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingInterceptor',
│   'com.ibm.websphere.samples.daytrader.web.prims.PingJSONPStreaming$1',
│   'com.ibm.websphere.samples.daytrader.web.prims.PingServlet30Async',
│   'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingInterceptorBinding',
│   'com.ibm.websphere.samples.daytrader.web.prims.PingWebSocketTextSync',
│   'com.ibm.websphere.samples.daytrader.interfaces.Trace',
│   'com.ibm.websphere.samples.daytrader.interfaces.TradeSession2Direct',
│   'com.ibm.websphere.samples.daytrader.web.prims.PingServletLargeContentLength',
│   'com.ibm.websphere.samples.daytrader.web.prims.PingReentryServlet',
│   'com.ibm.websphere.samples.daytrader.web.jsf.JSFLoginFilter',
│   'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingServletCDIBeanManagerViaCDICurrent',
│   'com.ibm.websphere.samples.daytrader.web.prims.cdi.CDIEventProducer',
│   'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingEJBIFace',
│   'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingServletCDIEvent',
│   'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingServletCDI',
│   'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingCDIJSFBean',
│   'com.ibm.websphere.samples.daytrader.interfaces.RuntimeMode',
│   'com.ibm.websphere.samples.daytrader.interfaces.TradeDB',
│   'com.ibm.websphere.samples.daytrader.web.prims.PingWebSocketBinary',
│   'com.ibm.websphere.samples.daytrader.web.websocket.ActionMessage$1',
│   'com.ibm.websphere.samples.daytrader.web.prims.http2.PingServletSimple',
│   'com.ibm.websphere.samples.daytrader.interfaces.TradeJDBC',
│   'com.ibm.websphere.samples.daytrader.web.prims.PingUpgradeServlet$1',
│   'com.ibm.websphere.samples.daytrader.web.prims.cdi.Hit',
│   'com.ibm.websphere.samples.daytrader.interfaces.TradeEJB',
│   'com.ibm.websphere.samples.daytrader.web.prims.http2.PingServletPush',
│   'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingCDIBean',
│   'com.ibm.websphere.samples.daytrader.interfaces.TradeServices',
│   'com.ibm.websphere.samples.daytrader.web.prims.PingUpgradeServlet'
}
'Nodes present in RTA and not in 0-CFA'
{
│   'com.ibm.websphere.samples.daytrader.jaxrs.BroadcastResource',
│   'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingEJBLocalDecorator',
│   'com.ibm.websphere.samples.daytrader.web.prims.beanval.CDIMethodConstraintBean',
│   'com.ibm.websphere.samples.daytrader.impl.direct.AsyncOrder',
│   'com.ibm.websphere.samples.daytrader.impl.session2direct.DirectSLSBBean',
│   'com.ibm.websphere.samples.daytrader.impl.ejb3.MarketSummarySingleton',
│   'com.ibm.websphere.samples.daytrader.impl.direct.AsyncOrderSubmitter',
│   'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingEJBLocal',
│   'com.ibm.websphere.samples.daytrader.impl.ejb3.AsyncScheduledOrderSubmitter'
}
'Nodes present in 0-CFA and not in RTA'
set()
'Nodes present in RTA and not in 01-CFA'
{
│   'com.ibm.websphere.samples.daytrader.jaxrs.BroadcastResource',
│   'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingEJBLocalDecorator',
│   'com.ibm.websphere.samples.daytrader.web.prims.beanval.CDIMethodConstraintBean',
│   'com.ibm.websphere.samples.daytrader.impl.direct.AsyncOrder',
│   'com.ibm.websphere.samples.daytrader.impl.session2direct.DirectSLSBBean',
│   'com.ibm.websphere.samples.daytrader.impl.ejb3.MarketSummarySingleton',
│   'com.ibm.websphere.samples.daytrader.impl.direct.AsyncOrderSubmitter',
│   'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingEJBLocal',
│   'com.ibm.websphere.samples.daytrader.impl.ejb3.AsyncScheduledOrderSubmitter'
}
'Nodes present in 0-CFA and not in RTA'
set()
'Nodes present in 0-CFA and not in 01-CFA'
set()
'Nodes present in 0-CFA and not in RTA'
set()

Plants

'Total classes in cha = 37'
'Num nodes in RTA = 34'
'Num nodes in 01-CFA= 33'
'Num nodes in 0-CFA = 33'
'Missing nodes in CHA vs. Call graphs'
{'com.ibm.websphere.samples.pbw.bean.NoSupplierException', 'com.ibm.websphere.samples.pbw.war.ImageServlet', 'com.ibm.websphere.samples.pbw.war.AccountServlet'}
'Nodes present in RTA and not in 0-CFA'
{'com.ibm.websphere.samples.pbw.jpa.OrderKey'}
'Nodes present in 0-CFA and not in RTA'
set()
'Nodes present in RTA and not in 01-CFA'
{'com.ibm.websphere.samples.pbw.jpa.OrderKey'}
'Nodes present in 0-CFA and not in RTA'
set()
'Nodes present in 0-CFA and not in 01-CFA'
set()
'Nodes present in 0-CFA and not in RTA'
set()