340 likes | 350 Views
Software Engineering Dr. Jim Holten. CS351/ IT351 Lecture 07. Overview. A Little History Project Needs The Roadmap A View from Afar. In the beginning. History. Machine code. Machine code is cryptic It was a new concept, so people had to train themselves
E N D
Software Engineering Dr. Jim Holten CS351/ IT351Lecture 07
Overview • A Little History • Project Needs • The Roadmap • A View from Afar
In the beginning ... History
Machine code • Machine code is cryptic • It was a new concept, so people had to train themselves • There were no design and development procedures to follow, so they invented their own. • Code development was slow and unreliable. • Good coders needed EXTREME discipline. • Coordinating multiple efforts was ....??
Order out of chaos History
Development Process • Describe problem in written language. • Refine the concepts toward algorithms in the available instructions. • Write the code. • Translate to machine code. • Put the program into the machine and run it.
Project Management Approaches • Waterfall... • Formal reviews. • Sign-offs. • Engineering Change Proposals........? • Spiral... • Waiting while we get sign-off....
Software Developer Approaches • Top down design and coding • Bottom up design and coding • Mixtures • Objects • Patterns • Data Flow Diagrams, SADT, HIPO, state diagrams, flow charts, ER diagrams, ... • UML
Tools • IDEs • CASE • Blah blah blah .... • Nice concepts and features, but not “complete”. • Buggy too! • Heavy overhead – slows development.
Getting less formal History
Management Impatience • Takes too long! • Want results right away! • Must invest too much before we see any results! • Frustrating!
Developer Impatience • Too much documentation! • Squelches creativity! • Frustrating!
Alternatives • Rapid prototyping • Extreme programming • Rapid development • Empower the programmer
Losing it History
Self-organizing Developers? • Seven blind men and the elephant • Whose vision do I follow? • Each doing their own “right thing” • Why won't they include this essential item in their interface for me? • Who's in charge here? • HELP!!!
History • In the beginning ... • Order out of chaos! • Formalized approaches to software engineering • Getting less formal • Losing it
Projects • What does a project NEED? • How should it be organized? • Who should decide? • How do we coordinate priorities and choices made?
What are we supposed to be doing? -- a vision Project Needs
Vision • Vision statement • High level testable requirements • Subdivision into modules • Detailed testable requirements for modules
How shall we do it? -- a plan Project Needs
A Plan • Project plan • Design overview – subdivide into modules • Interface specifications • Detailed designs – each module • Programmer assignments • Schedules • Risk assessment
Getting down and dirty -- the coding Project Needs
The Coding • Coding standards • Version control • Standardized environments • Assignments • Problem reporting and resolution procedures • Unit testing – internal implementation correct • Unit delivery
Does it work? -- testing, testing goals Project Needs
Testing • “Unit” testing • Integration testing • Acceptance testing • Test plans
You want what? -- merging changes Project Needs
Changes • Requirements change requests • Investigation, scoping, planning, and reporting • Merging it into the workflow • Updating documents, code, and tests
How do I install and use this thing? -- delivery Project Needs
Bugs? New features? -- new releases Project Needs
Project Needs • What are we supposed to be doing? -- a vision • How shall we do it? -- a plan • Getting down and dirty -- the coding • Does it work? -- testing, testing goals • You want what? -- merging changes • How do I install and use this thing? -- delivery • Bugs? New features? -- new releases
A Roadmap -- Landmarks • Vision • Requirements • Designs • Interface definitions • Implementation plans • Coder assignments • Test plans • Tests and test results
View From Afar • Storyboarding • Iterative and stepwise refinement • Making the project “flow” • Taking control of what is important • Ability to judge relative significance of tasks • Ability to easily shift resources and focus