CSCI 201: Software Development

Prof. David Wilczynski

General Information

Course Overview

Prerequisites. CSCI 200.
It is expected that you already know how to do "object-oriented" programming using C++ and Java.

Software development is about building applications that run on computers. It is much more than algorithm design, selecting a programming language, or coding. Those are important, but for larger applications we need a larger perspective, or system view. And we must worry more about the creation process, often called software engineering.

You will be taught about writing code that is part of a system by immersing you into existing bodies of code. The approach is more like mentoring than teaching. You will be asked to enhance existing projects. The result is to teach you about Software Development in the way you will encounter it in industry. We will cover several theoretical topics, but always as it applies to the systems you are working on. The initial system you will work on is a concurrent application with an animation written in Java.

Then in the second half of the course you will be working as teams to solve a brand new problem. You will have to figure out requirements, do a design, and implement it as a team. You will be using modern tools to help manage the process.

Major Topics

  1. Concurrent Programming (using an agent methodology and messaging)
  2. Software Engineering Principles (requirements, interaction diagrams, design)
  3. Operating System Principles (processes, threads, address spaces)
  4. Concurrency (shared data, critical sections, semaphores, monitors)
  5. Unit Testing (refactoring, using JUnit)
  6. Working on Teams (eXtreme Programming, pair programming, team ethics)
  7. Using Team Oriented-Tools (wiki, subversion software version control)
  8. Team project in conjunction with CSCI 200.

Materials

·        Website: http://www-scf.usc.edu/~csci201/

·        Materials on Website:

o       The class topics: CSCI201Curriculum.htm

o       A guide to agents: AgentRoadmap.htm

We won't be covering all the topics in those documents. All reading assignments and code downloads are given at Lectures/Lab . The date shown there is the date a reading should be done by. There is a lot of reading, but you are encouraged to skim where appropriate.

Assignments

Programming assignments are graded on thorough testing, documentation, and style, as well as correctness. All work to be submitted for the class is to be done individually unless an assignment specifies otherwise.

Grading 

v3.0 and v3.1: 25%

2 midterms: 50% (25% each)

Team Programming Project: 25%

 

A = 92%      A- = 90%

B+ = 88%    B = 82%      B- = 80%

C+ = 78%   C = 72%      C- = 70%

Exams will be scaled to match these ranges.

Extra credit may be available on assignments for use in deciding borderline cases.   

Course Outcomes

Below are the course outcomes we expect you to have at the end of the course.

i.   The ability to understand the software engineering in terms of requirements, design, and implementation.

ii.   An understanding of  how to use interaction diagrams to help define requirements

iii.   The ability to produce a software design based on requirements.

iv.   The ability to produce software from a design.

v.   The ability to unit test a module.

vi.   An understanding of concurrency and how it works in computer operating systems.

vii.   The ability to write multi-threaded programs and correctly solve a mutual exclusion problems.

viii.   The ability to use semaphores to solve synchronization problems.

ix.   The ability to use messaging as a communication method.

x.    The ability to refactor code in order to capture similarities and abstractions

xi.   The ability to apply a software engineering process to a large software project

xii.    The ability to work effectively on a team

xiii.   An understanding of the ethical issues in working within a group.

xiv. The ability to communicate via team meetings, presentations, etc.

ABET Program Outcomes

These are the outcomes you are expected to have when you have finished your degree:

                      

a)      An ability to apply knowledge of computing and mathematics appropriate to the discipline;

b)      An ability to analyze a problem, and identify and define the computing requirements appropriate to its solution;

c)      An ability to design, implement and evaluate a computer-based system, process, component, or program to meet desired needs;

d)      An ability to function effectively on teams to accomplish a common goal;

e)  An understanding of professional, ethical, legal, security, and social issues and responsibilities;

f)        An ability to communicate effectively with a range of audiences;

g)  An ability to analyze the local and global impact of computing on individuals, organizations and society;

h)      Recognition of the need for, and an ability to engage in, continuing professional development;

i)        An ability to use current techniques, skills, and tools necessary for computing practices.

j)        An ability to apply mathematical foundations, algorithmic principles, and computer science theory in the modeling and design of computer-based systems in a way that demonstrates comprehension of the tradeoffs involved in design choices;

k)      An ability to apply design and development principles in the construction of software systems of varying complexity.

 

These outcomes are also posted at on the CSCI website. http://www.cs.usc.edu/current/undergrad/ProgramOutcomes.pdf

         


Last modified November 23, 2009 by David Wilczynski, dwilczyn@usc.edu