Unhappy with today? Design tomorrow. CS361 Software Engineering I http://www.flickr.com/photos/bespoke/2692422909/ OUTLINE • • • • • Nature of software systems. Challenges in developing software. Successful software systems. Reasons for failure How to improve /design better Nature of software systems • Ubiquitous: • All domains: business, science, engineering : touching all aspects of life • Simple/complex • Internal use within organization (payroll) /public use (railway reservation) • Single /distributed/real-time/or just an information providing system.. Poverty http://www.flickr.com/photos/uncultured/1816486020/ Reducing poverty http://www.kiva.org with software Addiction http://www.flickr.com/photos/fixe/2846866094/ Supporting counseling http://cf.polarishealth.com/demo/start_demo.html with software Natural Disaster http://www.flickr.com/photos/tidewatermuse/38963406/in/set-866494/ Locating disaster victims http://www.publicpeoplelocator.com/ with software Pollution http://www.flickr.com/photos/virgomerry/86976318/ Reducing energy consumption http://www.fielddiagnostics.com/serviceassistant.cfm with software Repression http://www.flickr.com/photos/arasmus/3629119935/ Fomenting revolution http://www.time.com/time/world/article/0,8599,1905125,00.html with software Engineering is… Solving real-world problems … … without making the world worse … … and without incurring excessive costs. Software engineering is doing all that by creating software. What is software engineering? • Software engineering is a profession dedicated to designing, implementing, and modifying software so that it is of higher quality, more affordable, maintainable, and faster to build. Challenges in developing software • Effort intensive: planning , designing, maintaining • High cost • Long development time • Changing requirements of users • Risk of failure : user not accepting solution, performance, maintainability. Note: Its not like writing a program its no throw away: long duration – complex. Successful software systems • Software development projects are not always successful due to various reasons discussed further • When is it successful • Development completed • Useful, Usable, Used • Cost effective and maintainable (long life) Reasons for failure • • • • • Schedule slippage Cost overruns Doesn’t solve users problems Poor quality Not maintainable… Reasons for failure • Ad-hoc approach to software development : doesn’t work that way for large projects. • No planning : no deadlines • Deliverables to users not identified • Poor understanding of user requirements Reasons for failure • No control or review: committing resources , cost and time – need to review and control. • Technical incompetence: need to be in par of technology • Poor understanding of cost and effort involved in software projects What is the difference between good software and great software? The quality attributes of great software: • Reliability • Testability • Efficiency • Flexibility • Integrity • Portability • Usability • Reusability • Maintainability • Interoperability Engineering approach • Engineering a solution: we must go through a cycle of defining what we need to build. • Design-develop cycle must be followed keeping the following in mind: Specifications Cost effective Good quality maintainable Software engineering Requirements Design Implementation Testing System Delivery Software engineering is a team effort. Requirements Design Implementation Testing System Delivery Analyst Designer Programmer Tester Trainer How do you create great software? • Professionalism – Character – Teamwork – Planning – Risk management • Technical skills – Design – Implementation – Quality control All of these are necessary. Not a single one is optional. All will be practiced in this course. Course Objectives At the completion of the course, students will be able to... • Select the most appropriate software process model to use in a particular situation • Synthesize requirements for a realistic software system and write a requirements specification document • Produce professional-quality software-related documents • Model system requirements using one or more semi-formal notations such as UML, dataflow diagrams, entity-relationship diagrams, or state diagrams • Design software systems at an architectural level and at lower levels, using one or more techniques, such as object-oriented design or agile methods, and express these designs in design specification documents • Validate designs and adjust the specification or design as necessary • Describe several methods of estimating the cost and developing a schedule for a programming project • Participate effectively in a team environment Course Objectives To train you in... • • • • • • • • process: a sequence of activities intended to design and produce software requirements: a description of what software should do and should be documents: representations of requirements, designs, and systems notations: the rules for what those documents should look like design: a description of something that could be created validate: making sure that something is what it should be cost and schedule: the amount of money and time expended on creating a system team: people striving toward a common goal Basic Course Information Shalini Shamasunder Lectures: Mon – Fri 4pm-4:50pm Office hours: Book: Software Engineering, 4th Edition by Pfleeger & Atlee Exams will be based on lectures and on readings that will be assigned. Homework: usually due electronically through TEACH. Course Outline 1. You each draft a vision… a system that you would like to see. 2. We get you organized into teams, 1 vision per team. 3. Each team does homeworks to design the envisioned system. 4. Each person does a midterm exam. 5. 6. 7. 8. You each update your vision. You gather all the requirements and come up with a system. Each team does a final presentation on their system. Each person does a final exam. Assignment 1: vision statement a) Your Vision Statement is a document describing a software system that you believe would improve our world. b) You will not be graded on your Vision Statement. However, all the students will get to vote on which Vision Statements would be most interesting to use for class projects this term, and the authors of the most popular Vision Statements will receive extra credit c) You will never have to actually implement your proposed system. So dream big! But on the other hand, you need to imagine a system that probably could be built, if you had infinite time and money. So don't propose a system that works based on "magic." You need to have at least some idea of how the system might be constructed. Remember that if you propose a system that can't possibly be designed, then nobody is going to vote for your idea. • • • • • • For your first Vision Statement, answer the following questions: What world problem are you concerned about? Why is this problem important? What aspect of this problem seems particularly important to you? How could a new software system help to solve this aspect of the problem? Why do you think that this idea will make a big impact on the world? Make sure to site the sources if you used any. Where do you go from here? Use TEACH to submit your vision statement by Thursday Each one of you will read your vision statements out in class and explain your idea. You’ll vote on visions this Friday and the choices will be made on what is good. I will then put you in teams over the weekend.