Quick Navigation

Graduate Program

Systems Design and Analysis

Design and Analysis (also known as Software Engineering) is the discipline that addresses the question of how to develop software in the real world.  In the real world, software is developed by a team that is part of department that is developing software for a different group of people: the customers.

As a software professional, everything — even the most seemingly-pure technical tasks — you do is impacted by the fact that you are working with one set of people, that the systems will be used by a different group of people, and that the two groups — the builders and the customers — are profoundly, immensely, different.

As a result, being successful as a professional requires human and organization knowledge and skills, as well as technical knowledge and skills.  These two sets of knowledge and skills and their various interactions are the focus of the course work in this area.

Everyone who has studied computer science is familiar with the fact that in analyzing and working with a software system of any complexity, it is critical to be precise and systematic, and to have a good framework for representing the facts about the system. There are innumerable details to keep track of and many decisions to make as a designer or programmer. Forgetting or mis-handling any of them can lead to serious problems in the code.  Intuition and hand-waving are not sufficient, which is why the fields of analysis and design, whether function- or object-oriented, exist.  The same is true of analyzing and working with customers and their organizations: there are innumerable details, any of which can lead to serious problems or complete failure of the system or the project.  A significant portion of the course work in this area is devoted to expanding the students’ abilities to work with, understand, and describe client organizations and work, so that they can approach problems of working with clients with the same rigorous, systematic approach that is applied to the design and construction of software.

Examples of specific concepts and topics addressed in depth in this area include:

  • Describing the client organization — not just the data processes and objects — completely and in detail, including all the organizational processes, from the top down to specific processes in which the system is used and the organizational priorities and principles that govern the execution and choices of all those processes.
  • Getting good information from customers, who quite often have little idea what they want a system to do and may have only the most ill-formed picture of what they want from a system.
  • Working effectively with clients, including sophisticated techniques for stakeholder analysis and meeting design specifications in software projects.
  • Designing systems that will actually accomplish the agreed-on requirements.
  • Good and bad designs, and why they are good or bad.
  • Managing software projects and software teams, including estimation and scheduling and, more importantly, dealing with the near-universal fact of software schedule slips.
  • Software process improvement efforts and software process groups.
  • Effective software testing.

In summary, the most technically elegant software system will be a waste of time and resources to an organization if the system does not contribute to the organizations needs and goals.  There are far too many stories of multimillion-dollar systems that are developed and discarded because they did not fit the actual needs of the organization.

The field of design and analysis (or software engineering) is a systematic approach designed to avoid these disasters and thus is an invaluable part of the software developer’s education.

Currently, the Department of Computer Science offers the following two courses in the area of Design and Analysis:

  • CSCI 567 – Software Engineering
    Phases of the systems development life cycle and the tools used by the analyst in planning, specifying, and implementing a complex computer-based system. Related topics include documentation standards, interaction with users, and design of interfaces. Object-oriented design principles are included. Assignments include at least one major group project.

  • CSCI 663 – Systems Design and Analysis
    Design, implementation, and control of computer-based Computer Science systems. Topics include system and program specifications, language selections, forms and file design, maintenance and documentation requirements, and interface with computer users. The topic of working with customers to develop requirements receives particular emphasis.