CS302 Study Guide

Unit 1: Introduction to Software Engineering

1a. Explain software engineering and what software engineers do

  • Why study software engineering?
  • Are software engineering, computer science, and other related disciplines, such as computer engineering or information technology, names for the same topics?

We want to study software so that we can write software programs to solve problems or perform useful tasks. Computer Science helps us understand software, while software engineering applies that understanding to developing software systems to solve problems or perform useful tasks. Software engineering also helps us understand the benefits and risks of using software systems. It is changing the scale, scope, and access speed of information – to Big Data, the world, to fractions of a second. The introduction software engineering video illustrates the development of a software solution for a useful task. Software is ubiquitous in our daily lives and the control of our devices – it runs our phones, televisions and entertainment devices, kitchen appliances, medical equipment, cars, airplanes, and defense equipment. It transforms our society, individual and group interactions, business operations, news, government, and health services.

Computer science is the study of algorithms. Computer engineering is the study of hardware devices that can execute algorithms. Information technology and software engineering share techniques, methods, tools, and processes. Software engineering uses project management to plan, monitor, and control projects for software life-cycle activities. Software engineering is engineering and computer science oriented, whereas information technology is project management and technology-oriented. Information technology focuses on the operation and application of software systems.

To review, see Introduction to Software Engineering.


1b. Identify the differences between software engineering, computer science, and computer engineering

  • Are software engineering and computer science the same?
  • What do Software Engineers do?
  • What artifacts or products do software engineers create?
  • How do software engineers create them?

Computer Science and Software Engineering overlap topically but differ in emphasis. In software engineering, the focus is on applying computer science to solving useful problems. It assumes we have background knowledge of software. In software engineering, we study the processes for creating software to solve specific problems or perform tasks, the characteristics of software that contribute to a good solution, the description of problems, and software methodologies that guide the efficient and effective development of quality software.

Every discipline is an evolving body of knowledge directed at a fundamental goal. A body of knowledge consists of concepts, principles, and models, particularly for science and engineering disciplines. The Software Engineering body of knowledge aims to develop and maintain useful and needed software systems efficiently and effectively. Software engineers apply this knowledge to achieve that goal.

Software engineers create software systems by applying the Software Engineering body of knowledge to develop a clear description of software needs, called the software requirements, and a series of related software products, including a requirements specification, software design, software implementation, and software tests, and the completed software system.

The artifacts and products are the requirements specification (specification of "what"), design (specification of "what" components and structures comprise the system and "how" the system shall perform), code/implementation (specification of "how" each component shall perform), integration/testing (specification of "how" the system performs).

To create these artifacts and products, software engineers perform a series of phased activities, called the Software Development Life-Cycle (SDLC), that transform the requirements into a software design, activities that alter the design into software code, and activities that change the code into an integrated and verified functional maintainable software system. A software engineer performs these activities as a team member and may take on several technical and management roles. Each phase activity produces an SDLC artifact, using a representation supporting a model to build the desired software product and system. A representation is a technical narrative, diagram, mathematical specification, or programming language procedure that describes the structure of the system and its operation. Each model comprises processes, procedures, methodologies, tools, and techniques. This course discusses three types of models: data-oriented, process-oriented, and object-oriented.

To review, see Fundamentals of Software Engineering.


1c. Categorize software by characteristics and types

  • Is software engineering another term for software development?
  • Why categorize software?

Software engineering includes software development and other parts of the software life-cycle: defining the problem or task, organizing and managing the resources for efficient and effective software development, and maintaining software products over the life-cycle. It also includes integrating organizational, business, project, and personnel goals, working in teams, communicating with stakeholders, and building and using tools to support software processes. Many of these activities were motivated by the issues of the Software Crisis from 1965-1985. These give a glimpse of the past, current, and future of software engineering.

To address efficiency and effectiveness, we define software categories and terms that help us understand the problems and tasks requiring performance (the problem space). Additionally, as there are typically many software solutions, we identify the characteristics and attributes that describe a desired software system (the solution space). In general, problems can be familiar or unfamiliar and unprecedented, solvable or unsolvable by software; solutions can have limited scale, scope, processing, and access time or involve significant risk.

To review, see The History of Software and Fundamentals of Software Engineering.


1d. Describe the attributes of good software

  • How is software quality determined?

Software Engineering addresses both the problem and the solution. We actively seek effective solutions that resolve problems, determine user needs, and maintain high quality commensurate with the importance of the problem or task. We actively define quality as meeting the satisfaction of significant stakeholders' needs, including cost, schedule, functionality, and technology. We document these needs in a Requirements Specification. Some software attributes, like "user-friendliness" and reliability, are quantitative and measurable, while others are qualitative and not easily measured. Attributes actively interrelate in various ways; consider integrity and reliability or maintainability and testability. Review the language used to help us understand software quality by addressing factors contributing to stakeholders' expectations and satisfaction.

To review, see Software Quality.


1e. Explain the code of ethics used in the professional practice of software engineering

  • Why does software engineering have a code of ethics for professional practice?

Software engineering activities involve interaction with other members of a project team, with other internal groups, and with external organizations. We must actively safeguard principles, including privacy, confidentiality, and ownership rights of others, and conduct interactions professionally to build and maintain productive and pleasant working relationships. Moreover, software engineers make decisions that can impact others, the software development's success, and the software's operation after deployment. Those decisions affect the software's overall life-cycle phases" cost, schedule, functionality, and quality. It involves a code of ethics, which includes ethical principles, professional responsibilities, and organizational imperatives.

To review, see Ethics and Professional Practices.


Unit 1 Vocabulary

This vocabulary list includes terms you must know to complete the final exam successfully.

  • body of knowledge
  • code of ethics
  • computer engineering
  • computer science
  • model
  • quality
  • representation
  • Requirements Specification
  • Software Development Life-Cycle (SDLC)
  • software engineering