24
009 YEAR 20 254 Quality Assurance More Tools SOFTENG More Tools ealand Part II - Lecture 8 kland | New Ze versity of Auck The Univ 1

09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

009

YEAR

20 2

54

Quality AssuranceMore Tools

SO

FTE

NG

More Tools

eala

nd Part II - Lecture 8

klan

d | N

ew Z

eve

rsity

of A

uck

The

Uni

v

1

Page 2: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

Once upon a time…009

p

…a project was started in a fortress, to automate some business process.YEAR

20 2

54

p j f pThe team was motivated and the architect was bright.Everyone was busy writing code, but no documentation was in sight.

SO

FTE

NG

Eve y e wa b y w iti g e, b t e tati wa i ightThe architect spent sleepless nights, worked with the team in endless fights.And then the time came of deployment for the first customer’s enjoyment

eala

nd

And then the time came of deployment, for the first customer s enjoyment…

S i t f lfill d b t t ll

klan

d | N

ew Z

e Some requirements were fulfilled, but not all.Changing code in one place made other code fall.Th h d l d l l d

vers

ity o

f Auc

k The system had problems under real load,And the code was full of bugs and bloat.

The

Uni

v

Read more at http://vidhujoshua.blogspot.co.nz/2009/05/analysis-of-failed-software-project.html 2

Page 3: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

Today’s Outline009

y

YEAR

20 2

54

• JavaDocTh ANT B ild T l

SO

FTE

NG

• The ANT Build Tool• Source Code Formatting with Eclipse

eala

ndkl

and

| New

Ze

vers

ity o

f Auc

kTh

e U

niv

3

Page 4: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

009

YEAR

20 2

54S

OFT

EN

G

JavaDoc

eala

nd

JavaDoc

klan

d | N

ew Z

e

The guy who knows about computersis the last person you want to havecreating documentation for people

vers

ity o

f Auc

k g p pwho don't understand computers.

(Adam Osborne)

The

Uni

v

4

Page 5: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

JavaDoc009 • Tool that generates HTML documentation from Java source code

YEAR

20 2

54

• Industry standard for documenting Java APIs• Idea: developers put special comments starting with /** that

contain documentation in front of classes fields and methods

SO

FTE

NG

contain documentation in front of classes, fields and methods• JavaDoc comments are structured by JavaDoc tags, which are

keywords that begin with an @ sign

eala

nd

/** * Divides two integer numbers

klan

d | N

ew Z

e

* @author Christof Lutteroth* @param x Dividend* @param y Divisor

vers

ity o

f Auc

k p y* @return x divided by y* @throws ArithmeticException if y==0*/

The

Uni

v

5

/int div(int x, int y) { return x/y; }

Page 6: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

JavaDoc Tags009

g@author name Specifies developer name

YEAR

20 2

54

@version number Add version number to a class or method@param name description Add description for a method parameter

SO

FTE

NG

@return description Add a description for the method return value

@thro s className Describes an exception that a method

eala

nd

@throws className description

Describes an exception that a method might throw (synonym to @exception)

@see reference Adds a reference to something else

klan

d | N

ew Z

e g@since text Add a comment since when a

class/field/method exists

vers

ity o

f Auc

k

@deprecated Marks a method as deprecated{@link package class#member

Add a link to the documentation of some other class/field/method

The

Uni

v

6

package.class#memberlabel}

other class/field/method

Page 7: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

JavaDoc in Eclipse009

p• Eclipse has auto-insertion feature

for JavaDoc commentsYEAR

20 2

54

for JavaDoc comments1. Move cursor into line before

type/method/field2 t /** d ss t

SO

FTE

NG

2. type /** and press enter

• Generating the documentation

eala

nd

g1. From the menu: Project ->

Generate Javadoc…2 Select location of

klan

d | N

ew Z

e 2. Select location of javadoc.exe

3. Select folder for documentation;

vers

ity o

f Auc

k documentation;typically /doc in project folder

4. Many other settings about appearance of documentation

The

Uni

v

7

appearance of documentation…5. Click finish

Page 8: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

View JavaDoc in Eclipse009

p

1. In JavaDoc view when identifiers are selected by YEAR

20 2

54

ydouble-clicking on them

2. In tooltip when hoovering mouse pointer over identifier

SO

FTE

NG

identifier3. In help view under section "Java help" when cursor is

on identifier

eala

nd

on identifier

klan

d | N

ew Z

eve

rsity

of A

uck

The

Uni

v

8

Page 9: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

009

YEAR

20 2

54S

OFT

EN

G

The ANT Build Tool

eala

nd

The ANT Build Tool

klan

d | N

ew Z

e

Ants can carry more than50 times their body weight

vers

ity o

f Auc

k 50 times their body weight.

The

Uni

v

9

Page 10: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

The Build Process009 The generation of end-user artefacts (executable programs,

documentation, packaged files) from developer artefacts YEAR

20 2

54

documentation, packaged files) from developer artefacts (source code, models, …)– Can involve many complex steps

• Getting latest stable source code from a VCS (e.g. SVN)

SO

FTE

NG

Getting latest stable source code from a VCS (e.g. SVN)• Compilation of source code files, linking (e.g. javac)• Running tests (e.g. JUnit)• Generation of documentation (e g JavaDoc)

eala

nd

Generation of documentation (e.g. JavaDoc)• Packaging (e.g. jar)• Deployment (e.g. copying package to a server with ftp)

Clean up (e g deleting old or redundant files)

klan

d | N

ew Z

e • Clean up (e.g. deleting old or redundant files)– Different build processes for different product variants

(e.g. “enterprise” and “home” versions)

vers

ity o

f Auc

k

SVNSVN

update

javac

jar .jar.javafiles

.classfiles

html

The

Uni

v

10

updatejavadoc

.htmlfiles

Build process example

Page 11: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

Build Tools009 • Build tools automate the build process

B ild i d t d/ ifi d i b ild i tYEAR

20 2

54

– Build process is documented/specified in a build script– Much faster than manual build– Helps to perform builds exactly the same each time

SO

FTE

NG

Helps to perform builds exactly the same each time(less mistakes)

– Can be used to manage different build processes– Helps close the gap between the development

eala

nd

– Helps close the gap between the development, integration, test, and production environments

• Orchestrate the build process;usually invoke other tools for doing the work

klan

d | N

ew Z

e usually invoke other tools for doing the work• Can be triggered by other tools,

e.g. for nightly builds or continuous integration

vers

ity o

f Auc

kTh

e U

niv

11

Page 12: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

Targets and Dependencies009

g p• The different steps in a build process are called targets

(“building a target” refers to the outcome of a step)YEAR

20 2

54

( g g p)• Usually there are dependencies between targets, e.g.

– Get latest version before compiling source code– Compile source code before packaging

SO

FTE

NG

Compile source code before packaging• Targets have to be built following the dependencies• Target dependencies are transitive

(if A→B and B→C then A→C)

eala

nd

(if A B and B C then A C)• Build process can be optimized by executing targets only when

necessary (e.g. recompile class only if .java file has changed)• Example: dependency between targets in C++ project

klan

d | N

ew Z

e Example dependency between targets in C project

calcx→y = x depends on y

vers

ity o

f Auc

k

main.o math.o

The

Uni

v

12main.cpp math.hmath.cpp

Page 13: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

The ANT Build Tool009 • Platform-independent, open-source scripting tool for

automating build processesYEAR

20 2

54

automating build processes• Uses XML files to describe the build process and its

dependencies (default script name: build.xml)I l d i J d i il i d d f i h

SO

FTE

NG

• Implemented in Java and primarily intended for use with Java; de facto standard

• Solves portability problems of older build tools (e.g. k )

eala

nd

p y p ( gmake)– ANT provides built-in functionality for many tasks– Built-in functions are guaranteed to behave (nearly)

klan

d | N

ew Z

e Built in functions are guaranteed to behave (nearly) identically on all platforms

• An ANT script defines a project with targetsTarget: set of tasks you want to be executed

vers

ity o

f Auc

k – Target: set of tasks you want to be executed – Task: piece of code that can be executed

• When starting ANT, you can select the target(s) to be t d

The

Uni

v

13executed

Page 14: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

Projects and Targets009

j g• <project> is the top level element; has three optional

attributes: YEAR

20 2

54

– name: the name of the project– default: the default target (when no target is chosen)– basedir: the base directory for relative paths

SO

FTE

NG

basedir: the base directory for relative paths• <target> attributes:

– name: the name of the target (mandatory)depends: list of targets that it depends on (optional)

eala

nd

– depends: list of targets that it depends on (optional)– description: short target description (optional)

• In the example: A is executed first, then B, then C, and finally D

klan

d | N

ew Z

e

<?xml version="1.0"?><project name="DependencyDemo"> <target name="A"/>

D

vers

ity o

f Auc

k <target name= A /><target name="B" depends="A"/><target name="C" depends="A"/><target name="D" depends="B C"/>

B C

The

Uni

v

14

<target name= D depends= B,C /></project> A

Page 15: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

Tasks009 • Task: piece of code that can be executed and can have multiple

attributes (arguments) and sub-tags

YEAR

20 2

54

• ANT comes with over 80 built-in tasks; many more available • Invoking a task:

<name attribute1="value1" attribute2="value2" … />

SO

FTE

NG

<?xml version="1.0"?><project name="Hello" default="compile"> <target name="compile" description="compile .java files">

eala

nd

<mkdir dir="classes"/> <javac srcdir="." destdir="classes"/>

</target> <!-- This is an XML comment -->

klan

d | N

ew Z

e g<target name="jar" depends="compile" description="create a jar file for the application"> <jar destfile="hello.jar">

vers

ity o

f Auc

k j j<fileset dir="classes" includes="**/*.class"/> <manifest> <attribute name="Main-Class" value="HelloProgram"/>

The

Uni

v

15

g /</manifest> </jar> </target>

</project>

Page 16: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

More Tasks009 • File tasks: <copy file tofile>, <delete file>,

kdi di h fil dYEAR

20 2

54

<mkdir dir>, <touch file>, <get src dest>• Java tasks: <java classname>, <javac srcdir destdir>,

<javadoc sourcefiles destdir>, <junit …>

SO

FTE

NG

• Packaging: <jar destfile basedir>, <zip destfile basedir>, <unzip src dest>

• Misc tasks: <echo message>, <exec command>, <mail …>

eala

nd

M c ta g , , • Add your own tasks with <taskdef name classname>:

klan

d | N

ew Z

e …public class MyPrintTask extends Task {private String msg;// setter for attribute "message"

vers

ity o

f Auc

k // setter for attribute messagepublic void setMessage(String msg) { this.msg = msg; } public void execute() throws BuildException {System.out.println(msg);

The

Uni

v

16

System.out.println(msg);} }

Page 17: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

Properties009

p• Property: case-sensitive name associated with a value

– immutable: once it is set it cannot be changedYEAR

20 2

54

g– may be used in the value of task attributes by placing the

property name between ${ and } in the attribute value • <property name="foo.x" value="bar"/> sets the property

h l (f f l d f )

SO

FTE

NG

p p yfoo.x to the value bar (for files: location instead of value)

• Many built-in properties, e.g. basedir, ant.file, java.class.path, os.name, os.version, file.separatorT b d ll d h l b

eala

nd

• Targets can be conditionally executed with special attributes:– if: executes target only if a property is set– unless: executes target only if property is not set

klan

d | N

ew Z

e g y p p y<?xml version="1.0"?><project name="MyProject"><property name="classdir" location="classes"/>

vers

ity o

f Auc

k p p y<target name="compile"><javac srcdir="." destdir="${classdir}"/> </target>

<target name="workaround-code" if="system-has-bug"/>

The

Uni

v

17

g y g /<target name="normal-code" unless="system-has-bug"/>

</project>

Page 18: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

ANT and Eclipse009

p

1. Create a text file build.xml in YEAR

20 2

54

the main folder of your project2. Open Ant view and add the build

SO

FTE

NG

file by dragging it into the view3. Double-click target to execute it

eala

ndkl

and

| New

Ze

vers

ity o

f Auc

kTh

e U

niv

18

Page 19: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

Best Practices009 1. Use Simple Targets

YEAR

20 2

54

p g– Each target should do a single well defined job – Targets that do too much make the build harder to

SO

FTE

NG

maintain and should be split up into multiple targets with dependencies between them

2 Standardize Target Names

eala

nd

2. Standardize Target NamesMakes it easier to understand and switch between build files

klan

d | N

ew Z

e

3. Use Properties for ConfigurabilityProperties should be defined for:

A i f i h d b fi d

vers

ity o

f Auc

k – Any information that needs to be configured – Any information that might change

An inf m ti n th t is us d in m th n n pl c

The

Uni

v

19

– Any information that is used in more than one place

Page 20: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

009

YEAR

20 2

54S

OFT

EN

G

Source Code Formatting

eala

nd

with Eclipse

klan

d | N

ew Z

e

Man is a strange animal.He generally cannot read the

handwriting on the wall

vers

ity o

f Auc

k handwriting on the wall until his back is up against it.

(Adlai E. Stevenson)

The

Uni

v

20

Page 21: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

Source Code Formattingith Eclips

009

with Eclipse• Most projects use a coding style standard (e.g. see XP practice)

H l t d d i d t ti f ll d t tYEAR

20 2

54

• Helps to read code, e.g. indentation follows code structure• Choose/define/customize a coding style profile with

Window -> Preferences -> Java -> Code Style -> Formatter

SO

FTE

NG

Show / changecoding style profile

eala

nd

Apply coding style profile to editor by selecting code

and choosing Source->Format

klan

d | N

ew Z

e and choosing Source->Format

vers

ity o

f Auc

kTh

e U

niv

21

Page 22: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

Source Code Formattingith Eclips

009

with Eclipse

YEAR

20 2

54

Full control over• Indentation

Pl t f b

SO

FTE

NG

• Placement of braces• Whitespace• Blank lines

eala

nd

Blank lines• New lines• Control statements

klan

d | N

ew Z

e

• Line wrapping• Comments

vers

ity o

f Auc

kTh

e U

niv

22

Page 23: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

Today’s Summary009

y y

• Documentation tools like JavaDoc generate API YEAR

20 2

54

gdocumentation from source code annotations

• Build tools like Ant automate the build process

SO

FTE

NG

– Manage different build configurations with build scripts

eala

nd

– Tasks are pieces of code defining what is done– Targets define sets of tasks that belong together

klan

d | N

ew Z

e

– Targets can depend on other targets– Properties can be used to configure a build script

vers

ity o

f Auc

k

• Source code formatting can be used to enforce coding style guides automatically

The

Uni

v

23

Page 24: 09 2 Quality Assurance More Tools - Auckland › ~lutteroth › teachings › ... · JavaDoc Tags 0 09 @authorname Specifies developer name YEAR 2 254 @versionnumber Add version number

Quiz009

Q

1. How does JavaDoc generate an API documentation YEAR

20 2

54

gfrom source code?

SO

FTE

NG

2. What are the advantages of using a build tool?

eala

nd

3. How do build scripts work? Explain targets, tasks and properties.

klan

d | N

ew Z

eve

rsity

of A

uck

The

Uni

v

24