Unit 1: Introduction to Software Engineering
When dependency on software and computers became more important, software grew in size and became a necessity for businesses and users worldwide. In the last 30 years, we have seen an unparalleled explosion in the amount of software produced and used by our modern society. There is a need to set concrete objectives (or functional requirements), predict necessary resources (like cost estimates) to attain those objectives, and manage customers' expectations. As you review the material in this unit, compare and contrast software engineering with computer science and information technology, and contrast them with STEM, an educational model and program that combines the closely related fields of science, technology, and mathematics. These disciplines are closely related and have some differences when applied to software. As you work through this unit, spend some time reviewing the software characteristics and the code of ethics used in the professional practice of software engineering.
Completing this unit should take you approximately 3 hours.
Upon successful completion of this unit, you will be able to:
- explain software engineering and what software engineers do;
- identify the differences between software engineering, computer science, and computer engineering;
- categorize software by characteristics and types;
- describe the attributes of good software; and
- explain the code of ethics used in the professional practice of software engineering.
1.1: An Overview of Software Engineering
If we look over the university departments and programs, we find disciplines generally categorized as science, engineering, business/management, or humanities. If software engineering is offered, it might be in electrical engineering, systems engineering, computer science, management, or professional development and extended learning programs. If it is not offered as a coherent course, its topics might be found in various courses, such as information systems, software development, information technology, mathematics, and more. The boundaries between software engineering and other disciplines are not distinct, and the topics of one discipline may intersect with those of another.
Watch this video of the first day of a software engineering course. The instructor spends the first half of the video exploring a haphazard way to develop a system for putting the class syllabi online. He then discusses some aspects of the systematic process to complete a course similar to this one, especially the Software Development Life Cycle (SDLC) projects in Unit 10. Two of these aspects are models and teams. Models are structures composed of objects representing a software system's development. The video mentions one model called the DOM (Document Object Model). The second aspect describes the performance of systematic processes by a project team, each member responsible for a defined technical or management role. In the video, the class is divided into teams of four students. The video also mentions several software tools for software development. The tools support or implement some of the activities of the SDLC. Stay calm, as this is not a programming course. You may find the 30-day free versions of software modeling useful if you have time to use them in Unit 3.
1.2: What Is Software Engineering?
As you read this article, pay attention to the trends section, which covers the period from 2000 to about 2020. As you proceed through this course, these items will appear as controversies and opportunities to evaluate other alternatives. Software engineering focuses on software development, utilizing processes and procedures enacted by teams or executed by machines, tools, and methods. As you read about trends, ask how they relate to and impact software engineering problems, development processes and procedures, team/role development activities, and application tools and methods. Software engineering processes and procedures include the SDLC, other models, and numerous activities.
This article separates computer science into six other categories, with software engineering being one of them. How is software engineering like computer science? How is software engineering different?
Each category is further described by a spider web diagram, showing the topics covered and the degree of emphasis on each topic. A comparison of computer science and software engineering shows the overlap and differences in topics and emphasis. It positions software engineering as a category of computer science. This categorization contrasts the STEM categorization of four main disciplines: science, technology, engineering, and math. Science discovers general principles and problem-solving techniques. Engineering uses those principles and techniques to develop solutions to problems. Technology uses practices and tools to deploy, operate, and maintain those solutions in practical applications. Both perspectives are helpful. At a higher level of abstraction, the STEM perspective shows that computer science and software engineering have fundamentally different processes. At a more detailed level of abstraction, the six degrees perspective shows the intersection and difference of topic coverages between computer science and software engineering and the other four disciplines.
1.3: Software Applications
As you read this article, consider the various types and classes of software. What are some of the crises and myths of software development? How did those indicate the need for software engineering?
1.4: Software Quality
Software engineers work with project team members with related or support roles, such as configuration management, software quality, and software measurement. Organizations and projects have policies, processes, procedures, practices, and tools, which we will collectively call "models", to apply their discipline support to software development and operation. The next sections discuss software quality. However, suppose the diverse roles and activities for software engineering have different models. How can we be assured that they will be consistent and compatible when used together on the same project? Consistency and compatibility of the models is the responsibility of the organization responsible for all projects, and system engineering is responsible for their integration on a project. Moreover, adherence to national and international standards and best practices for common models and tailoring of models contributes to consistency and compatibility.
In general, software quality is crucial in software engineering. Read this article and explore the various definitions of quality and the types of quality models. Notice the priority of quality factors and how software quality can be measured.
1.5: Software Engineering Code of Ethics and Professional Practices
Software engineering activities involve many decisions that impact stakeholders: customers, clients, users, project team members, other projects, the employer company, related companies, the public, the responsible software engineer(s) and project managers, organizations, and the Software Engineering profession. When a project has multiple goals and objectives, tradeoffs are often inevitable. For example, every project has cost, schedule, functionality, and quality goals. An increase in one can negatively impact others: increasing quality(positive impact on users) but can increase cost and schedule for the developer (negative impact).
If a software engineering decision involves a decision that has a significant positive impact on a stakeholder but a significant negative impact on another stakeholder, such as injury or harm to others, the decision is called an ethical dilemma. The ACM (Association of Computing Machinery) and the IEEE Computer Society have promulgated professional codes of ethics. Read this summary article that lists eight guiding principles. Today, with the evolution of computing and networking technology, the impact of software and computer engineering decisions can be global. The risk of loss of privacy, security breaches, false information, fake news, harm on social media, and social platform support of one side over others in controversial issues of society occur frequently. As technology evolves, relevant laws, controls, and adherence to ethical codes must also evolve. After reading this summary, think of ethical dilemmas that could result from ubiquitous AI applications and societal use of virtual reality.
Computing, in general, and software engineering, in particular, has the risk of causing harm to others and society. The ACM Code of Ethics and Professional Conduct highlights the important responsibilities this risk places on software developers, project managers, other project team members, users, stakeholders, instructors, and students. Starting with a policy that "the public good is always the primary consideration", it presents supporting principles and guidance for understanding and applying them.
Reflect on the ethical principles, professional responsibilities, and professional leadership principles. Which principles apply to you as students in this course and to the authors of this course? What software engineering student responsibilities can you infer from the Professional Responsibilities? What can you do in this course that will prepare and enable you to apply Professional Leadership Principles in the future? In your opinion, will compliance with the code ever be enforced? If so, when?
Unit 1 Assessment
- Receive a grade
Take this assessment to see how well you understood this unit.
- This assessment does not count towards your grade. It is just for practice!
- You will see the correct answers when you submit your answers. Use this to help you study for the final exam!
- You can take this assessment as many times as you want, whenever you want.