400 likes | 505 Vues
This overview by Dr. Jim Holten explores the historical development of software engineering, detailing its chaotic beginnings with machine code to the establishment of formalized processes. It emphasizes the challenges faced in early coding practices, the evolution of project management approaches like Waterfall and Spiral, and contemporary trends toward rapid prototyping and self-organizing teams. The necessity for clear vision, planning, coding standards, and effective testing is stressed, ultimately guiding teams toward more efficient and orderly software delivery.
E N D
Software Engineering Dr. Jim Holten CS351/ IT351Modeling and Simulation
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 the problem in written language. • Refine the concepts toward algorithms in theavailable 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 of top-downs and bottom-up • 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