280 likes | 291 Views
Software Engineering. Shari Lawrence Pfleeger Software Engineering General text. Design Issues. Frederick Brooks The design of design www.cs.unc.edu/~brooks/DesignofDesign Supporting material. Understanding people/projects. Fred Brooks The Mythical Man Month Edward Yourdon Death march.
E N D
Software Engineering • Shari Lawrence Pfleeger • Software Engineering • General text (c) Ian Davis
Design Issues • Frederick Brooks • The design of design • www.cs.unc.edu/~brooks/DesignofDesign • Supporting material (c) Ian Davis
Understanding people/projects • Fred Brooks • The Mythical Man Month • Edward Yourdon • Death march (c) Ian Davis
Software Architectures • Ian Gorton • Essential Software Architecture • Richard Taylor • Software Architecture (c) Ian Davis
Design Patterns • Gamma et. Al (Gang of four) • Design Patterns • Head First Design Patterns • Eric & Elizabeth Freeman (c) Ian Davis
Quantum Computing (c) Ian Davis
Doing the math • Denning & Buzen • The operational analysis of queuing network models • ACM Computer Surveys 10.3 September 1978 (c) Ian Davis
Development Processes • Sanjeev Sharma and Bernie Coyne. DevOps for Dummies. (c) Ian Davis
Software Architecture • Not about doing things a certain way • It is about seeing the way things should be done • It isn’t what I can teach or you can learn • It is about being creative and thinking outside of the existing boxes. • It is about an evolving technology • It is knowing how to address unknowns (c) Ian Davis
The design process • Requirements • What has to be accomplished • Architecture • Vision as to how the requirements can best be realised • The framework for how best to implement • Detailed Design • Getting each piece of the puzzle the right shape • Fitting it with the other pieces (c) Ian Davis
Requirement .v. Design • Requirements first • Decide what you want before you design • Reduce risks • But some people can’t think abstractly • Architecture and design • Risky if you don’t have a clear idea of objective • But may help clarify objectives • Plan to throw one away (you will anyway) • Trading earlier start against perhaps more work (c) Ian Davis
Taking the CS446 challenge • Software engineering is common sense • 98% good practices, 2% impossible • 5% success, 95% failure (In 1980’s) • 25% of teams don’t deliver (Recent IBM survey) • Common sense is not very common • Hard to teach • Common sense comes across as incredibly boring • No right answers, but many wrong ones • Software is as much art as it is science (c) Ian Davis
http://www.businessweek.com/printer/articles/256666-avoiding-the-inventor-s-lament?type=old_articlehttp://www.businessweek.com/printer/articles/256666-avoiding-the-inventor-s-lament?type=old_article (c) Ian Davis
Åstebro, Thomas, “The Return to Independent Invention: Evidence of Unrealistic Optimism”, The Economic Journal 113 (484), 226-239, January, 2003. (c) Ian Davis
Is software development an art? • YES • Getting it right the first time demands vision. • There is beauty in a good design. • It is easy to appreciate a good design and dislike a bad one, at a raw gut level. • NO • Little argument about what is good or bad (c) Ian Davis
Measuring good and bad • Transcendental view • Something we can recognise but not define • User view • Fit for purpose • Manufacturing view • Conformance to specification • Product view • How well is it internally put together • Marketing view $$$ (c) Ian Davis
What are your personal goals • Speed of development • Correctness of solution • Ease of comprehension • Elegance of design • Providing leadership • Being a great team player • Writing code no one else can understand • Getting out of university alive (c) Ian Davis
Because goals differ • No right way to program • But still some obviously wrong ways to program • Differing goals can produce: • Disagreement and conflict • Bad code is easier to correct than a disfunctional team • Focus on being a team player (c) Ian Davis
What do you bring to your team • Good architect (Have vision) • Good Programmer (what languages) • Genius - know API’s/database/research etc. • Tester (Able to get problems on ground) • Able to say what is ugly or needs thought • Technical writer (Can produce readable docs) • Seller (Can sell an idea, present, justify) • Manager (Can organise, and reduce risk) (c) Ian Davis
Goals of software development • Need to understand requirements. • Want software with maximum functionality. • Code must be reliable. • Cost to develop and maintain important. • Want results as fast as possible. • Must minimize development risks. • Do no harm. (c) Ian Davis
Problem • You cannot achieve all goals simultaneously! • Which of these goals are you willing to compromise on? • How do you identify which (if any) of these goals is realistic or realizable? (c) Ian Davis
Software engineering to rescue • Identify desired functionality • Plan/cost activities • Develop architectural design • Monitor progress • Document decision points • Identify problems ASAP • Test exhaustively • Constantly collaborate with stake holders (c) Ian Davis
Is software development engineering? • YES • We are building things. • Need a methodology to succeed. • Need engineering management skills. • Need to appreciate the importance of quality and reliability. • Need professional standards, discipline, and bodies. • Should be held accountable for our actions. (c) Ian Davis
Is software development engineering? • NO • Not concerned with designing within tolerances • Code is either right or wrong (ie. Maths) • Limited/questionable concern with reuse of code • Not building ‘n’ of the same. Each project is new and unique. • Cookbook for algorithms, but not the project. (c) Ian Davis
Acid tests • Which of the development goals are more achievable using engineering principals? • Can software development be a set of well defined manageable discrete logical steps? • When is a picture/design/essay worth 1000 lines of code? • When does the theory encourage needless bureaucratic displacement activities? (c) Ian Davis
The basic issues • Get it right the first time, that’s the main thing • Getting it right at the end doesn’t fly • So how do you avoid getting it wrong? • Plan to throw your first attempt away - you will anyway • If you plan to throw your first attempt away you will throw at least two attempts away (c) Ian Davis
Software for profit • You can summon spirits from the deep • But will they come when you call?? • Investment issues (Can you support the project) • Marketing issues (Can you sell the project) • Leading edge Technology (Bleeding edge) • Competitive Risks (Future knowns / unknowns) • Customer Adoption (Market feedback) • Corporate Persistence (Start when young) • Team Disillusionment (Lot of early punishment) • Swimming with sharks (Risk of being cheated) (c) Ian Davis