software-development-process.wiki (2442B)
1 == Software development process == 2 3 main activities: 4 * requirements engineering 5 * specifies the main functionalities of the system 6 * defines the qualities to be met 7 * design 8 * give shape to a system via models 9 * not a clear-cut sequential process 10 * implementation and testing 11 * involves actual development of the system 12 * component testing – test individual components independently 13 * system testing – test the system as a whole (including emergent properties like overall performance) 14 * acceptance testing – test with customer data to see if the system meets the customer's needs 15 * evolution 16 * software is inherently flexible and can change 17 18 === Waterfall development process === 19 20 {{file:img/waterfall-dev.png|Waterfall dev process image}} 21 22 exists in many variants, all with sequential flow. it's document-driven. 23 24 issues: poor agility (when do you know how far you are in the project?), poor quality (cuts if you run out of time), high risk (finding issues in test phase) 25 26 critical evaluation: 27 * positive: 28 * precise planning and management – standard-oriented 29 * postpone implementation to after understanding objectives 30 * good documentation 31 * negative: 32 * hard to get all requirements once and for all (users might not even know what they want) 33 * rigid 34 * no feedback from the customer 35 * no parallelism, all phases are blocking (because sequential) 36 * a single delivery date at the end 37 38 === Agile development process === 39 iterative development processes with: 40 * frequent releases of the product 41 * continuous interaction between dev team and customer 42 * reduced product documentation 43 * continuous and systematic assessment of produced value and risks 44 45 agile in practice: 46 * make a list 47 * estimate 48 * set priorities 49 * start executing 50 * update the plan at run time 51 52 critical evaluation: 53 * positive: 54 * acceptance of change – less risky 55 * frequent and short iterations 56 * emphasis on working code 57 * associates a test with every piece of functionality 58 * continuous integration and delivery 59 * negative: 60 * feature-based development & ignorance of dependencies 61 * no strong quality plan 62 * less focus on architecture of system (in fact, dismisses everything that isn't shippable) 63