Top Banner
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
31

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

Jan 09, 2022

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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?