Principles of Software Development CS-300 Fall 2005 Supreeth Venkataraman.

Slides:



Advertisements
Similar presentations
Testing Relational Database
Advertisements

Problem Solving and Algorithm Design
Extreme Programming Alexander Kanavin Lappeenranta University of Technology.
Course Web Site – Also linked from Blackboard Course Materials – Excel Tutorials – Access Tutorials – PPT.
1 ICS102: Introduction To Computing King Fahd University of Petroleum & Minerals College of Computer Science & Engineering Information & Computer Science.
101.  Computers DO NOT think for themselves. For them to do anything they need to be told what to do.  Simply put computer programming is when you tell.
May 2, May 2, 2015May 2, 2015May 2, 2015 Azusa, CA Sheldon X. Liang Ph. D. Software Engineering in CS at APU Azusa Pacific University, Azusa, CA.
2-May-15 GUI Design. 2 HMI design There are entire college courses taught on HMI (Human-Machine Interface) design This is just a very brief presentation.
Algorithms and Problem Solving-1 Algorithms and Problem Solving.
Design - Architecture CS-300 Fall 2005 Supreeth Venkataraman.
CS350/550 Software Engineering Lecture 1. Class Work The main part of the class is a practical software engineering project, in teams of 3-5 people There.
Applied Software Project Management 1 Introduction Dr. Mengxia Zhu Computer Science Department Southern Illinois University Carbondale.
Introduction to Software Engineering CS-300 Fall 2005 Supreeth Venkataraman.
Introduction SWE 619. Why Is Building Good Software Hard? Large software systems enormously complex  Millions of “moving parts” People expect software.
Introduction to Systems Analysis and Design Trisha Cummings.
Introduction to Programming (in C++) Conclusions Jordi Cortadella, Ricard Gavaldà, Fernando Orejas Dept. of Computer Science, UPC.
Lecture 18 Page 1 CS 111 Online Design Principles for Secure Systems Economy Complete mediation Open design Separation of privileges Least privilege Least.
Abstraction IS 101Y/CMSC 101 Computational Thinking and Design Tuesday, September 17, 2013 Carolyn Seaman University of Maryland, Baltimore County.
Testing. Definition From the dictionary- the means by which the presence, quality, or genuineness of anything is determined; a means of trial. For software.
Chapter 8: Systems analysis and design
CSCI-383 Object-Oriented Programming & Design Lecture 4.
Team Skill 6: Building the Right System From Use Cases to Implementation (25)
Instructor: Tasneem Darwish1 University of Palestine Faculty of Applied Engineering and Urban Planning Software Engineering Department Object Oriented.
Coming up: Software Engineering: A Practitioner’s Approach, 6/e Chapter 5 Practice: A Generic View copyright © 1996, 2001, 2005 R.S. Pressman & Associates,
CSE 308 Software Engineering Software Engineering Strategies.
CS 1308 Computer Literacy and The Internet Software.
Practice and Evaluation. Practice Develop a java class called: SumCalculator.java which computes a sum of all integer from 1 to 100 and displays the result.
Major objective of this course is: Design and analysis of modern algorithms Different variants Accuracy Efficiency Comparing efficiencies Motivation thinking.
1 Introduction to Software Engineering Lecture 1.
CS 111 – Nov. 22 Chapter 7 Software engineering Systems analysis Commitment –Please read Section 7.4 (only pp ), Sections –Homework #2.
Systems Life Cycle. Know the elements of the system that are created Understand the need for thorough testing Be able to describe the different tests.
Software Engineering Saeed Akhtar The University of Lahore Lecture 6 Originally shared for: mashhoood.webs.com.
Chapter 1 Program design Objectives To describe the steps in the program development process To introduce the current program design methodology To introduce.
CS Data Structures I Chapter 2 Principles of Programming & Software Engineering.
Software Engineering Principles. SE Principles Principles are statements describing desirable properties of the product and process.
Model View Controller A Pattern that Many People Think They Understand, But Has A Couple Meanings.
OOAD Unit – I OBJECT-ORIENTED ANALYSIS AND DESIGN With applications
1 Software Engineering: A Practitioner’s Approach, 6/e Chapter 5 Practice: A Generic View Software Engineering: A Practitioner’s Approach, 6/e Chapter.
1 CSCD 326 Data Structures I Software Design. 2 The Software Life Cycle 1. Specification 2. Design 3. Risk Analysis 4. Verification 5. Coding 6. Testing.
1 CS161 Introduction to Computer Science Topic #9.
Algebra Simplifying and collecting like terms. Before we get started! Believe it or not algebra is a fairly easy concept to deal with – you just need.
Computer Science, Algorithms, Abstractions, & Information CSC 2001.
WATERFALL DEVELOPMENT MODEL. Waterfall model is LINEAR development lifecycle. This means each phase must be completed before moving onto the next!!! WHAT.
CS 1120: Computer Science II Software Life Cycle Slides courtesy of: Prof. Ajay Gupta and Prof. James Yang (format and other minor modifications by by.
Software Design Chapter 11. Purposes of Design Design transforms the specification into a design. The end purpose of the design is to produce detail and.
Winter 2011SEG Chapter 11 Chapter 1 (Part 1) Review from previous courses Subject 1: The Software Development Process.
Or how to work smarter when building solutions.  2:30 – 3:30 Mondays – focus on problem solving (with some terminology thrown in upon occasion)  All.
Data Structure Introduction Dr. Bernard Chen Ph.D. University of Central Arkansas Fall 2010.
CSI 1340 Introduction to Computer Science II Chapter 1 Software Engineering Principles.
Lecture 4 Page 1 CS 111 Online Modularity and Virtualization CS 111 On-Line MS Program Operating Systems Peter Reiher.
Software Engineering Principles Practical Advice and Steps for Managing Your Project.
Evaluating Requirements
Software Quality Assurance and Testing Fazal Rehman Shamil.
Principles of Software Development Chapter 2. Intellectual control Maintaining control of the concept in one’s mind. Complexity makes it difficult. Use.
The Last Lecture CS 5010 Program Design Paradigms "Bootcamp" Lesson © Mitchell Wand, This work is licensed under a Creative Commons Attribution-NonCommercial.
Observing the Current System Benefits Can see how the system actually works in practice Can ask people to explain what they are doing – to gain a clear.
CSCI N201 Programming Concepts and Database 2 - STAIR Lingma Acheson Department of Computer and Information Science, IUPUI.
Algorithms and Flowcharts
 System Requirement Specification and System Planning.
CSC 108H: Introduction to Computer Programming
C++ coding standard suggestion… Separate reasoning from action, in every block. Hi, this talk is to suggest a rule (or guideline) to simplify C++ code.
On the Criteria to Be Used in Decomposing Systems into Modules
Engineering and Debugging an App Chapter 15
Objective of This Course
Software life cycle models
Theory of Computation Turing Machines.
Baisc Of Software Testing
CS310 Software Engineering Lecturer Dr.Doaa Sami
Unit 1: Principles of Computer Science
Presentation transcript:

Principles of Software Development CS-300 Fall 2005 Supreeth Venkataraman

CS-300 Fall 2005 Supreeth Venkataraman 2 Introduction These are general guiding principles for the development of software. These principles are extremely powerful in the real world. These principles were not formulated in a day, but through years of experience. These principles find applications in almost all facets of computer science.

CS-300 Fall 2005 Supreeth Venkataraman 3 Principle 1 – Intellectual Control Simple problems can usually be solved directly by programming as they are easy to keep track of in one’s mind. Think about a very complex software system like the guidance system of an aircraft. Can such a system be coded directly?

CS-300 Fall 2005 Supreeth Venkataraman 4 Principle 1 – Intellectual Control If direct coding is used for such a system, the resulting product will most likely be wrong as the developer cannot visualize the entire system in mind. Intellectual control is the ability to be in control of all aspects of a problem. Intellectual control is hard because of the inherent complexity of software systems.

CS-300 Fall 2005 Supreeth Venkataraman 5 Principle 1 – Intellectual Control Loss of intellectual control leads to waste of valuable resources. In order to gain intellectual control, what needs to be done?

CS-300 Fall 2005 Supreeth Venkataraman 6 Principle 2 – Divide and Conquer To gain control of a very large and complex problem, break it up into manageable size chunks. Solve each small problem to the best extent. Combine the small solutions to make the final global solution. What can go wrong here?

CS-300 Fall 2005 Supreeth Venkataraman 7 Principle 2 – Divide and Conquer Independent Parts Each of the decomposed parts must be able to be solvable by itself without having to worry about the other parts. Thus each part must be self contained.

CS-300 Fall 2005 Supreeth Venkataraman 8 Principle 2 – Divide and Conquer The 7 “plus or minus” 2 rule It has been observed that humans can achieve intellectual control when dealing with five to nine different parts. Thus the decomposition of the original problem should not give rise to more than 9 independent parts. Of course, each sub-problem can be further divided into 5 – 9 parts.

CS-300 Fall 2005 Supreeth Venkataraman 9 Principle 2 – Divide and Conquer Hierarchies Many times, the initial decomposition of a problem will lead to sub-problems that themselves are extremely complex. These sub-problems have to be decomposed into smaller sub-sub-problems as well. In fact, all sub-problems have to be decomposed till we’re left with manageable pieces of the problem. This forms a hierarchical structure.

CS-300 Fall 2005 Supreeth Venkataraman 10 Principle 2 – Divide and Conquer

CS-300 Fall 2005 Supreeth Venkataraman 11 Principle 2 – Divide and Conquer Know when to stop It is easy to get carried away while decomposing a system. Too much decomposition leads to an unmanageable amount of small problems. Ultimately, the entire hierarchy must be manageable. Determining when to stop is a hard problem!!!

CS-300 Fall 2005 Supreeth Venkataraman 12 Principle 2 – Divide and Conquer The good thing about hierarchies is that they are extremely simple even though they may contain a large number of parts. The beauty of divide and conquer is that the human mind can be made to manage an extremely complicated problem through the process of careful decomposition.

CS-300 Fall 2005 Supreeth Venkataraman 13 Principle 3 – Identify the “Customers” The customer is the person who talked with the developers to make the requirements, and is the end-user of the system It is also a good practice to think that the customer for a particular phase is the subsequent phase. Think about the milestones we talked about. The design document is used by the coding phase, and thus the design document must be detailed enough so that working code can be “mechanically” written from it

CS-300 Fall 2005 Supreeth Venkataraman 14 Principle 4 – Fuzzy into Focus Abstraction is a good way to look at a problem at a high level. As the development progresses, we need to start adding more details to each sub-problem. Adding more details in a sensible way moves the project from the realm of fuzziness to a well focused detailed system. We can also say that software development transforms an abstraction into a concrete solution.

CS-300 Fall 2005 Supreeth Venkataraman 15 Principle 5 – Document It! The importance of this principle cannot be stressed enough! It is important to maintain detailed documentation of the systems being built in order to keep track of what has been accomplished. In other words, documentation is essential in order to attain intellectual control!

CS-300 Fall 2005 Supreeth Venkataraman 16 Principle 5 – Document It! Record it or it’s lost People have good ideas all the time. If these ideas are not recorded, they are lost. A classic example here is recording test cases during the initial phases to use on the program after coding. If such test cases are not recorded during development, how to determine good test cases during testing time? (Mostly we cant)

CS-300 Fall 2005 Supreeth Venkataraman 17 Principle 5 – Document It! Know what you’ve assumed Assumptions are used to limit a problem to a solvable domain (For example, it is assumed that there will be a maximum of 100 users using the local library system) Documenting assumptions helps in correcting any incorrect assumptions during reviews It also serves as a guide to removing confusion (Why doesn’t it work for 101 users? Got it! it is assumed that there are only 100 users)

CS-300 Fall 2005 Supreeth Venkataraman 18 Principle 5 – Document It! Traceability This concept relates phases of the development lifecycle. For example, if each test case in a test plan is labeled with a number from the requirements document, it is easy to see which requirements we are testing (especially if the test case came from the design document) What if we’re not able to trace back to the requirements?

CS-300 Fall 2005 Supreeth Venkataraman 19 Principle 5 – Document It! A (Document) place for everything and everything in its place How many times have we been told this while growing up? If there is a consensus about where information/documents will be stored, it becomes easier to locate them in case updates are needed. We don’t need people putting information wherever they please. The documents must be easily accessible for reading/writing/appending.

CS-300 Fall 2005 Supreeth Venkataraman 20 Principle 5 – Document It! Documentation Isn't a novel “The great novels are those that are just slightly obscure so that readers cannot exactly be sure what they mean” – Hamlet p. 41 The documentation should be Simple Unambiguous Non-redundant

CS-300 Fall 2005 Supreeth Venkataraman 21 Principle 6 – Input/Output is the essence of software Software transforms a set of inputs into a set of outputs All inputs and outputs must be identified early in the lifecycle Identify valid and invalid ranges of inputs Identify boundary values of inputs Identify important combinations of inputs and outputs

CS-300 Fall 2005 Supreeth Venkataraman 22 Principle 7 – Too much engineering is not a good thing Don’t try to be too smart If it ain’t broke don’t fix it The “creeping feature creature” Adding “surprise” features to delight the end user Don’t add anything more than absolutely necessary “It is not good engineering to deliver a luxury car when the end user wanted a basic truck”

CS-300 Fall 2005 Supreeth Venkataraman 23 Principle 8 – Expect to deal with change Change is inherent in software development Each time a defect is detected changes need to be made to the software Learning to deal with change (change management) is extremely important The most unpleasant change is when customers change their minds at a late stage of development Don’t slack off on making the change required.

CS-300 Fall 2005 Supreeth Venkataraman 24 Principle 9 – Reuse past work The beauty of software development is that components can be reused. For example, standard libraries and classes in most programming languages can be reused. Past work done well is golden One can even use components built in one project for another. Never throw away well done past work

CS-300 Fall 2005 Supreeth Venkataraman 25 Principle 9 – Reuse past work Create software so that reuse is possible Don’t reinvent the wheel If there exists a ready-made solution for your needs, don’t build it from scratch. Purchase the solution if it is really good. It will save you the trouble of developing it. You don’t want to (in general) develop your own operating system just because you don’t like windows do you?

CS-300 Fall 2005 Supreeth Venkataraman 26 Principle 10 –Take responsibility If a mistake has been made, don’t brush it under the carpet and hope that the problem will go away. Take responsibility and deal with the difficulties “Flaws in all software have their source in the development process. To have seen the process going wrong and done nothing is irresponsible”