330 likes | 346 Views
Learn software engineering principles, tools, & skills in CS351 by Michael Oudshoorn & Denbigh Starkey. Gain coding proficiency & project experience for large systems development.
E N D
CS351 Software Engineering I Michael Oudshoorn and Denbigh Starkey
Introduction • This course is taught by Michael Oudshoorn and Denbigh Starkey. • Denbigh’s consulting times are advertised outside his door and are at www.cs.montana.edu/starkey/fall06sched.html • It is difficult for the Head of Department to set fixed office hours due to various meetings. • Don’t let the need for an appointment stop you from seeking help. Usually if you drop into the office and I’m in you’ll get seen immediately. • Both Denbigh and Michael have some travel commitments this semester – we will let you know about them before we are away so that you can plan around them. CS351 - Software Engineering (AY2007)
What is our background? • Denbigh has been in charge of software development for some large projects funded through grants. He has consulted to a local company to help them use tools as they moved from a PC-environment to a unix environment. He is currently engaged in some software development with a local company. • Michael has consulted to numerous companies in Australia, Asia and the US. This consulting includes teaching various aspects of Software Engineering to staff of these companies. He has also developed some software for the defence industry. • This class focuses on the personal skills needed to build large software systems. • Building the right system right! • We plan to pass as many of these skills as we can onto you through: • CS351 Software Engineering I (individual skills) • CS451 Software Engineering II (group skills and advanced topics) • CS460/461 Senior Design Project (year-long group-based project with an industrial partner – a chance to go through a complete development cycle) CS351 - Software Engineering (AY2007)
What is your background? • Prerequisites for the course are: • CS221 Data Structures • CS223 Advanced Data Structures and Algorithms • ENGL223 Technical Writing • It is also desirable, but not essential, that you have completed or are concurrently taking: • CS324 Programming Techniques • You will need to be proficient at coding and the use of data structures and algorithms. CS351 - Software Engineering (AY2007)
What is the subject all about? • CS351 examines software engineering in the small. • Software engineering in the small is those aspects of software engineering that you can individually perform to produce good high-quality software. The fine-detail of software engineering. • Software engineering in the large is those aspects of software engineering needed to design, develop and maintain large complex systems. These are the management tools and the group work that you participate in. The big-picture of software engineering. This is covered in CS451 Software Engineering II • We will discuss the skills needed to undertake software engineering in the small in lectures and you will get the chance to put them in practice through your assignments. • Software engineering often involves compromise between competing and conflicting requirements. It means building what the customer wants on-time and within budget. CS351 - Software Engineering (AY2007)
Objectives • This course aims to produce graduates that: • Understand the basic skills needed to produce high quality, correct and efficient software to meet the requirements specified by the customer. • Know the software lifecycle and appreciate the need for processes to produce complex software. • Understand software engineering tools such as: • The software lifecycle • UML • Design Patterns • Configuration management • Verification and validation • Standards • Debugging • Maintenance • Develop efficient and correct code. • To be able to work independently. • To be able to develop software that meets client requirements. CS351 - Software Engineering (AY2007)
Our hopes • By the time students finish this course they should have a good understanding of the basic skills needed by an individual to develop high-quality code. • Be able to put those skills to good use. • Be able to deliver code that is correct, efficient, well documented, easily maintained and of high quality while also delivering it on-time and within budget. • Be prepared to take CS451 Software Engineering II CS351 - Software Engineering (AY2007)
Course structure • The course consists of lectures, assignments, quizzes and exams. • The lectures will cover a wide variety of topics. • The assignments will focus on aspects covered in lectures and represent an opportunity for you to practice your skills in engineering high quality software. • There will be 4 quizzes, 3 projects and 2 essays. Each student needs to keep and maintain a journal (more on that soon). • There will be 1 mid-term exam and 1 final exam. • The assignments offer the opportunity to utilize knowledge you have gained in other subjects, especially those related to programming, data structures and algorithms. • Indeed your general knowledge of computer science will typically shape the design and implementation of the solution(s) you produce. CS351 - Software Engineering (AY2007)
Individual-based • This subject is focussed on individual skills. You will not be working as part of a team, although you may be cooperating with other students in the class. • The aim is to develop appropriate skills for you to develop high quality correct code. • In CS451 we focus on group skills and turn our attention to managing the software process. • At all times in CS351 and CS451, we expect you to behave in a professional and ethical manner. CS351 - Software Engineering (AY2007)
Assessment • Assessment is based on: • Essay (5%) • Assignment 1 (5%) • Assignment 2 (10%) • Assignment 3 (10%) • Journal and essay (5%) • Quizzes (10%) – 4 pop quizzes are planned • Midterm exam (25%) • Final exam (30%) • A serious attempt must be made at each component. • Both exams must be attempted. • At least 2 quizzes must be attempted • A reasonable attempt must be made at every assignment and essay. A journal must be kept and submitted at the end of the course. CS351 - Software Engineering (AY2007)
Resources available • Web pages found at www.cs.montana.edu/courses/351. • Visit the web pages often and check for updates. • You will find: • Lecture plan with links to the lecture slides and assignments (as they become available). • Past exam papers to help you with your study. • There are other resources which may be useful. This include the Software Engineering Body of Knowledge (SWEBOK) which is available at http://www.swebok.org/ CS351 - Software Engineering (AY2007)
Consulting help • There is no TA for this subject. You’ll need to see the instructors for help. • Like the real-world, you need to demonstrate a degree of self sufficiency and initiative. • We expect you to use various resources to help solve your own problems! • Read the textbook • Use the library • Use the internet (but not to download solutions – that would be regarded as inappropriate). • Talk to your peers • But remember to see us if you need help. CS351 - Software Engineering (AY2007)
Textbooks • There is one textbook which covers the majority of the material in the course. • Roger Pressman, “Software Engineering. A Practitioner’s Approach”, McGraw-Hill • We recommend the following as good books that cover the much (but not all) of the lecture material. • Ian Sommerville, “Software Engineering”, Addison-Wesley • Stephen Schach, “Classical and Object-Oriented Software Engineering”, McGraw-Hill • Shari Pfleeger, “Software Engineering. Theory and Practice”, Prentice-Hall • Erich Gamma et al, “Design Patterns. Elements of Reusable Object-Oriented Systems”, Addison-Wesley. CS351 - Software Engineering (AY2007)
Exam • The mid-term exam will be held approximately half way through the course. It will cover material seen up until that point. • The final exam will be held during the exam week. It will cover the whole of the course. • All exams may cover all material covered in this course up to that stage: • Lectures • Assignments • Readings • Discussions • Lecture attendance is strongly recommended. Note that the lecture slides made available on the web are merely the instructors notes – they are not a substitute for you taking your own notes during class, or reading textbooks, etc. CS351 - Software Engineering (AY2007)
Our expectations of you • Ask questions • Interact with the instructors • Use each other as a resource • Exchange ideas • Experiment • You should take notes in lectures – the slides are merely our notes and may sometimes be terse! CS351 - Software Engineering (AY2007)
Workload • This is a 3 credit course. Therefore it represents 20% of a typical full-time load of 15 credits. It should therefore occupy about 8 hours of your time each week. • Lectures occupy 3 hours/week, which leaves 5 hours/week on your project/assignments and study for this subject. • You should expect to spend about 120 hours on this course over the Fall semester. • Remember we are looking for quality software so you are likely to have to spend much more time testing and validating your software than you may have done in other subjects! Software correctness, efficiency, structure, quality and adherence to requirements form a major part of the assessment of any code you write. CS351 - Software Engineering (AY2007)
Deadlines • The assignments will have firm deadlines. • Significant grades are lost for being late – 20% of the available marks each day or part thereof. • Very much like a penalty clause in a contract. • Deadlines will be at a specific time and late penalties applies from 1 second past the deadline. The system clock on esus will be treated as the official clock for the course. • No excuses will be accepted – including machine failure, busy labs, … • Again, this is like the real-world. CS351 - Software Engineering (AY2007)
Equipment • While we will make every attempt in this course to allow you to develop the solutions to the assignments etc on your home PC, Mac, laptop, favorite operating system etc, remember that the final version that is submitted must run on the equipment and environment specified. If one is not specified, then it defaults to running on esus with the linux operating system and must be written in Java compliant with the compiler available on that machine at the time of submission. • As a result, if you develop your software on a different platform etc, you should plan to complete it early so that you have time to port it to the appropriate platform and test that it works as expected. CS351 - Software Engineering (AY2007)
Journal • Quality is an important part of any software system. To achieve that you have to know what you are doing well and what you are not doing well. • Keep a journal and observe what you do. • Record how long it takes to repair errors/bugs. • Observe when you introduced the error into the system. • Think about how you could improve to be: • More productive • More accurate. • More efficient. • Plan improvements and observe how well any changes work. CS351 - Software Engineering (AY2007)
Journal • Your journal should contain your notes, thoughts and observations relating to all software development undertaken during this course (ideally it should contain notes relating to all software development you do). • The journal should minimally contain: • Your software design. • Your thoughts regarding alternative implementation strategies (and why they are selected or rejected). • Notes on errors you make during the design, development, testing etc. These will be important later when you write the essay at the end of the semester. • Reflection should occur regularly throughout the semester and these notes should also be in your journal. CS351 - Software Engineering (AY2007)
Journal • Your journal is a professional document – it should contain enough information to show that you have followed best practices and have behaved in a professional and ethical manner. • You will need to hand in your journal along with the essay at the end of the semester. • Your journal should be a bound book and pages should not be removed. It should not be a collection of loose leaf pages. • Be prepared to try new things to improve your coding practice and observe what happens. The journal is a record of your activities including attempts to improve your performance (not all of which will necessarily lead to better performance). CS351 - Software Engineering (AY2007)
What is software engineering? • Software engineering is an engineering discipline which is concerned with all aspects of software production from the early stages of system specification through to maintaining a system after it has gone into use, and finally retiring a system after it is no longer useful. • There are 2 key phrases here: • Engineering discipline • All aspects of software production CS351 - Software Engineering (AY2007)
Engineering discipline • Engineers make things work! • They apply theories, methods and tools where they are appropriate but they use them selectively and always try to discover solutions to problems even when there are no applicable theories and methods to support them. • Engineers recognize that they have to work within organizational and financial constraints, so they look for solutions within those constraints. • Engineers often have to deal with changing requirements and adapt their solutions to fit. • This is a little different to what you may have experienced in earlier classes – we are not necessarily looking for the theoretically best solution, but rather an appropriate solution given the constraints that need to be satisfied. This is not an excuse for low quality code – you need to be prepared to justify your choices and these decisions and the various options that exist should be recorded in your journal. CS351 - Software Engineering (AY2007)
All aspects of software production • Software engineering is not just concerned with the technical processes of software development but also with activities such as project management and with the development of tools and theories to support software production. • This course will focus on those aspects of software engineering that are concerned with software development, while CS451 will look at the broader picture. CS351 - Software Engineering (AY2007)
Software engineering versus computer science • Computer science is concerned with the theories and methods which underlie computers and computer systems. • Software engineering is concerned with the practical problems of producing software. • Some knowledge of computer science is needed to practice software engineering. • Ideally, all of software engineering should be underpinned by theories of computer science, but in reality this is not always the case. • Software engineers must often use ad hoc approaches to develop the software. (Always be prepared to justify any decision/choice you make). • Elegant theories of computer science cannot always be applied to real, complex problems which require a software solution. CS351 - Software Engineering (AY2007)
Software engineering versus systems engineering • Computer systems engineering is concerned with all aspects of the development and evolution of complex systems where software plays a major role. • Systems engineering is concerned with hardware development, policy and process design and system deployment as well as software engineering. • System engineers are involved in specifying the system, defining its overall structure and then integrating the different parts to create the finished system. They are less concerned with the engineering of the system components (hardware, software etc). • Systems engineering is older than software engineering: • Complex industrial systems such as trains, chemical plants. • As the percentage of software in systems has increased, software engineering techniques are finding their way into systems engineering. CS351 - Software Engineering (AY2007)
Reliability Modifiability Maintainability Readability Testability Expandability Flexibility Portability Integrity Usability Reusability Interoperability Efficiency We expect that you develop code that provides all of these characteristics – sometimes they will be in conflict with each other. Careful analysis of the problem domain and the requirements of the system is necessary in order to make informed choices – compromise is an essential part of software engineering. Good software engineering characteristics CS351 - Software Engineering (AY2007)
Software Engineering isn’t CS351 - Software Engineering (AY2007)
Hardware costs CS351 - Software Engineering (AY2007)
Ideal software costs CS351 - Software Engineering (AY2007)
Real software costs CS351 - Software Engineering (AY2007)
Cost of error repair CS351 - Software Engineering (AY2007)