DoVelop*
Fall 2013
Capabilities growth
* Dofinity + Development = DoVelop
Develop Scope
Single platform (project) to grow our foundations (capabilities) in a prioritized and coordinated manner
- Personal Projects
- R&D
- Dobase
-
Dofinity
-
Procedures & Tools
- Knowledge Distribution
- Hosting Foundations
- Marketing Support
-
etc.
Develop Sources
-
Existing Backlog
-
DrupalCon 2013
- Marketing Needs
Information Explosion
=> We need focus
=> Forming 7 initiatives
DoVeleop - How
- Areas of Responsibility
- Focal Initiatives
- Backlog to manage
- Monthly Review + Prioritization (aka sprints)
- Desire to grow
Develop - How (Cont)
Sample Deliverables
- Code (Dobase, Project, Custom Module)
- Best Practices / Guidelines (Confluence)
- Procedures (Confluence)
- Tips & Tricks (Confluence)
- Documents Templates (ftopia)
- Process Adjustments (Confluence, Prezi)
- Research (ftopia, Confluence)
Training / Knowledge Transfer is a MUST for all of the above.
Q4 2013 - PRIORITIZED TOPICS
- Testing
- Backoffice Handling
- Support
- Frontend
- Performance
- Design Techniques
- Commerce
Offsite Goals
Jump start DoVelop
This will be done by:
- Setting up a common ground for the project
- Presenting relevant information from DrupalCon
-
Reviewing the existing initiatives and related tasks
- Turning ideas into actionable items
Offsite Agenda
8:30 - Offsite kickoff: Goals, Agenda, Work method
9:00 - The Way We Execute - Udi
10:45 - Break
11:00 - Session I - Udi
12:30 - Lunch
13:15 - Session II - Peleg
14:45 - Session III - Aviv
16:15 - Break
16:30 - Parking Lot
17:15 - Planning : Actions & Timeline
18:00 - Closing
Pre-Requisite
Enhancing our process requires knowing it thoroughly
Thus...
The Way We Execute
Key concepts:
Terminology
- Weekly Planning (Dofinity)
-
Sprint (Agile , Dofinity)
- Backlog (Agile) / Features List (Dofinity)
- Release (Dofinity)
- Version (Dofinity)
- More?
Roles
-
Sales
-
Account Manager
- Project Manager
- Architect / Functional Designer
- UX Expert
- Graphic Designer
- Dev Lead
- Developer
- Dev Ops / Sys Admin
- Support Lead
The Way We Execute
The Golden Rules
-
RCCP - Req, Company, Community, Pareto
-
Work Outside-In
- Cross team face-to-face meetings
- Change is Blessed
Further Agenda
-
Frontend Performance
-
Frontend Ops
- Testing
- Auditing (Coding Standards, Security, Performance)
Frontend Performance
The 10 golden tips:
-
CSS on top (Done by Drupal)
-
JS at the bottom - implement DoBase hook
-
Remove unnecessary CSS - implement Dobase hook
-
ADVAGG on DoBase
-
Send less data (no duplication of CSS)
-
Minify CSS / JS (mainly)
-
Aggregate
-
Lazy Load on Isotope and the likes - Custom Module?
-
Sprites - Use GRUNT + COMPASS
-
GZIP (Dahhh)
-
Perform Parallelization:
-
Pre-DNS call
-
Use CDN module - Smart assets distribution
-
Turn on 10 min minimum-cache-life-time at Drupal Cache Page
-
Implement progressive jpg on DoBase?
The 10 golden tips:
-
CSS on top (Done by Drupal)
- JS at the bottom - implement DoBase hook
- Remove unnecessary CSS - implement Dobase hook
- ADVAGG on DoBase
- Send less data (no duplication of CSS)
- Minify CSS / JS (mainly)
- Aggregate
- Lazy Load on Isotope and the likes - Custom Module?
- Sprites - Use GRUNT + COMPASS
-
GZIP (Dahhh)
- Perform Parallelization:
-
Pre-DNS call
- Use CDN module - Smart assets distribution
-
Turn on 10 min minimum-cache-life-time at Drupal Cache Page
- Implement progressive jpg on DoBase?
Actions!
Frontend Ops
Automation Tools
Grunt
PhantomJS
SlimerJS
CSS / JS Authoring
JSHint + Grunt
- uglifyjs
- script concatenation
- image minification
- Compass
- LiveReload
- jekyll-build
- dev/prod build modes
Performance Tools
YSlow for node.js + PhantomJS
YSlow for PhantomJS
PageSpeed + Grunt
PhantomJS + YSlow Local Demo
(Optional) YSlow Session Demo
CSS Regression Tests
Wraith
Compare Dev-Staging-Prod
Compare Actual vs Planned
Looking Forward
Where do we go from here?
Own view: Integrated Development Environment...
Have a dashboard automatically presenting all perspectives of a given change:
-
Syntax
-
Coding Standards
- Logic Validity
-
Performance
-
Security
-
Compatibility - Browsers
-
Compatibility - Breakpoints
- Regression
-
UX?
Actions!
Testing
Testing Status
What are we short of?
-
Lack of attention
- Lack of process
- Lack of tools
- Lack of best practices
Let's change that!
Test-Driven Development (TDD)
Add a test, get it to fail, and write code to pass the test
TDD is a robust way of designing software components (“units”) interactively so that their behaviour is specified through unit tests
TDD (Cont)
Unit tests:
"Not an effective way to find (the really devious) bugs or detect regressions." [Steven Sanderson]
- Finding Bugs - Use: Integration Tests
- Finding Regression - Use Automated Tests
- Performing Design - Use Unit Test
Behavior-driven development (BDD)
Unit Test:
-
Whole sentences starting with the word "should"
-
Written in order of business value
Acceptance Test:
- Based on User Stories
- Each Story consists of: Title + Narrative + Scenarios (Criteria)
Test-bind Development (TbD)
Plan your tests, write your code, write the tests and pass them (feature level).
Feature = Design + Test Planning + Coding + Testing
Tools
PHPUnit
- Exist 12 years
- Drupal 8 chosen platform
PhantomJS + Mocha / Jasmine
- Headless Webkit browser emulation
- Light-weight and graphic less hence fast
Tools (Cont)
Selenium
- Browser Automation Tool
- Actually a suite of tools (RC, IDE, Grid)
Behat
- PHP Testing Framework
- BDD Based for higher level tests (acceptance)
PHPUnit
<?php
class StackTest extends PHPUnit_Framework_TestCase
{
public function testPushAndPop()
{
$stack = array();
$this->assertEquals(0, count($stack));
array_push($stack, 'foo');
$this->assertEquals('foo', $stack[count($stack)-1]);
$this->assertEquals(1, count($stack));
$this->assertEquals('foo', array_pop($stack));
$this->assertEquals(0, count($stack));
}
}
?>
Selenium
Selenium
<?php
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
class Example extends PHPUnit_Extensions_SeleniumTestCase
{
function setUp()
{
$this->setBrowser("*firefox");
$this->setBrowserUrl("http://www.google.com/");
}
function testMyTestCase()
{
$this->open("/");
$this->type("q", "selenium rc");
$this->click("btnG");
$this->waitForPageToLoad("30000");
$this->assertTrue($this->isTextPresent("Results * for selenium rc"));
}
}
?>
Now we are less short of...
-
Awarness - hack we just talked about it, right?
-
Process - Test Binded Development
-
Tools - Phased approach:
- Phase 1: PHPUnit
- Phase 2: Add PhantomJS (+ Grunt)
- Phase 3: Add / Replace with Selenium
- Future: Behat?
- Best Practices - Will evolve as we move forward
Actions!
Auditing
Site Auditing
Review Site Audit new template
Demo at JSOC
Security
Access Bypass
XSS
CSRF ,SQL Injection
CSRF - Someone knows that you are an Admin...
SQL Injection - similar to XSS but with SQL code
ACtions!
Time Left?
DoVelop + Offsite 2013 [Udi]
By dofinity
DoVelop + Offsite 2013 [Udi]
- 290