Informatics 43 Quiz #1
• Memorize one definition of software engineering (word for word)
"Multi-person construction of multi-version software." [Parnas]
• Know and understand software failure causes and how they relate to requirements issues
REQUIREMENTS ISSUES: Lack of user input/involvement Incomplete requirements and specifications Changing requirements and specifications LACK OF RIGOR AND FORMALITY Lack of discipline in development processes Lack of methodical usage of metrics
• Know and understand the 3 perspectives on software engineering we talked about
Business -->cost of developing (purchasing) software -->time to market of product -->profit that will be made from sale of software Engineering -->internal quality of the software (quality from the designer's perspective) -->making it work within the constraints of the environment Design -->external quality of software -->"Quality from the user's perspective"
-->Know and understand the essential difficulties of software engineering
-Complexity Software entities are complex. "No two parts are alike." Nonlinear increase with size difficulty of communication among team members unreliability hard to use difficulty of extending security trapdoors -Conformity Software must conform to human institutions and systems. no way to "simplify out" this complexity by redesigning the software alone. -Changeability "All successful software gets changed." Pressures for extended function. Software can be changed more easily. Successful software survives beyond the life of the hardware it was written for. -Invisibility "The reality of software is not inherently embedded in space." Hinders both understanding and communication among minds.
Know and understand the "potential silver bullets" on the essential difficulties
Buy versus build. If something already exists, why rebuild it? i.e O.S code, some is free Requirements refinement and rapid prototyping. It is extremely hard to figure out what a customer wants. They usually don't even know. Spends a lot of time on this. Brooks goes so far as to say that it is impossible without a rapid prototype Incremental development—grow, not build software. -->start out with something simple that runs, then incrementally add to it Great designers. "The central question of how to improve the software art centers, as always, on people."
• What are the 3 essential ingredients of software engineering?
People, Processes, Tools
• Know and understand the "Inf43 Recurring, Fundamental Principles" of software engineering, and the overall ideas behind the other principles
Rigor and formality -->software is complex and the only way to try to hit every detail is to be rigorous and formal Separation of concerns: In process, in artifact structure (code, requirements, design, etc.). another way to deal w/ complexity abstraction: e.g., requirements, design, source code all represent software in a more abstract way than 1s and 0s generality: Y2K example, list that sorts only integers—can I make it sort floating point numbers too? (Don't Hard Code Stuff) incrementality: simplifies development, reduces bug, manages complexity Anticipation of change: make your software easy to change All of these serve the purpose of managing complexity!
What is a requirement?
Tells what the software should do, not necessarily how it should do it