31
RIM’s RIM’s First Look at TTCN3 First Look at TTCN3 Sean Cavanagh Sean Cavanagh Sean Cavanagh Sean Cavanagh June 5 th , 2009 TTCN-3 User Conference 2009 3 – 5 June 2009 – ETSI, Sophia Antipolis, France Last Updated: August 5, 2009

RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

RIM’sRIM’s First Look at TTCN3First Look at TTCN3

Sean CavanaghSean CavanaghSean CavanaghSean CavanaghJune 5th, 2009

TTCN-3 User Conference 2009

3 – 5 June 2009 – ETSI, Sophia Antipolis, France

Last Updated: August 5, 2009

Page 2: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

AgendaAgenda

� Who Am I and How Did I Get Here?

� What I Do For a Living Now?

� Interesting things about RIM and the BlackBerry

� What We’re Hoping For From TTCN3

� How Things Are Going So Far

What We Really Like

2 ITKO-TMP-0032.0

� What We Really Like

� What We Would Like To See Improved

� Inflammatory Statements

Page 3: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

Who Am I And How Did I Get Here?Who Am I And How Did I Get Here?

TestsTests

�� Optical TestingOptical Testing

�� Telephony TestingTelephony Testing

�� SIP Endpoint TestingSIP Endpoint Testing

LanguagesLanguages

�� LabviewLabview

�� PythonPython

�� VBVB

3 ITKO-TMP-0032.0

�� SIP Endpoint TestingSIP Endpoint Testing �� VBVB

�� TCLTCL

�� TTCN3TTCN3

Page 4: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

What I Do For a Living Now?What I Do For a Living Now?

BlackBerry

FirewallWireless

BlackBerry

Enterprise

Internet

Mail Server

4 ITKO-TMP-0032.0

BlackBerryNetworkServer

PBX

Web Server

Phone

PSTN

Page 5: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

Alphabet Soup:Alphabet Soup:

�� SIP to PBXSIP to PBX

� Plus all the stuff underneath SIP

SDP, RTP, etc.

�� SQLSQL

�� RMIRMI

�� GSMGSM

5 ITKO-TMP-0032.0

� SDP, RTP, etc.

�� Proprietary Stack to BBProprietary Stack to BB

� N layers deep

� Encrypted

�� GSMGSM

�� CDMACDMA

Page 6: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

6 ITKO-TMP-0032.0

WHAT WE’RE HOPING FOR WHAT WE’RE HOPING FOR FROM TTCN3FROM TTCN3

Page 7: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

The Grand DreamThe Grand Dream

�� Continuous IntegrationContinuous Integration

� You didn’t screw up, as far as we can tell.

�� Modeling of Multiple EnvironmentsModeling of Multiple Environments

�� Developer API in TTCN3Developer API in TTCN3

7 ITKO-TMP-0032.0

�� Developer API in TTCN3Developer API in TTCN3

�� Test Driven DevelopmentTest Driven Development

Page 8: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

Modeling of Multiple EnvironmentsModeling of Multiple Environments

�� InteropInterop is a multiis a multi--dimensional problem (probably 4 dimensional problem (probably 4 dimensions)dimensions)

� Vendor

� Model

8 ITKO-TMP-0032.0

Model

� Version

� Configuration

�� My experience is that moving from one point to another in My experience is that moving from one point to another in the cube can be ½ a day.the cube can be ½ a day.

Page 9: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

Clamp TestingClamp Testing

BlackBerry

Enterprise

Server

9 ITKO-TMP-0032.0

TTCN3

BlackBerry

PBX

Page 10: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

Clamp TestingClamp Testing

BlackBerry

10 ITKO-TMP-0032.0

TTCN3

BlackBerry

Enterprise

Server

PBX

Page 11: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

Developer API (or toolkit)Developer API (or toolkit)

�� “Why don’t we just do it in Java?”“Why don’t we just do it in Java?”

Template/Types

Behavior Behavior

Template Behavior

11 ITKO-TMP-0032.0

SUT

Test Adaptor

CODEC

Template/Types

Template/Types

Template

Builder

Behavior

Abstraction

Page 12: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

Test Driven DevelopmentTest Driven Development

1.1. Write a testWrite a test

2.2. Watch it failWatch it fail

3.3. Write some codeWrite some code

�� Tests define behaviorTests define behavior

�� Behavior defines Behavior defines interfacesinterfaces

12 ITKO-TMP-0032.0

3.3. Write some codeWrite some code

4.4. Watch the test passWatch the test pass

5.5. Profit!Profit!

interfacesinterfaces

�� Developers can Developers can become fearlessbecome fearless

Page 13: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

13 ITKO-TMP-0032.0

WHAT WE REALLY LIKEWHAT WE REALLY LIKE

Page 14: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

TTCN3 Saves you from FailureTTCN3 Saves you from Failure

�� ArchitectureArchitecture

�� Type systemType system

�� TemplatesTemplates

14 ITKO-TMP-0032.0

Page 15: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

Common ArchitectureCommon Architecture

Test Cases

15 ITKO-TMP-0032.0

SUT

Protocol Adapters

Page 16: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

TTCN3 ArchitectureTTCN3 Architecture

Template/Types

Behavior

16 ITKO-TMP-0032.0

SUT

Test Adaptor

CODEC

Page 17: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

Type SystemType System

�� Well DoneWell Done

�� FlexibleFlexible

�� ReusableReusable

17 ITKO-TMP-0032.0

�� SimpleSimple

� A single type for a single thing

Page 18: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

TemplatesTemplates

�� Very Strong IdeaVery Strong Idea

�� Insist on Full type declaration and parsingInsist on Full type declaration and parsing

�� All incoming data gets semantic meaningAll incoming data gets semantic meaning

18 ITKO-TMP-0032.0

�� Poor test oracles another common failure modePoor test oracles another common failure mode

� Nothing but REGEXES

� Nothing but Hard Coded

� Nothing but Wild Cards

Page 19: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

19 ITKO-TMP-0032.0

WHAT WE WOULD LIKE TO WHAT WE WOULD LIKE TO SEE IMPROVEDSEE IMPROVED

Page 20: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

Getting StartedGetting Started

�� It Costs MoneyIt Costs Money

� Which really means time

�� Online Language ReferenceOnline Language Reference

� Perl

20 ITKO-TMP-0032.0

� Perl

� TCL

� Python

� MSDN

� TTCN-3

� Labview

Page 21: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

Moving alongMoving along

�� Downloadable ContentDownloadable Content

�� CPAN?CPAN?

�� SourceforgeSourceforge

21 ITKO-TMP-0032.0

� Has the ttcn3gen compiler

� No modules

Page 22: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

Language Features I Think are MissingLanguage Features I Think are Missing

�� List methods:List methods:

� Find

Replace

�� Maps:Maps:

� Len

Has_key

Some data structuresSome data structures:

22 ITKO-TMP-0032.0

� Replace

� Length

� Push, pop, append

� Sort

� Has_key

� Items

Page 23: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

First Class FunctionsFirst Class Functions

�� 22 lines. Lots of duplication22 lines. Lots of duplication

function receiveInviteWithSDP() runs on

SipComponentType {

alt { [] _receiveInvite() {} }

}

altstep _receiveInviteWithSDP() runs on

SipComponentType {

var Request v_Request;

function receiveInvite() runs on

SipComponentType {

alt { [] _receiveInvite() {} }

}

altstep _receiveInvite() runs on

SipComponentType {

var Request v_Request;

23 ITKO-TMP-0032.0

var Request v_Request;

[] SIPP.receive(sipT_2) -> value

v_Request {

log("LOG 2");

setInviteHeaders (v_Request); }

}

var Request v_Request;

[] SIPP.receive(sipT_1) -> value

v_Request {

log("LOG 1");

setInviteHeaders (v_Request); }

}

Page 24: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

First Class FunctionsFirst Class Functions�� RefactoredRefactored! ! 18 18 Lines!Lines!

function receiveInviteWithSDP() runs on SipComponentType {

alt { [] _receiveInvite(sipT_2,"LOG 2") {} }

}

function receiveInvite() runs on SipComponentType {

alt { [] _receiveInvite(sipT_1,"LOG 1") {} }

24 ITKO-TMP-0032.0

alt { [] _receiveInvite(sipT_1,"LOG 1") {} }

}

altstep _receiveInvite(template sipTemplate, charstring logMsg) runs on SipComponentType {

var Request v_Request;

[] SIPP.receive(sipTemplate) -> value v_Request {

log(logMsg);

setInviteHeaders(v_Request);

}

}

Page 25: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

First Class FunctionsFirst Class Functions

�� But wait! How do I But wait! How do I refactorrefactor this?this?

function receiveInvite() runs on SipComponentType

{

alt { [] _receiveInvite() {} }

}

altstep _receiveInvite() runs on SipComponentType

{

var Request v_T_1;

function receiveNotify() runs on SipComponentType

{

alt { [] _receiveNotify() {} }

}

altstep _receiveNotify() runs on SipComponentType

{

var Request v_T_1;

25 ITKO-TMP-0032.0

var Request v_T_1;

[] SIPP.receive( sipT_1 ) -> value v_T_1{

log("LOG 1");

setInviteHeaders( v_T_1 ); }

}

var Request v_T_1;

[] SIPP.receive( sipT_3 ) -> value v_T_1 {

log("LOG 2");

setNotifyHeaders( v_T_1 ); }

}

Page 26: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

First Class FunctionsFirst Class Functions�� 21 Lines! 12 lines savings!21 Lines! 12 lines savings!

function receiveInviteWithSDP() runs on SipComponentType {

alt { [] _receiveInvite(sipT_1,"LOG 1",setInviteHeaders) {} }

}

function receiveInvite() runs on SipComponentType {

alt { [] _receiveInvite(sipT_2,"LOG 2",setInviteHeaders) {} }

}

26 ITKO-TMP-0032.0

function receiveNotify() runs on SipComponentType {

alt { [] _receiveInvite(sipT_3,"LOG 3",setNotifyHeaders) {} }

}

altstep _receiveInvite(template Request, charstring logMsg, function setHeaders)

runs on SipComponentType {

var Request v_T_1;

[] SIPP.receive(Request) -> value v_Request sender sent_label {

log(logMsg);

setHeaders( v_T_1);

}

}

Page 27: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

First Class FunctionsFirst Class Functions�� OK, closures are probably pushing it…OK, closures are probably pushing it…

function generateReceive(template sipTemplate, charstring logMsg, function setHeaders) runs on

SipComponentType{

var output := function () runs on SipComponentType {

alt { [] _receiveInvite(sipTemplate,logMsg,setHeaders) {} }

}

return output;

}

altstep _receiveInvite(template sipTemplate, charstring logMsg, function setHeaders)

27 ITKO-TMP-0032.0

altstep _receiveInvite(template sipTemplate, charstring logMsg, function setHeaders)

runs on SipComponentType {

var Request v_T_1;

[] SIPP.receive(sipTemplate) -> value recvdTemplate sender sent_label {

log(logMsg);

setHeaders(v_T_1);

}

}

receiveInviteWithSDP := generateReceive(sipT_1, "INVITE+SDP not received", setHeadersOnReceiptOfInvite

receiveInvite := generateReceive(sipT_2, "INVITE not received", setHeadersOnReceiptOfInvite);

receiveNotify := generateReceive(sipT_3,"NOTIFY not received", setHeadersOnReceiptOfNotify);

Page 28: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

28 ITKO-TMP-0032.0

CONCLUSIONSCONCLUSIONS

Page 29: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

Early days yetEarly days yet

�� 6 months of development and we have:6 months of development and we have:

�� Completed our Completed our codecscodecs

�� Deeply characterized our SUTDeeply characterized our SUT

29 ITKO-TMP-0032.0

�� Designed our APIDesigned our API

Page 30: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

What if we had “Just Used Java”What if we had “Just Used Java”

�� Not much DifferentNot much Different

� Completed codecs

� Characterized SUT

�� But missingBut missing

� Strong IDE

� Interactive MSC’s

30 ITKO-TMP-0032.0

� Developed API

� Probably deployed

� Fully developed template system

Page 31: RIM’sRIM’s First Look at TTCN3 First Look at TTCN3

Questions?Questions?

31 ITKO-TMP-0032.0

Questions?Questions?