Laboratório de Desenvolvimento de Software FEUP/MIEIC, 2015/16 Ademar Aguiar Nuno Flores Rui Maranhão Hugo Ferreira Luís Teixeira url: moodle
http://www.facebook.com/notes/facebook-engineering/visualizing-friendships/469716398919
Software Engineering (1) the application of a systematic, disciplined, quantifiable approach to the development, operation and maintenance of software, i.e. the application of engineering to software. (2) the study of approaches as in (1). IEEE Computer Society. software citius, vilis, bonus..., A. Aguiar
Software Complexity Higher technical complexity - Embedded, real-time, distributed, fault-tolerant - Custom, unprecedented, architecture reengineering - High performance An average software project - 5-10 people - 3-9 month duration - 3-5 external interfaces - Some unknowns & risks Lower management complexity - Small scale - Informal - Single stakeholder - Products Commercial Embedded Compiler Automotive Software CASE Tool Small Scientific Simulation Business Spreadsheet IS Application Distributed Objects (Order Entry) IS Application GUI/RDB (Order Entry) Enterprise IS (Family of IS Applications) Telecom Switch Large-Scale Organization/Entity Simulation Defense Weapon System Defense MIS System National Air Traffic Control System Higher management complexity - Large scale - Contractual - Many stakeholders - Projects Lower technical complexity - Mostly 4GL, or component-based - Application reengineering - Interactive performance Walker Royce
Waterfall model
Rational Unified Process Phases and Activities
Agile In Merriam-Webster dictionary, agile means: 1 : marked by ready ability to move with quick easy grace 2 : having a quick resourceful and adaptable character <an agile mind> In agile software development, it means ability to respond to change.
Key Concepts about Processes The challenge is to help on achieving: high quality of the developed product high productivity of development good predictability" of process results Define who? what? when? why? how? Roles, artefacts, activities, techniques, practices and tools Means to an End Suggest practices to help improve team capabilities Introduce formalities to improve team discipline Force documenting to improve team comunication and knowledge Which practices, formalities and documentation to use? No silver bullet! It depends on the project... Balance them to your needs...
Balancing Discipline and Agility capabilities, communication, knowledge, discipline, selforganization, adaptability, optimization, pace, quality, ROI, predictability, culture, criticality, size, dynamism... practices, documentation, formalities, leadership, roles, artifacts, tools, training, planning, feedback, size the project
Scrum Day Ademar Aguiar 24.Sep.2014
Controlling Software Projects Four control variables require balancing Resources Time Scope Quality It is not advisable to set a priori the value of all variables simultaneously, if we want a successful project. scope is often the most important variable to control
Agile Processes
Examples Adaptive Software Development (ASD) Agile Modeling Crystal methods Dynamic System Development Methodology (DSDM) extreme Programming (XP) Feature Driven Development Lean Development Scrum Open source software development. Agile version of Rational Unified Process
The Agile Manifesto I We are uncovering better ways of developing software by doing it and helping others to do it. Through this work we have come to value: Individuals and interactions over processes and 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. http://www.agilealliance.org/
Model and Phases
Envision phase What is the customer's product vision? What is the scope of the project and its constraints (including the business case)? Who are the right participants to include in the project community? How will the team deliver the product (approach)?
Speculate phase Determine how the product and its features will evolve Balance anticipation of features and design with adaptation as the project unfolds Focus on the highest-value features early in the project Think about the project, business goals, and customer expectations Provide necessary budget and schedule information to management Establish priorities for tradeoff decisions as changes occur Coordinate interrelated activities and features across feature teams Consider alternatives and adaptive actions Provide a baseline for analyzing events that occur during the project
Explore phase Focusing the team on delivering results Molding a group of individuals into a team Developing each individual's capabilities Providing the team with required resources and removing roadblocks Coaching the customers Orchestrating the team's rhythm
Adapt phase Product functionality, primarily from the customer team's perspective Product quality, primarily from the technical team's perspective Team performance Project status
Close phase Celebration Clean up open items Finalize documentation and production or manufacturing support material Prepare required end-of-project administrative and financial reports Project retrospective
The Cycles of Agile Development
Scrum 24 hours Sprint goal Sprint 2-4 weeks Return Return Cancel Gift Coupons wrap Gift Cancel wrap Product backlog Sprint backlog Coupons Potentially shippable product increment
Scrum: a framework Scrum Day Ademar Aguiar 24.Sep.2014
Information radiator
LDSO Roles Development Team: analyst, architect, programmer, tester, interface designer, (students). Scrum Master: responsible for following the process (students). Product Owner: responsible for product backlog management and communication with Customers and Stakeholders (external). Client/Customer/End-user: has a clear vision of the features and relative importance of each one of them (external). Consultant: external expert on specific topics (teachers, others). Manager: ultimate responsible for the project (teacher).
Artefacts vision user stories + user interfaces, architecture vertical functional prototype public demonstration of the functional prototype product backlog, sprint backlogs acceptance tests + unit tests continuous integration plans project tracking and management product releases documented source code repository (git) pitch + video + slides demo (5min) public demonstration of the product quality of the collaborative platform contents technical reports
Techniques, practices and tools Planning (Re)planning iteratively at beginning of each phase (team and client). Acceptance tests. Development agile software development Communication collaborative platform for the documentation (wiki) GIT for source code
Technologies: some examples...
Projects 4-6 elements 4-5 projects / class small projects with social impact, proposed by social entrepreneurs, teachers, students, etc. key areas: mobile and web apps responsive web site web server/services mobile app (ios, Android, Windows Phone) The best projects will be mentored to continue as autonomous projects, maybe startups...
Objectives, Skills and Learning Outcomes applying a Software Engineering process to the complete development of a real software system, covering the specification of requirements, software architecture and design, coding, integration, test, documentation and demonstration; acquire fundamental knowledge and experience about agile software development practices: iteration planning, unit tests, refactoring, patternbased design, collective ownership, pair programming, continuous integration; use software development tools adapted to agile methods to enable the continuous monitoring and tracking of the project; use of large-scale APIs with class packages, to induct the component-based computing and the problems related with application integration; development of collaborative work integrating other project participants in design decisions, planning, delegation, negotiation, and group review; application and integration of the contents acquired by the students in courses within the areas of Software Engineering, Databases, Graphic Interfaces, Operative Systems, Programming Languages and Artificial Intelligence.
Methodology Classes Theoretical classes are used to the presentation and supervision of the projects and for the exposition of software developing tools. Laboratory classes are used to sync the implementation of the application: sprint planning, development, sprint review Project divided into 5 iterations: iteration 0 +4 iterations of 2 weeks Demos the functional prototype the product, beta version
Final grades Iteration 0-20%, 1+4 weeks, 17/Sep-15/Oct vision, user stories + user interfaces, architecture, vertical functional prototype public demonstration of the functional prototype Iterations 1-4 - 30%, 8 weeks, 22/Oct-17/Dec development process maturity: planning, user stories readines, estimations, acceptance tests, unit tests, continuous integration project tracking and management Finale - 30%, 6/Jan product release (signup, download, etc.), documented source code repository (git), pitch + video + slides demo (5min), updated technical reports public demonstration of the product, to showcase the idea, concept, and solution from the perspective of value for the client. Individual evaluation - 10% presence and participation Collaboration Platform 10%
Bibliography Extreme Programming Explained by Kent Beck, Addison-Wesley Pub Co; 1st edition (October 5, 1999), ISBN:0201616416 Extreme Programming Installed, by Ron Jeffries, Ann Anderson, Chet Hendrickson, Ronald E. Jeffries, Addison-Wesley Professional; 1st edition (October 13, 2000), ISBN:0201708426 Planning Extreme Programming, by Kent Beck, Martin Fowler, Addison-Wesley Professional; 1st edition (October 13, 2000), ISBN:0201710919 Refactoring, by Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts, Addison-Wesley Pub Co; 1st edition (June 28, 1999), ISBN:0201485672 Adaptive Software Development: A Collaborative Approach to Managing Complex Systems, by James A. Highsmith III, Dorset House Publishing Company, Incorporated (December 1, 1999), ISBN:0932633404 Agile Software Development, by Alistair Cockburn, Addison-Wesley Pub Co; 1st edition (December 15, 2001), ISBN:0201699699 Agile Software Development, Principles, Patterns, and Practices, by Robert C. Martin, Prentice Hall; 1st edition (October 15, 2002), ISBN:0135974445 Test Driven Development, by Kent Beck, Addison-Wesley Professional; 1st edition (November 8, 2002), ISBN:0321146530 Selected papers and articles.
ademar.aguiar@fe.up.pt