Software Performance
Engineering Research
@ SUT
Prof John Grundy
Swinburne
-
Previous / existing projects
-
Possible areas for R&D collaboration / collaboration
support
-
Possible ways to engage with students / inspire next
generation of performance engineers / IT professionals
Outline
Swinburne
-
Inspiration
-
SoftarchMTE
-
ArgoMTE
-
MaramaMTE
-
StressCloud
-
Enterprise Environment Emulation
-
Possible R&D projects
Swinburne
-
Performance engineering 4GL/Informix systems (late
80s!)
-
Teaching large-scale software engineering (90s)
-
CSIRO research into “Middleware Technology
Evaluation” (late 90s / begin 00s)
-
Business process automation company consulting
-
Large utility software company consulting
-
Large Health IT company consulting
Swinburne
-
Empirically test planed architecture (or re-engineered architecture) vs
simulation / benchmarking
-
Model architecture of complex enterprise system
-
Model load tests
-
Generate client and server – automatic generation of “rapid
prototype” apps – code & scripts
-
Deploy code/scripts to hosts
-
Run tests
-
Collected results and visualise
-
Change models, re-generate, re-run, compare results…
Swinburne
Swinburne
Code gen
…
j2ee_videoWebApp.xml
<?xml version="1.0" encoding="UTF-8" ?> <AppServer> <Name>j2ee_videoWebApp</Name> <Type>j2ee</Type> <RemoteObj> <Name>videoSearch</Name> <Type>jsp</Type> <StatesReturned> <State Table="video">id</State> <State Table="video">name</State> <State Table="video">description</State> <State Table="video">status</State> <State Table="video">stock</State> . . </RemoteObj> </AppServer> .Jsp.xsl
<xsl:template match="RemoteObj"> <xsl:for-each select="StatesReturned/State"><xsl:value-of select="."/><![CDATA[<INPUT type=text name="]]><xsl:value-of select="."/><![CDATA[" size="115" value="]]><%=myBean_<xsl:value-of select="../../Name"/>.get<xsl:value-of select="."/>()%>"
</xsl:for-each> . . </form> </body> </html> ]]> </xsl:template> </xsl:stylesheet>
videoSearch.jsp
<html> . .id<INPUT type=text name="id" size="115" value="<%=myBean_videoSearch.getid()%>"> name<INPUT type=text name="name" size="115" value="<%=myBean_videoSearch.getname()%>">
description<INPUT type=text name="description" size="115" value="<%=myBean_videoSearch.getdescription()%>"> status<INPUT type=text name="status" size="115" value="<%=myBean_videoSearch.getstatus()%>"> stock<INPUT type=text name="stock" size="115" value="<%=myBean_videoSearch.getstock()%>"> </form> </body> </html>
(3)
(2)
(1)
Option Explicit Dim strServer, port strServer = "130.216.36.173" port = 80 Sub Main() call SendRequest1() call SendRequest2() call SendRequest1() call SendRequest2() End Sub Main Sub SendRequest1()Dim oConnection, oRequest, oResponse, oHeaders, strStatusCode, strPath If fEnableDelays = True then Test.Sleep (0)
Set oConnection = Test.CreateConnection(strServer, port, false) . . . strPath = "/j2ee_videoWebApp/videoSearch.jsp" oRequest.Path = strPath . . . End Sub
(4)
Swinburne
Compile/Deploy/Run Tests
Gen, deploy, thrash, monitor
…
Client
Database Web app server
1. Generate .jsp/.asp, .java/.c,
.bat, .sql, .war etc files
2. Deploy generated test-bed files
to client, server host machines
ACT + client descriptor
J2EE web application Database
SoftArch/MTE/Thin
3. Instruct
Application Centre
Test to perform tests
4. Display and
Analyse results
Swinburne
Examples of Test Results via ACT
Swinburne
-
ArgoMTE – integrated into Argo/UML tool (vs stand-alone
SoftArch/MTE tool)
-
MaramaMTE – Eclipse-integrated (EMF/GEF) tool
-
Load modelling – using “stochastic form charts”- probabalistic
model of client load (and server-server/db load)
-
Generated JMeter scripts for (some) load testing
-
Web crawling / API crawling to synthesize load models
-
StressCloud – latest Eclipse GMF-based tool for cloud energy/
performance testing
Swinburne
Meta-model abstractions:
•
Clients, Servers, Databases
•
Remote objects, tables
•
Requests, services
•
Calls, containment, uses
•
Operations, parameters, ports, machines,
…
•
Inputs, Transitions
Marama/MTE in use
…
(7-8 years old pictures)
<jmeterTestPlan version="1.2" properties="1.8"> <hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true"> <stringProp name="TestPlan.user_define_classpath"></stringProp>
<stringProp name="TestPlan.comments"></stringProp> <boolProp name="TestPlan.functional_mode">false</boolProp> <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments"
guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> <collectionProp name="Arguments.arguments">
<elementProp name="server" elementType="Argument"> <stringProp name="Argument.value">localhost</stringProp> <stringProp name="Argument.name">server</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp>
<elementProp name="port" elementType="Argument"> <stringProp name="Argument.value">8000</stringProp> <stringProp name="Argument.name">port</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp>
<elementProp name="next_page" elementType="Argument"> <stringProp name="Argument.value">page_index</stringProp> <stringProp name="Argument.name">next_page</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> </collectionProp> </elementProp> </TestPlan> <hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="page flow" enabled="true"> <stringProp name="ThreadGroup.ramp_time">1</stringProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp> <longProp name="ThreadGroup.start_time">1076438592000</longProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController"
guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true"> <boolProp name="LoopController.continue_forever">false</boolProp> <stringProp name="LoopController.loops">1</stringProp> </elementProp> <stringProp name="ThreadGroup.num_threads">5</stringProp> <stringProp name="ThreadGroup.duration"></stringProp> <stringProp name="ThreadGroup.delay"></stringProp> <longProp name="ThreadGroup.end_time">1076438592000</longProp> </ThreadGroup>
Swinburne
-
Part of ARC Discovery project
-
Energy and performance testing
tool for virtualised systems
(targeted to cloud)
-
Eclipse IDE modeller –
architecture, load model, app
model (or real app)
-
Generate, run Jmeter tests
-
Monitor VM stats
-
Monitor physical machine energy
usage
StressCloud
Cloud Server
VirtualMachine
VirtualMachine
Apache Tomcat
…...
Load Test Web ServiceMS SQL
Server
Apache Tomcat
Load Test Web Service