Sei sulla pagina 1di 120

Desenvolvimento de SaaS /

Engenharia de Software como Servio


Prof. Vinicius Cardoso Garcia
vcg@cin.ufpe.br :: @vinicius3w :: assertlab.com

Licena do material
Este Trabalho foi licenciado com uma Licena
Creative Commons - Atribuio-NoComercial-CompartilhaIgual 3.0
No Adaptada.
Mais informaes visite:
http://creativecommons.org/licenses/by-nc-sa/3.0/deed.pt
2

Download
Apresentao com anotaes
http://bit.ly/ess-enacomp-2015
3

Quem sou eu?

Professor @ Cin-UFPE [Sistemas de Informao, Ps-Graduao em Cincia da Computao], Aug-2010


13/44 MSc; 6 (+4 co) DSc :: http://viniciusgarcia.com

ASSERT [Advanced System and Software Engineering Research Technologies] Lab :: http://assertlab.com

Ikewai [http://www.ikewai.com]: rede de business designers

USTO.RE [http://usto.re] :: Smart Cloud Storage

Netweaver
Chief Scientist Officer (CSO)

INES [Instituto Nacional para Cincia e Tecnologia em Engenharia de Software] :: http://www.ines.org


Engenheiro de Sistemas :: 2005 ~ 2010 @ CESAR
D.Sc. em Engenharia de Software, Feb-2010
RiSE [Reuse in Software Engineering] Group
2007 > [Startup]

http://amzn.to/ILF8kY

Sobre o CIn-UFPE
2011
1 IES
FINEP
DE INOVAO
A GANHAR O PRMIO

PS-GRADUAO
Nvel 6 na CAPES
Defesa da centsima tese de Doutorado em 2006
Defesa da milsima dissertao de mestrado em 2011

Defesa da centsima dissertao de Mestrado


OUTRAS CONQUISTAS:

Profissional em 2012

Asia Java Mobile Challenge


Prmio Dorgival Brando Jnior da
Qualidade e Produtividade
PREMIADO EM 6 EDIES DA MICROSOFT IMAGINE CUP
5

7 X CAMPEO BRASILEIRO MARATONA DE PROGRAMAO

Concursos de teses e dissertaes

Engenharia de Software na Prtica


Practical Software Engineering
6

Warm up!

O que Engenharia de Software?

O que faz um Engenheiro de Software?


E como ele faz?

Qual aspecto do ciclo de vida do software consome mais


recursos?

60% of SW total cost over lifecycle is maintenance. We'll have more to say about this later. but ironic that students/courses focus more on "greenfield" SW despite the
fact your first project probably won't be, and that more $$ is spent on keeping software useful!

Ranking Top 200 Jobs ('12)


1. Software Engineer
104. Airline Pilot
Researches, designs, develops and maintains
28. Civil Engineer
Fashion
Designer
software systems along133.
with hardware
development
for medical, scientific, and industrial purposes.
34. Programmer
137.(+25%)
High School Teacher
Income: $88,142
40. Physician
163. Police Officer
and lists the instructions 173. Flight Attendant
47. Accountant Organizes
for computers to process data and
solve problems in logical order. 185. Firefighter
60. Mechanical Engineer
Income: $71,178
73. Electrical Engineer
196. Newspaper Reporter
87. Attorney
200. Lumberjack
InformationWeek 5/15/12. Based on salary, stress levels, hiring outlook, physical demands, and work environment (www.careercast.com)
8

Software Engineer ranks No. 1, followed by Actuary, Human Resources Manager, Dental Hygienist and Financial Planner.

Engenharia de Software

As economias de TODAS as naes desenvolvidas so dependentes


de software.

Cada vez mais sistemas so controlados por software.


A engenharia de software se dedica s teorias, mtodos e
ferramentas para desenvolvimento de software profissional

Sistemas no-triviais

Com base em um conjunto de requisitos

Poor President Obama...

10

- top sites aim for "four nines" availability. healthcare.gov started as "one four" and is now up to "one nine"

- sad thing is we could've predicted. Our students could've warned Obama!

Como evitar o descrdito?

11

Quais so as lies de 60 anos de Desenvolvimento de


Software?
Vamos revisar algumas abordagens ressaltando pontos fortes
e fracos
Experincia prtica com uma boa abordagem para Software
como Servio

Software como Servio


Software as a Service (SaaS)
12

Alvos do software

SW Tradicional: cdigo binrio instalado e rodando totalmente no dispositivo do


cliente

Os usurios precisam atualizar repetidamente

Muitas verses de hardware e muitas verses de SO

Novas verses precisam passar por um ciclo de release extensivo para garantir a
compatibilidade
Uma alternativa onde o desenvolva-se o SW que necessita rodar em apenas uma
plataforma de HW&SO?
Ciclo de releases rpido, sem atualizaes dos usurios?

13

Very popular topics

Rent like using doing your laundry in a service

Software como Servio (SaaS)

SaaS entrega SW & dados como servio atravs da rede via


clientes magros (e.g., browser) rodando no cliente
Busca, redes sociais, streaming de vdeo
Verses SaaS de SW tradicionais
Microsoft Office 365, Salesforce
SaaS um caminho [revolucionrio] sem volta!

14

May change SW industry by end of decade, switch of leaders and followers

6 Razes para SaaS


1.
2.
3.
4.

Sem preocupaes com o HW sobre instalao ou SO


Sem preocupaes sobre perda de dados (no site remoto)
Fcil interao para grupos (mesmos dados)
Se o volume de dados grande ou muda frequentemente, basta manter uma
cpia no sitio central
5. Uma cpia do SW, ambiente de HW controlado => sem aborrecimentos com
compatibilidade [desenvolvedores]
6. Uma cpia 1 => simplifica atualizaes para desenvolvedores e sem CRs de
atualizao dos usurios
15

Is laptop backed up? Lose my cellphone?

6 means SW changes all the time with more features

Continuously being asked to upgrade my software on my laptop

SaaS Metodologias geis & Rails

16

Atualizaes frequentes => Ciclo de Vida gil


Muitos frameworks para gil/SaaS
Django/Python, Zend/PHP, Spring/Java
A nica esperana contar com um ambiente altamente produtivo
(linguagens, ferramentas, frameworks...)
Sugesto: Crossing the Software Education Chasm, A. Fox, D.
Patterson, Comm. ACM, May 2012 (http://bit.ly/1b9QbFj)

Arquitetura Orientada a Servio


Software Oriented Architecture (SOA)
17

Arquitetura de Software
Voc pode/consegue projetar um
software de forma que seja possvel
recombinar mdulos independentes
para ofertar diferentes apps sem
muito esforo de programao?
18

Arquitetura Orientada a Servio

SOA: Arquitetura de Software onde todos os componentes so


projetados como servio

Apps so compostas por servios interoperveis


Fcil de derivar uma nova verso para um conjunto de usurios
Tambm fcil para se recuperar de um erro de projeto
Contraste para SW silo sem uma API interna

19

Simply, every component can be a service. Well do examples of what is and what isnt.

Combine services into new apps tailored service is easy

Easier to repair, so easy to replace components

In constrast

CEO: Amazon shall use SOA!


1. All teams will henceforth expose their data and functionality
through service interfaces.
2. Teams must communicate with each other through these
interfaces.
3. There will be no other form of interprocess communication
allowed: no direct linking, no direct reads of another team's data
store, no shared-memory model, no back-doors whatsoever. The
only communication allowed is via service interface calls over the
network.
20

Blogger at Google used to be at Amazon

Internal blog, for Google rant

External blog

Mixed them up, and we put it into the book before he deleted entry

Amazon for all its weaknesses, does SOA

Google, for all its strengths, doesnt get SOA

Started as silod sw in 1995, then 7 years later switched to SOA via directive from Bezos, CEO and founder of Amazon

BS in CS Princeton

Blogger claims one of 7 points is false; well figure out which at end

CEO: Amazon shall use SOA!


4. It doesn't matter what [API protocol] technology you use.
5. Service interfaces, without exception, must be designed
from the ground up to be externalizable. That is to say, the
team must plan and design to be able to expose the
interface to developers in the outside world. No exceptions.
6. Anyone who doesn't do this will be fired.
7. Thank you; have a nice day!
21

Why should Iisten to CEO? What does he know? Dont you read Dilbert? Im smarter than the CEO. What should I follow this
email?

False was 7. Bezos doesnt care about your day. He got them with fired

5 points is one of best dscriptions of SOA; everything must use API

Facebook too; Facebook platform 3 years later

(Google doesnt get it)

Bookstore: Silo

Subsistemas internos podem


compartilhar dados diretamente
User profile Service
Todos os subsistemas dentro de uma
nica API (Bookstore)

(Figure 1.3, Engineering Long Lasting Software


by Armando Fox and David Patterson, Beta
edition, 2012.)

22

the reviews subsystem can get user profile info out of the users subsystem

3 indabilidadedent services inside the silo

Bookstore: SOA

Subsistemas independentes, como se


estivessem em datacenters separados
User Service API
Pode recombinar servios para criar
novos servios (Favorite Books)

(Figure 1.4, Engineering Long Lasting Software by


Armando Fox and David Patterson, Beta edition, 2012.)

23

Creates another app groups favorite books app from standard bookstore just another combination

Even though all inside same datacenter, SW written as if in dierent ones

No service can access another services data must go through API of service

Note not a layered model of software, but a network connection

Computao em Nuvem
Cloud Computing
24

Qual o HW ideal para SAAS?

25

Amazon, Google, Microsoft... Desenvolveram sistemas de HW para rodar


SaaS

O Que eles usam, em termos de infraestrutura de HW: Mainframes?


Supercomputers?

Como desenvolvedores de SW independentes constroem apps SaaS e


competem sem um investimento em HW similar a Amazon, Google,
Microsoft?

Infraestrutura SaaS?

3 Demandas de infraestrutura para SaaS


1. Comunicao: permitir que os consumidores interajam
com o servio
2. Escalabilidade: flutuaes na demanda durante adio de
novos servios para novos clientes rapidamente
3. Confiabilidade: disponibilidade contnua de servio e
comunicao 24x7

26

Scalability for holidays

Has to work all the time since only in one place

Servios em Clusters

Cluster: aglomerado de computadores conectados


1. Mais escalvel do que servidores convencionais
2. Mais barato do que servidores convencionais
20X para equivalentes vs. Servidores maiores
3. Poucos operadores para 1000s servidores
Seleo cuidadosa de HW e SW idnticos
Monitores de Mquinas Virtuais simplifica a operao
4. Confiabilidade via redundncia extensiva

27

Originally mainframe computers, but switched to clusters at Berkeley (NOW)

Expensive, how to scale, still failed sometime

Gold plated mainframe still fails, so more copies to overcome when failures, but 20X cheaper

VM help with kill program

20x cheaper so 2 or 3 times as many copies, SW handles failure

Warehouse de Computadores Escalveis

Clusters cresceu de 1000 para 100 mil servidores com base na


demanda do cliente para aplicativos SaaS
Economias de escala empurraram o custo dos grandes data centers
em fatores de 3x a 8x
Comprar, hospedar, operar 100K vs 1K
Data centers tradicionais utilizados, cerca de 10% - 20%
Modelos de negcio baseados em pay-as-you-go trazem benefcios
concretos

28

Services got popular, so had to keep scaling (100X)

House build own customer warehouse, so cheaper

Network Bandwidth

Consolidate 100 companies into one datacenter,

2006 Bezos said should be able to sell AWS Elastic Computing 2 (EC2)

Original argument was underutilized 11 months of the year spare cycles, became so popular

Today its reversed Amazon now runs on Amazon Web Services

Computao Utilitria / Computao em Nuvem Pblica

Oferece computao, armazenamento, comunicao a centavos por hora


Sem adicionais por escalabilidade
1000 computadores @ 1 hora, ou
1 computador @ 1000 horas
Iluso de infinita escalabilidade para o usurio
Tantos computadores quanto voc puder dispor
Exemplos: Amazon Web Services, Google App Engine, Microsoft Azure

29

No premium for scale is striking usually much more expensive to scale

2013 AWS Instances & Prices


Per $ Ratio
Instance Type Hour to small

m1.small
m1.medium
m1.large
m1.xlarge
m3.xlarge
m3.2xlarge
c1.medium
c1.xlarge
cc2.8xlarge
m2.xlarge
m2.2xlarge
m2.4xlarge
cr1.8xlarge
hi1.4xlarge
hs1.8xlarge
t1.micro
cg1.4xlarge

$0.06
$0.12
$0.24
$0.48
$0.50
$1.00
$0.15
$0.58
$2.40
$0.41
$0.82
$1.64
$3.50
$3.10
$4.60
$0.02
$2.10

1.0
2.0
4.0
8.0
8.3
16.7
2.5
9.7
40.0
6.8
13.7
27.3
58.3
51.7
76.7
0.3
35.0

Virtual
Cores

1
1
2
4
4
8
2
8
32
2
4
8
32
16
16
1
16

Compute
Units

1.0
2.0
4.0
8.0
13.0
26.0
5.0
20.0
88.0
6.5
13.0
26.0
88.0
35.0
35.0
varies
33.5

Memory
(GiB)

Storage (GB)

1.7
1 x 160
3.8
1 x 410
7.5
2 x 420
15.0
4 x 420
15.0
EBS
30.0
EBS
1.7
1 x 350
7.0
4 x 420
60.5
4 x 840
17.1
1 x 420
34.2
1 x 850
68.4
2 x 840
244.0 2 x 120 SSD
60.5 2 x 1024 SSD
117.0
24 x 2048
0.6
EBS
22.5
2 x 840

30

17 options vary in cost 75:1, vary in performance 90:1, vary in memory size 150:1, vary in storage 300:1

Pay per hour

2006 for $0.10, now just $0.06

Computao Utilitria

Competio dos Top 500 supercomputadores


532 Eight Extra Large (@ $2.40/hour), 17000 cores = 240 TeraFLOPS
72nd/500 supercomputer @ ~$1300 per hour
Carto de crdito => at 1000s computadores
FarmVille no AWS
Primeiro grande jogo online: 5M usurios
E se a startup tivesse que construir o data center?
4 dias = 1M; 2 meses = 10 M; 9 meses = 75M

31

CC2 = Cluster Compute Eight Extra Large

Zygna make Farmville using AWS

Biggest in world; too big, too much $

Calling dell, take 6 months,

AWS scale with demand

IBM Watson para alugar?

Campeo do Jeopardy
Hardware: 90 IBM Power 750 servers
3.5 GHz 8 cores/server
90 @~$2.40/hour = ~$200/hour
Custo de um advogado ou contador...
Para quais tarefas uma mquina com IA seria to boa quanto uma pessoa
muito bem treinada @ $200/hora?
O que isso pode significar para a sociedade?

32

Same rate as lawyers and accountants

$200 as much as IBM payed for Jeopardy champion

What is this going to mean down the road?

Might want to talk this over wine with your friends majoring in law or accounting

Great jobs for us; what about future of rest of society; ML is delivering

Processos de Desenvolvimento de Software Dirigidos a Planos


Plan-and-Document processes
33

Como evitar o descrdito do SW?

34

Podemos tornar a construo de software to previsvel em


termos de cronograma, custo e qualidade como a construo
de uma ponte ou um edifcio?

Se sim, que tipo de processo de desenvolvimento devemos


utilizar para torn-lo previsvel a este ponto?

Engenharia de Software

35

Trazer a disciplina engenharia para o SW


Termo cunhado ~20 anos aps o 1 computador
Encontrar mtodos de desenvolvimento de SW to previsveis em qualidade, custo e tempo
assim como engenharia civil

Plan-and-Document (Dirigido a Plano)


Antes de codificar, o gerente de projeto constri o plano
Escrever uma documentao detalhada de todas as fazes do plano
Progresso medido/monitorado em relao ao plano
Mudanas no projeto devem ser refletidas na documentao e possivelmente no plano

1 Processo de Desenvolvimento: Waterfall (1970)

5 fases do ciclo de vida Waterfall ou Processo de Desenvolvimento em Cascata


A.K.A. Big Design Up Front ou BDUF

Anlise e definio de requisitos


Projeto de sistema e software
Implementao e teste de unidade
Integrao e teste de sistema
Operao e manuteno

Primeiro modelo a organizar as atividades de desenvolvimento


Uma fase tem de estar completa antes de passar para a prxima.
Sadas das fases so acordadas contratualmente!
Todas as fases envolvem atividades de validao

36

Like falling down a waterfall

Lots of planning,

6-12 months or more per step

Often steps done by dierent people

Throw over the wall

Lots of documentation in case people leave

Ciclo de Vida Espiral (1986)

37

Combina Big Design Up Front com


prottipos

Ao invs de documentar todos os


requisitos no incio, vai desenvolvendo o
documento de requisitos atravs de
iteraes de prottipos medida que
eles so necessrios e evoluem com o
projeto

Ciclo de Vida do Rational Unified Process (RUP) (2003)

(Figure 1.5, Engineering Long Lasting Software by Armando Fox and David Patterson, 2nd Beta edition, 2013.)
38

Gerncia de Projetos Dirigida a Plano (DP)

39

DP depende do Gerente de Projeto


Escrever contrato para ganhar/vender o projeto
Recrutar equipe de desenvolvimento
Avaliar o desempenho dos engenheiros de software, que estabelece o salrio
Estimar os custos, manter o cronograma, avaliar os riscos e super-los
Documentar o plano de gerenciamento de projetos
Ganhar o crdito pelo sucesso ou culpa se os projetos esto atrasados ou
acima do oramento

Tamanho do Time de DP
Adding manpower to a late software project makes it later.
Fred Brooks, Jr., The Mythical Man-Month

40

Leva tempo para os novos membros do time aprenderem sobre o projeto

A comunicao do time aumenta, deixando menos tempo para trabalhar


efetivamente

Para projetos grandes, o Ideal ter pequenos grupos (4-9 pessoas)


hierarquicamente compostos

Agile
Development processes
41

earliest ever lecture prep!

follow along download slides

Processo Alternativo?

Quo preciso o Dirigido a Plano pode ser em relao a custo,


cronograma e qualidade?

DP requer extensiva documentao e planejamento e depende da


experincia do gerente
possvel construir software efetivamente, e com sucesso,
sem um cuidadoso planejamento e documentao?

42

Como evitar o basta cortar?

Quo preciso so os processos dirigido a planos?


!"#$%&'()&"*'+,-(./"01-"1(23345(
!"#$
&!#$

!"#$%&'()&"*'+,-(./"0'-(12234((
!"#$

'($)*+,$-($
./01+2$

%"#$

342+,$-5+6$./01+2$
%&#$

7+6*8(42+0$-6$
4.4(0-(+0$

&"#$

'($)*+,$-($
./01+2$
34#$562+,$-7+8$
./01+2$
96:-8$0+;6<=$-8$
2+8*>(62+0$

!"#$%&'()&"*'+,-(./%01"&(23334((

3/~500 novos projetos


cumprem os custos e o
cronograma

!"#$
'($)*+,$-($
./01+2$

%&#$

342+,$-5+6$./01+2,$
-6$2+6*7(42+0$

(Figure 1.6, Engineering Long Lasting Software by Armando


Fox and David Patterson, 2nd Beta edition, 2013.)
43

Figure 1.6: The first study of software projects found that 53% of projects exceeding their budgets by a factor of 2.9 and
overshot their schedule by a factor of 3.2 and another 31% of software projects were cancelled before completion (Johnson
1995). The an estimated annual cost in the United States for such software projects was $100B. The second survey of 250
large projects, each with the equivalent of more than a million lines of C code, found similarly disappointing results (Jones
2004). The final survey of members of the British Computer Society found that only 130 of 1027 projects met their schedule
and budget. Half of all projects were maintenance or data conversion projects and half new development project, but the
successful projects divided into 127 of the former and just 3 of the latter (Taylor 2000).

Peress Law
If a problem has no solution, it may not be a problem, but a fact, not to
be solved, but to be coped with over time.
Shimon Peres

(vencedor do Prmio Nobel da Paz de 1994)

(Photo Source: Michael Thaidigsmann, put in public domain,


See http://en.wikipedia.org/wiki/File:Shimon_peres_wjc_90126.jpg)
44

Agile Manifesto, 2001

We are uncovering better ways of developing SW by doing it and helping


others do it. Through this work we have come to value

Individuals and interactions over processes & tools

Working software over comprehensive documentation

Customer collaboration over contract negotiation

Responding to change over following a plan


That is, while there is value in the items on the right, we value the items on
the left more.

45

Extreme Programming (XP), uma verso do ciclo de vida


gil

46

If short iterations are good, make them as short as possible (weeks


vs. years)
If simplicity is good, always do the simplest thing that could
possibly work
If testing is good, test all the time. Write the test code before you
write the code to test.
If code reviews are good, review code continuously, by programming
in pairs, taking turns looking over each others shoulders.

Agile lifecycle

Embraces change as a fact of life: continuous improvement vs.


phases
Developers continuously refine working but incomplete prototype
until customers happy, with customer feedback on each Iteration
(every ~1 to 2 weeks)
Agile emphasises Test-Driven Development (TDD) to reduce mistakes,
written down User Stories to validate customer requirements,
Velocity to measure progress

47

Working but incomplete

More iterations, the more youll learn

Write Tests before write code

Customer helps write SW requirements

Agilidade ento... E agora?


Controverso em 2001
yet another attempt to undermine the discipline of software engineering
nothing more than an attempt to legitimize hacker behavior.
Steven Ratkin, Manifesto Elicits Cynicism, IEEE Computer, 2001

Aceito em 2003
Estudo de 2012 com 66 projetos confirmaram que a maioria
usava Metodologias geis, mesmo com times distribudos
48

It Takes a Team
Size & Scrum
49

(Engineering Software as a Service 10.1)

Eng SW como um time de futebol

Era dos Programadores Super-Heris


Aumento de qualidade e funcionalidades
O programador no tem como resolver tudo sozinho
Carreira de sucesso
Ningum ganha jogo sozinho, quando vence, vencem todos
There are no winners on a losing team, and no losers on a winning team.
Fred Brooks, Jr.

50

Early in my career knew superhero programmers go away for weekend and build amazing breakthrough

Ken Thompson, co-inventor of UNIX, won Turing Award, was a Berkeley student

Bill Joy, led BSD UNIX, which was first open source project, hero programmer wrote vi over long weekend

No longer individuals building amazing things Linus Torvald leads open source around Linux, but not done by himself

Early bar was low

Not that many superheroes

What does team need to win (do you need to do more than your part)

Time: Maior campeo da UFSCAR

51

Organizao alternativa para o time?

52

Processo Dirigido a Planos requer uma extensiva documentao e


planejamento e seu sucesso depende da experincia do gerente

Como devemos organizar um time gil?

Existe alguma alternativa a organizao hierrquica com um gerente


que coordena o projeto?

SCRUM: Organizao do time

Time para Duas Pizzas (4 a 9 pessoas)


Scrum inspirado por pequenas reunies frequentes
15 minutos todo dia, no mesmo lugar e hora
Para aprender mais: Agile Software Development with Scrum by Schwaber &Beedle

53

Bezos, lots of companies, (2 pizza teams in more people)

Need a way to self-organize

Scrum penalty

Standup Meeting

Its 9:08, over by 9:23

What happens at meeting go

Daily SCRUM Agenda

Responda 3 perguntas nas daily scrums:


1. O que foi feito ontem?
2. O que est planejado para hoje?
3. H algum impedimento ou obstculo?

Ajuda as pessoas a identificar o que elas precisam

54

Go around in a circle

By understanding what each team member was doing, the team can identify work that would help others make more rapid
progress

This would unblock me if you would do this first

Most is common sense

Papis do Scrum

Time: times com tamanho 2-pizza que entregam SW

Scrum Master, membro do time que


Atua como um facilitador que organiza reunies dirias
Mantm o backlog do trabalho a ser feito e o time focado
Grava decises e mede o processo usando o backlog
Comunica-se com os clientes e a gerncia fora da equipe.
Remove os impedimentos e obstculos que impede o time
de fazer progresso no projeto

55

Not the manager SM is supposed to be the buer so team can concentrate

Papis do Scrum

Product Owner: um membro do time (no o


Scrum Master) que representa a voz do cliente e
prioriza as histrias do usurio

56

Team member, not the scrum master, represents customer at daily scrums

Also prioritises user stories

Resolvendo conflitos

57

e.g. Diferentes vises em uma determinada deciso tcnica

Primeiramente liste todos os itens em que os lados concordam


Ao invs de comear pelas diferenas
Descobriu que esto mais prximos do que imaginavam?

Cada lado articula argumentos do outro, mesmo que no concorde com eles
Evita confuses sobre termos ou suposies, que pode ser a verdadeira
causa do conflito

Resolvendo conflitos

58

Confronto construtivo (Intel)


Se voc tem uma forte opinio que uma pessoa est propondo uma
soluo errada tecnicamente, voc obrigado a trazer isso tona, mesmo
que seja o seu chefe
Discordo e compromisso (Intel)
Uma vez tomada uma deciso, todos precisam abra-la e seguir em frente
Eu discordo, mas eu vou ajudar mesmo que no concorde
Resoluo de conflitos muito til inclusive na vida pessoal!

Programao em Pares
Pair Programming
59

(Engineering Software as a Service 10.2)

University is a chance to make mistakes at university

Duas mentes so melhores do que uma?

60

O Esteretipo do programador o lobo solitrio que


trabalha na madrugada bebendo Red Bull
H uma forma mais social de trabalhar?
Quais os benefcios de ter vrias pessoas
programando juntas?
Como prevenir que uma pessoa faa todo trabalho
sozinha enquanto a outra est navegando no facebook?

Programao em Pares

Goal: improve software quality, reduce time to completion by


having 2 people develop the same code

61

Some people (and companies) love it


Try in discussion sections to see if you do
Some students in the past have loved it and used for
projects

Programao em Pares

Sente-se lado a lado, com telas para ambos


Sem computador pessoal; muitos disponveis para qualquer um usar
Para evitar distraes, sem leitor de email, browser, IM...

62

Sarah Mei and JR Boyens at Pivotal Labs

We know that MultiTasking is distracting, so these are real workstations with no facebook, email, twitter,

Dont check email between 8AM and 5PM

Productivity improves

New employees say tired after 8 hours

Go home at night and dont do programming at home

SV Management technique is buying dinner

Programao em Pares

Guia entra com o cdigo e pensa estrategicamente como completar a tarefa,


explicando as decises enquanto codifica

Observador revisa cada linha de cdigo escrita, e atua como um dispositivo de


segurana para o guia

Observador pensa estrategicamente sobre o problemas e desafios futuros, e


faz sugestes ao guia

Deve haver MUITA conversa e concentrao

Os papis devem se alternar

63

Talking out loud while work (like surgeon on TV)

Driver short term, Observer long term

Have to Alternatve

Avaliao da Programao em Pares

PP acelera quando a complexidade da tarefa pequena


PP eleva a qualidade quando a complexidade alta
Curiosamente, o cdigo tambm fica mais legvel
Mais esforo do que na programao solo?
Compartilhamento de conhecimento
Idiomas de programao, truques em ferramentas, processos, tecnologias...
Muitos times prope trocar os pares por tarefa

64

But Pivotal Labs denies it

More senior and more junior

promiscuous pairing

Does it factor in distraction

Eventualmente, todos podem estar pareados (promiscuous pairing)

PP: fazer & No Fazer

No mexa no seu smartphone quando for o observador

Considere formar o par com algum com diferente nvel de


experincia que voc os dois iro aprender algo!

Forme pares frequentemente o aprendizado bidirecional e


papis exercitam diferentes habilidades
O observador exercita a habilidade de explicar seu processo
de pensamento ao guia

65

Concentrate on task at hand (not phone)

Great if mismatch to learn

Identificando o que est errado: smells, mtricas, SOFA


http://pastebin.com/gtQ7QcHu
66

(ESaaS 9.5)

Alm da Corretude

67

Podemos dar feedback sobre beleza de software?


Orientaes sobre o que belo?
Avaliaes qualitativas?
Avaliaes quantitativas?
Se sim, quo bem eles funcionam?
E existem ferramentas para nos apoiar?

Qualitativo: Code Smells

CUPA (do ingls SOFA) captura sintomas que muitas vezes indicam o
"cheiro" cdigo:

Curto (Short)?

Ele faz apenas Uma (One) coisa?

Ser que ela tem Poucos (Few) argumentos?

um nvel consistente de Abstrao (Abstraction)?


Ex: A ferramenta reek do Rails encontra "cheiro" de cdigo

68

Code smell alerts you that something may be wrong

20 to 60 code smells depending on authority

Code spend several lectures on them, but just give an idea now

Methods that dont follow this advice will often give o several of the smells

Short depends on language (More than 1 screenful for old monitors) try to do one thing, and quickly grasp

old terminals used to be 24 lines by 80 characters, so short fit in one screen

Today windows are tremendously larger, so not a good guideline

Want to look at method and quickly figure out what it is

One thing may just call a bunch of methods do this

nico Nvel de Abstrao

Tarefas complexas precisam do dividir para conquistar"


Bandeira amarela para "encapsular essa tarefa em um mtodo"
Como uma boa notcia, as classes e mtodos deve ler de cima para baixo"!
Bom: comear com um resumo de alto nvel dos pontos-chave, em
seguida, entrar em cada ponto em detalhe
Bom: cada pargrafo lida com um tpico
Bad: divagar, saltando entre "nveis de abstrao", em vez de refino
progressivamente

69

Concentrate on Abstraction since correlated and Most rapidly makes your code start to make ugly, correleates well with
other smells

Divide and Conquer: Dont have one method that does everything. Divide into understandable pieces, and have methods
call others

One that orhestrates all the work

Symptom 1 line of code says what to do, many lines of code around it saying how to do it

One of other SOFA is mulitple rguments

Por que Muitos Argumentos Ruim?

Difcil de obter uma boa cobertura de testes


Difcil de fazer mock/stub durante o teste
Argumentos booleanos devem ser uma bandeira amarela
Se a funo se comporta de forma diferente com base no valor
booleano do argumento, talvez deva ser 2 funes
Se os argumentos "viajam em um pacote", talvez voc precisa extrair
uma nova classe
Mesmo conjunto de argumentos para um monte de mtodos

70

If behavior really depends on lots of arguments, then lots to test

Also makes it hard to mock/stub if many args interact

Boolean made 1 method harder to test than 2 methods

Program X & Smells


class TimeSetter

def convert(d)
y = 1980
while (d > 365) do
if (y % 400 == 0 ||
(y % 4 == 0 && y % 100 != 0))
if (d > 366)
d -= 366
y += 1
end
else
d -= 365
y += 1
end
end
return y
end

end

time_setterTimeSetter#self.convert calls
(y + 1) twice (Duplication)
.rb -- 5 warnings:
1. TimeSetter#self.convert calls
(y + 1) twice (Duplication)
2. TimeSetter#self.convert has approx 6
statements (LongMethod)
3. TimeSetter#self.convert has the parameter
name 'd' (UncommunicativeName)
4. TimeSetter#self.convert has the variable
name 'd' (UncommunicativeName)
5. TimeSetter#self.convert has the variable
name 'y' (UncommunicativeName)

71

A little Ruby goes a long way; if stare at a long time and cant figure it out, its too long

Not DRY (y+1)

Uncommunicative variables

- Suppose hebrew calendar, suppose not english

Quantitativo: Complexidade ABC

Contagens de Assignments, Branches e Condies


Branching -> :and, :case, :else, :ir, :or, :rescue, :
until, :when, :while
Pontuao = raiz quadrada (A^2 + B^2 + C^2)
NIST (National Inst Stds. & Tech...): 20 / mtodo
Ex: Ferramenta flog do Rails verifica a complexidade ABC

72

Branching terms are :and, :case, :else, :if, :or, :rescue, :until, :when, :while.

NIST standard for govt contracts

Quantitativo: Complexidade Ciclomtica (McCabe)

# de caminhos linearmente independentes no cdigo = E-N+2P (edges, nodes, connected components)

def mymeth
while(...)
....
end
if (...)
do_something
end
end

No exemplo, E=9, N=8, P=1, so CC=3

NIST (Natl. Inst. Stds. & Tech.): 10/mdulo

Ferramenta saikuro do Rails


calcula a complexidade
ciclomtica

73

a graphical measurement of the number of possible paths through the normal flow of a program

Node is basic block

Connected components

Also called McCabe Complexity, after the inventor

Quantitativo: Mtricas

Metric

Tool

Target score

Code-to-test ratio

rake stats

1:2

C0 (statement) coverage

SimpleCov

90%+

Assignment-BranchCondition score

flog

< 20 per method

Cyclomatic complexity

saikuro

< 10 per method (NIST)

Hotspots: lugares onde vrias mtricas levantam bandeiras vermelhas


add

require 'metric_fu' to Rakefile

rake

metrics:all
Considere as mtricas com um gro de sal
Como cobertura, melhor para identificar onde h oportunidade de melhoria

74

Several tools point to diculties than get your attention

Ano Bissexto & Quantitativo


class TimeSetter

def convert(d)
y = 1980
while (d > 365) do
if (y % 400 == 0 ||
(y % 4 == 0 && y % 100 != 0))
if (d > 366)
d -= 366
y += 1
end
else
d -= 365
y += 1
end
end
return y
end

end
75

ABC contou 23
(>20 ento um
problema))
Complexidade do cdigo
4 ( 10 ento no um
problema)

Ano Bissexto Revisado & Mtricas


class TimeSetter
def self.convert(day)
year = 1980
while (day > 365) do
if leap_year?(year)
if (day >= 366)
day -= 366
end
else
day -= 365
end
year += 1
end
return year
end
76

private
def self.leap_year?(year)
year % 400 == 0 ||
(year % 4 == 0 && year % 100 != 0)
end
end

Reek: No Warnings

Flog (ABC):
TimeSetter.convert = 11
TimeSetter.leap_year? = 9

Saikuro (Code Complexity) = 5

Comentrios devem descrever coisas que NO so bvias a partir do cdigo


"por qu", no "o qu"
77

* This means 2 things for writing comments:

* Don't just repeat what's obvious from the code

* Do think about what's not obvious (low level and high level):

* The units for variables, invariants

* Design issues that went through your mind while you were

writing the code: why the code is written this way.

* Subtle problems that required a particular implementation

* Abstractions:

* Goal is to write classes and other code that hides complexity:

easier to use than to write

* Abstractions won't be obvious from implementation; comments

should describe these (should be simple).

* For example, what do I need to know to invoke a procedure?

I shouldn't have to read the code of a procedure before calling

Bad Comments
// Add one to i.
i++;
// Lock to protect against concurrent access.
SpinLock mutex;
// This function swaps the panels.
void swap_panels(Panel* p1, Panel* p2) {...}

78

* Most software is poorly documented

* A lot of code has no comments at all

* Many open source projects set a very bad example

* When present, comments often not helpful

* Many people think comments are a bad idea

* Not useful

* Out of date

* Clutter the code

* "Just let me read the code!"

Comments (cont)

Comentrios devem ter um nvel de abstrao maior do que o cdigo


# Scan the array to see if the symbol exists
not
#
#
#
#
#

Loop through every array index, get the


third value of the list in the content to
determine if it has the symbol we are looking
for. Set the result to the symbol if we
find it.

79

* The biggest problem is that most people don't know how to write comments.

* "My code is self-documenting" (one of the great lies)

There are many other facets of writing good documentation, but this one rule will get you most of the way.

Armando agrees with Why?

* Alas, cant scale

Introduo a Behavior-Driven Design & User Stories


80

Next Chapter

Been preparing for building SaaS apps; now ready to build

Por que projetos de SW falham?

No atendem a necessidade dos clientes


No o que eles pediram/querem
Ou os projetos esto atrasados/atrasam
Ou esto acima do oramento (custo)
Ou so difceis de manter e evoluir
Ou todas as alternativas acima

Como o Metodologias geis tentar evitar este fracasso?

81

Ciclo de Vida gil :: Reviso

Trabalhar em estreita colaborao, de forma contnua com as partes interessadas na


elaborao de requisitos, testes
Usurios, clientes, desenvolvedores, programadores de manuteno, operadores,
gestores de projectos...

Manter um prottipo de trabalho (funcional) durante a implantao de novos recursos a


cada iterao
Tipicamente a cada 1 ou 2 semanas
Em vez de cinco fases principais, meses de durao
Verifique com as partes interessadas sobre o que est prximo, para garantir a construo
da coisa certa (vs. verificar)

82

Behavior-Driven Design (BDD)

83

BDD faz perguntas sobre o comportamento da app antes e durante o


desenvolvimento, para reduzir falhas de comunicao
Validao vs. Verificao
Requisitos escritos como histrias de usurio
Leves descries de como a app utilizada
BDD concentra-se no comportamento de execuo da aplicao ao
invs da sua implementao
Test-Driven Design ou TDD (em breve) testa a implementao

User Stories

1-3 sentenas em linguagem natural (cotidiana)


Se encaixa em um carto 3"x5"
Escrito por/com cliente
Formato "connextra":
nome do recurso/caracterstica (feature)

Como um [tipo de stakeholder],

Para que [eu possa alcanar algum objetivo],

Eu quero [fazer alguma tarefa]


As 3 frases devem estar l, podem estar em qualquer ordem

84

Dave Patterson created this image

From HCI community

Ideia: histrias de usurio podem ser formuladas como testes de aceitao antes que o cdigo seja escrito

Por que carto 3x5?

85

(a partir da comunidade de User Interface)

Nonthreatening => todos os stakeholders participam do brainstorming

Fcil de reorganizar => todos os stakeholders participam na definio


de prioridades

Como histrias devem ser curtas, fica fcil de mudar durante o


desenvolvimento
Muitas vezes temos novos insights durante o desenvolvimento

Diferentes stakeholders podem descrever o mesmo


comportamento de formas diferentes

86

Veja quais dos meus amigos esto indo para um show


Como admirador de show
Para que eu possa apreciar o show com meus amigos
Eu quero ver qual dos meus amigos do Facebook esto indo a um determinado show
Mostrar patrono de amigos do Facebook
Como gerente de bilheteria
Para que eu possa induzir um patrono para comprar um bilhete
Eu quero mostrar-lhe qual de seus amigos do Facebook est indo para um
determinado show

Product Backlog

Sistemas reais tem 100s de histrias de usurio

Backlog: histrias de usurio ainda no concludas

Priorizar os itens mais valiosos


Organizar para que eles correspondam ao SW liberado ao
longo do tempo

87

Problemas Relacionados (Related Issue)

88

Spike
Investigao corriqueira em uma tcnica ou problema
e.g. spike on recommendation algorithms
Aps a spike concluda, o cdigo deve ser descartado
"Agora que sei o que utilizar, vou fazer certo!"

Points, Velocity, and Pivotal Tracker


89

Produtividade e Ferramentas

90

Queremos evitar grande esforo de planejamento nas


Metodologias geis? Se sim, como estimar o tempo sem um
plano?
Histrias do Usurio podem ser usadas para medir o
progresso no projeto?
O que uma ferramenta deve fazer para ajudar a medio de
progresso para Metodologias geis?

Medindo Produtividade

Uma medida de produtividade da equipe: calcular a mdia de


histrias/semana?
Mas algumas histrias so muito mais difceis do que outras
Avalie cada histria de usurio com antecedncia em uma escala
numrica simples
1 para histrias simples, 2 para histrias mdias, 3 para histrias
muito complexas

Velocidade: nmero mdio de pontos/semana

91

Start with this 3 point scale

Why good idea?

See what you actually accomplish in points per week vs. what you guess as optimistic programmers

Teams learns to get estimate diculty of user story (gave a story 1 point but took 2 weeks; why was it hard? Learn from
mistakes)

Mais sobre Pontos

Depois de ganhar a experincia, a escala Fibonnaci uma boa sugesto: 1, 2, 3, 5,


8
(Cada novo nmero a soma dos dois anteriores)
Na Ustore, 8 extremamente rara
Equipes atribuem valor: voto, mantendo-se os dedos simultaneamente, tirar
mdia
Se uma grande discordncia aparece (2 e 5), tem que discutir mais sobre a
histria

92

How decide points rock, paper, scissors everyone says how many points a story is, and see if agree
Group says average and record so can see how well you did - rather

Mais sobre Pontos

5 => divida a histria em histrias mais simples


backlog no muito exigente
No importa se a velocidade 5 ou 10 pontos por iterao
Desde que seja consistente
A ideia melhorar a auto-avaliao e sugerir um nmero de
iteraes para um dado conjunto de features

93

At Ustore, break into multiple stories

Every time there is a SW concept, some builds a tool to implement idea to make it easy to do

Pivotal Tracker

Calcula a velocidade para o time e gerencia as HU: Current, Backlog, Icebox

94

Pivotal Labs brought us Pivotal Tracker

Bookkeeping for user stories, as long as doing that, might as well calculate velocity
Upper right corner is team velocity (10)

Very easy to use

Current

Done

Backlog (not shown) what work on next

Icebox invent more stories than will ever implement (frozen)

Pivotal will move things from backlog to current automatically and assign people to the tasks

Top to bottom is prioritized order (except in icebox, it is random)

Pivotal Tracker

Priorizar histrias de usurios pela localizao: Current, Backlog, Icebox


Quando concludo, mova para o painel Done
Pode adicionar pontos de release lgicos, assim podemos descobrir
quando um release realmente vai acontecer
pontos pendentes / velocidade
Epic (com o prprio painel)
Combine as histrias de usurio relacionadas
Ordenadas independente das histrias do usurio no Backlog

95

Epic: give software engineers the big picture of where the application is in the development process with regard to big
feature

Will put into backlog with Release Point

Tracker will estimate when Release Point looks to be

Tell customer as go along

Rastreie papis

Desenvolvedores no decidem quando a histria foi completada


Clique no boto Finish, que a envia ao "Product Owner" (como
em uma equipe Scrum)
PO avalia a histria do usurio e ento decide
Aceitar, que marca histria de usurio como feita, ou
Rejeitar, que marca histria com a necessidade de ser
reiniciada pelo desenvolvedor

96

Follow scrum roles, Product owner signs o

We use it for the book

Pivotal Tracker: Features vs. Chores

97

Features
Histrias de usurios que fornecem valor de negcio verificvel para o cliente
"Adicionar checkbox de concordo pgina"
Pontos valiosos e, portanto, deve ser estimado
Chores
HU que so necessrias, mas no fornecem nenhum valor bvio diretamente ao
cliente
"Descubra porque a sute de testes to lenta"
No h pontos

Team Cyberspace Whiteboard

98

Tracker permite anexar documentos s HUs (e.g., LoFi UI)


Wiki no repositrio Github
Google Drive: criao colaborativa e visualizao de diagramas,
apresentaes, planilhas e documentos de texto
Campfire: web-based service for password-protected online chat
rooms (http://campfirenow.com)
Telegram (http://telegram.org); Slack (http://slack.com); Google
Hangout

SMART User Stories


99

Criando Histrias do Usurio

100

Como voc sabe se voc tem uma histria do usurio boa ou


ruim?
Tamanho certo?
No muito difcil?
Vale a pena?

SMART HU

101

Specific

Measurable

Achievable (idealmente, implementado em 1 iterao)

Relevant (os 5 porque's)

Timeboxed (saber quando desistir)

Specific & Measurable

102

Cada cenrio deve ser testvel


Implica em conhecer boas entradas e existir os resultados
esperados
Anti-exemplo: "UI deve ser user-friendly"
Exemplo: Given/When/Then.
1. Dada alguma condio de partida especfica(s),
2. Quando eu fao X,
3. Em seguida, uma ou mais coisas devem acontecer

Achievable

103

Completar em 1 iterao
Se no puder entregar recurso na 1 iterao, entregar
subconjunto de histrias
Sempre apontar para o cdigo de trabalho @ final de iterao
Se <1 histria por iterao, precisamos melhorar estimativa
pontual por histria

Relevant: business value

104

Descubra o valor de negcio, ou mate a HU:


Proteger as receitas
Aumentar a receita
Gerenciar o custo
Aumentar o valor da marca
Tornar o produto notvel/reconhecido
Fornecer mais valor agregado aos seus clientes
Um bom exemplo: http://wiki.github.com/aslakhellesoy/cucumber

5 "Porqus" para encontrar relevncia

1.
2.
3.
4.
5.

Show patrons Facebook friends


As a box office manager
So that I can induce a patron to buy a ticket
I want to show her which Facebook friends are going to a given show
Why?
Why?
Why?
Why?
Why?

105

Why add the Facebook feature? As box oce manager, I think more people will go with friends and enjoy the show more.

Why does it matter if they enjoy the show more? I think we will sell more tickets.

Why do you want to sell more tickets? Because then the theater makes more money.

Why does theater want to make more money? We want to make more money so that we dont go out of business.

Why does it matter that theater is in business next year? If not, I have no job.

5 Porqus para encontrar relevncia


1. Why add the Facebook feature? As box office manager, I think more people
will go with friends and enjoy the show more.
2. Why does it matter if they enjoy the show more? I think we will sell more
tickets.
3. Why do you want to sell more tickets? Because then the theater makes more
money.
4. Why does theater want to make more money? We want to make more money
so that we dont go out of business.
5. Why does it matter that theater is in business next year? If not, I have no job.
106

Timeboxed

107

Pare a HU quando ultrapassar oramento tempo


Desista, divida em histrias menores ou reagende o que
for deixado de lado
Para evitar subestimar o tamanho do projeto
Pivotal Tracker rastreia a velocidade, o que ajuda a evitar
esta subestimao

Lo-Fi UI Sketches and Storyboards


108

Construindo UI com sucesso

109

Apps SaaS vezes atrapalham usurios


As histrias de usurio precisam de Interfaces de Usurio (UI - User
Interface)
Como conseguir clientes para participar de projetos de UI que se
sintam felizes quando finalizado o projeto?
* What-I-Said-But-Not-What-I-Want
Evite WISBNWIW* em UI?
Verso UI de cartes 3x5?
Como mostrar a interatividade sem a construo de prottipo?

Projeto de UI em SaaS

110

Lo-Fi: low fidelity

Sketches UI: lpis e papel


para desenhar ou Lo-Fi UI

Exemplo de Lo-Fi UI

(Figure 4.3, Engineering Long Lasting Software by


Armando Fox and David Patterson, Alpha edition,
2012.)

111

Storyboards

112

HCI, Human-Computer Interaction

Necessitam mostrar como a UI muda a partir de aes dos


usurios
IHC (HCI) => storyboards
Como cenas em um filme
Mas sem ser "linear"

Exemplo de Storyboard para Software

(Figure 4.4, Engineering Long Lasting Software by


Armando Fox and David Patterson, Alpha edition,
2012.)

113

Lo-Fi para HTML

entediante construir sketches & storyboards,


porm mais fcil do que construir HTML!
Alm disso, menos intimidador para stakeholders no-tcnicos =>
incentivador sugesto de modificaes de UI se no houver
cdigo por trs
Uma maior probabilidade de sucesso com a UI final
Prximos passos: CSS (Cascading Style Sheets)
Melhorar a aparncia depois de funcionando

114

Estimativa de Custo gil


115

(Engineering Software as a Service 7.4)

Estimativa de Custo gil

116

O mundo real precisa estimar o custo antes de assinar


qualquer termo de compromisso de um projeto

Se no houver um planejamento nas Metodologias geis,


como eu posso estimar o custo de um projeto?

Modelo da Ustore

A Ustore ensina Metodologias geis aos clientes

Utilizando Metodologias geis, a Ustore, por exemplo, nunca se


compromete a entregar as features X, Y, and Z at a data D

Ao invs disso, so comprometidos recursos para trabalhar da forma mais


eficiente possvel at a data D
Clientes trabalham com o time para definir as prioridades
continuamente at a data D
Ainda assim, necessitamos de estimativas para o projeto

117

Estimativa gil da Ustore


1. Telefonema de ~1 hora para explicar o mtodo
Esforo conjunto, compromisso do cliente,
2. Visitas do cliente de ~1.5 horas para definio/entendimento do escopo
Clientes leva designer, desenvolvedor, projetos
Qualquer coisa para clarificar o que precisa estar pronto
Ustore leva 2 engenheiros para fazer perguntas
Identificar o que adiciona incerteza estimativa
3. Engenheiros tomam hora para estimar as semanas
Pequena vs. grande incerteza: 20-22 vs. 18-26 semanas
4. Custo da oferta como tempo e material para o cliente
118

Alguns links para o futuro

119

A biblioteca do Desenvolvedor de Software dos dias de hoje


Ensinando Engenharia de Software na Prtica, Parte I
Ensinando Engenharia de Software na Prtica, Parte II
Computers Are The Future, But Does Everyone Need To Code?
Conselhos de um velho programador antissocial e ranzinza
Evoluindo uma Arquitetura inteiramente sobre APIs: o caso da SoundCloud
Especial: 8 sites gratuitos para aprender programao por conta prpria
12 Sites That Will Teach You Coding for Free

Obrigado
Prof. Vinicius Cardoso Garcia
vcg@cin.ufpe.br :: @vinicius3w :: assertlab.com
120

Potrebbero piacerti anche