Kitts' notes on Leyna Cotran's software engineering talk
Software engineering requirements activities
- elicit, model and analyze, communicate, agree, evolve
Google's products altogether (as of 2015) total ~2B lines of code
How do you manage that? Developing... maintaining....
Software development process model: way of thinking about the development process:
- waterfall (est in 1970's) - offered as a way NOT to develop software, but was adopted by the government as the way of doing business! Negatives were issues like having the phases too isolated from one another, etc.
- spiral/incremental (est in 1980's) - start small and grow in functionality over time, prototyping incrementally
- agile - frequent releases that work
Tools - to manage process
- collab tools: support physically dispersed teams
- config management: store and manage classes, functions, etc.
- tools to automate daily tasks (like test cases)
Importance of design (user experience)
- deliberate decisions that must satisfy user
- interplay btw user desires and technical feasibility
- seamless transition btw features and navigation
- exploiting reuse of interface concepts and commonality
- Structure: code and libraries
- Foundation: servers, routers, app devices
- Blueprints: data flow diagrams, block diagrams
NOTE -- architecture is NOT design - design is about user experience whereas architecture is the way to represent/implement a program, no matter how well or poorly designed
- write test cases in parallel to writing requirements
- test for the unknowns
So why is developing software so hard?
- people - we make mistakes, think differently, miscommunicate, emphasize different things, etc.
- process - always evolving, selecting which ones to use