www.capspace.org (01/17/2015) Software Engineering Transfer Degree This program of study is designed for associate-degree students intending to transfer into baccalaureate programs awarding software engineering degrees. This software engineering curriculum is closely aligned with the computer science transfer degree program and shares a significant amount of coursework. Given that software engineering is built upon the foundations of both computer science and engineering, a software engineering curriculum can be approached from either a computer science-first or software engineering-first perspective; there clearly is merit in both approaches. While some suggest that the engineering-first approach better ensures that students develop a proper sense of the field in the context of engineering, the computer science-first approach is much more pragmatic at two-year colleges. Software engineering spans the entire software lifecycle - it involves creating high-quality, reliable programs in a systematic, controlled, and efficient manner using formal methods for specification, evaluation, analysis and design, implementation, testing and maintenance. Many software products are among the most complex of man-made systems, requiring software development techniques and processes that successfully scale to large applications which satisfy timing, size, and security requirements all within acceptable timeframes and budgets. For these reasons, software engineering requires both the analytical and descriptive tools developed in computer science and the rigor that the engineering disciplines bring to the reliability and trustworthiness of the systems that software developers design and implement while working cohesively in a team environment. In particular, the field of software engineering: - Must be viewed as a discipline with stronger ties to computer science than it has to other engineering fields. - Must share common characteristics with other engineering disciplines, including quantitative measurement, structured decision making, effective use of tools, and reusable software components. - Must apply engineering methods and practices to the development of software, with special emphasis on the development of large software systems. - Must integrate the principles of mathematics and computer science with engineering methodologies to create extensible software. - Must include secure code standards and quality control concepts of manufacturing process design. - Must emphasize communication skills, teamwork skills, and professional principles and best practices. The mathematics of discrete structures underlies all computing fields, including software engineering, and is core to the software engineering curriculum. This course can be meaningfully supplemented by an additional course devoted to statistics and empirical methods; not dissimilar from a statistics course offered frequently in the two-year college setting, such a course may be necessary for the upper division software engineering curriculum at some transfer institutions. It should also be noted that in order to fulfill articulation agreements with some transfer institutions students may also need to complete a more complete calculus sequence (or additionally, linear algebra and/or differential equations). Some two-year colleges offer introductory engineering courses, providing an overview of the many individual disciplines constituting the world of engineering. These courses often engage students in stimulating activities that peak their interests and set the stage for career choices in such fields. Students pursuing software engineering degree programs would strengthen their insights into engineering by completing such coursework. In their upper division work, students will focus their emerging software engineering skills in a particular application area of interest to them. The foundation for that selection may be laid in various elective courses that students pursue in the lower division. These could include courses in business and finance; biology and health sciences; mathematics and statistics; and information technology. Effective oral and written communications abilities are of critical importance to software engineering professionals; therefore, students
should be required to complete communications courses as part of this degree program. These skills must be identified, developed, nurtured and incorporated throughout a software engineering curriculum. Students must master effective writing, speaking, and listening abilities, and then consistently demonstrate those talents in a variety of settings, including formal and informal, large group and one-on-one, technical and non-technical, point and counter-point. Professional software engineers have a responsibility to society and their work carries significant liabilities. Consequently, software engineers must conduct themselves in an ethical and professional manner. The preamble to the Software Engineering Code of Ethics and Professional Practice [ACM 1999] states: "Because of their roles in developing software systems, software engineers have significant opportunities to do good or cause harm, to enable others to do good or cause harm, or to influence others to do good or cause harm. To ensure, as much as possible, that their efforts will be used for good, software engineers must commit themselves to making software engineering a beneficial and respected profession. In accordance with that commitment, software engineers shall adhere to the following Code of Ethics and Professional Practice." Hence, instructors must ensure that the software engineering curriculum forces students to become familiar with the Code, and engages them in discussions and activities that emphasize the eight principles of the Code. Curricular Reports 2004 ACM Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering Computing Curricula 2005: Guidelines for Associate-Degree Transfer Curriculum in Software Engineering Software Engineering Institute: Software Assurance Curriculum Project: Volume IV: Community College Education Program Outcomes and Supporting Course Learning Outcomes Program Outcome Group: Communication and Interpersonal Skills An ability to function effectively as a member of a multidisciplinary team to accomplish common goals. An ability to read and interpret technical information, as well as listen effectively to, communicate orally with, and write clearly for a wide range of audiences. There are currently no course learning outcomes in support of this program outcome group. Program Outcome Group: Critical Thinking, Problem Solving, and Theoretical Foundations An ability to analyze a problem and craft an appropriate algorithmic and/or engineering solution. An ability to apply knowledge of computing and mathematics appropriate to the discipline. An ability to design a secure system, component, or process to meet desired needs within realistic constraints such as economic, environmental, social, political, ethical, health and safety, manufacturability, and sustainability. An ability to interpret data, think critically and apply the scientific method. Calculus I (Core) (Gen Ed Requirement) Apply fundamental theorems and rules of Calculus to differentiate and integrate algebraic, trigonometric, inverse trigonometric and transcendental functions Apply fundamental theorems and rules of Calculus to evaluate limits and analyze the continuity of various functions Apply fundamental theorems and rules of differentiation to solve problems that model real-world situations Construct symbolic models of applied problems describedin words
Use fundamental concepts of Calculus to construct graphs of polynomial, rational and exponential functions Computer Science I (Core) Apply secure coding techniques to objectoriented programming solutions. Apply the program development process to problems that are solved using fundamental programming constructs and predefined data structures. Compare and contrast the primitive data types of a programming language; describe how each is stored in memory; and identify the criteria for selection. Decompose a program into subtasks and use parameter passing to exchange information between the subparts. Describe the language translation phases of compiling, interpreting, linking and executing, and differentiate the error conditions associated with each phase. Differentiate between the objectoriented, structured, and functional programming methodologies. Produce algorithms for solving simple problems and trace the execution of computer programs. Computer Science II (Core) Analyze the execution of searching and sorting algorithms. Construct multiplefile or multiplemodule programming solutions that use class hierarchies, inheritance, and polymorphism to reuse existing design and code. Construct object oriented programming solutions for reuse, using ADTs that incorporate encapsulation, data abstraction, and information hiding. Create programming solutions that use data structures and existing libraries. Design and develop secure and faulttolerant programs that mitigate potential security vulnerabilities. Produce graphical user interfaces that incorporate simple color models and handle events. Verify program correctness through the development of sound test plans and the implementation of comprehensive test cases. Computer Science III (Core) Analyze the efficiency of recursive algorithms. Assess the appropriateness of using recursion to solve a given problem. Compare and contrast a range of searching and sorting algorithms and analyze time and space efficiencies. Create effective, efficient and secure software, reflecting standard principles of software engineering and software assurance. Design and construct programming solutions using a variety of recursive techniques. Design and develop reusable software using appropriate data structures and templates. Use standard analysis and design techniques to produce a team-developed, mediumsized, secure software application that is fully implemented and formally tested. Discrete Structures (Core) (Gen Ed Requirement) Apply mathematical induction and other techniques to prove mathematical results. Examine the logical validity of arguments and proofs as they apply to Boolean expressions. Illustrate the basic terminology and properties of graphs and trees. Perform binary and hexadecimal conversions of numbers. Perform computations using recursively defined functions and structures. Solve problems involving sets, relations, functions, and congruences. Use graphs and trees to solve problems algorithmically.
Use methods of combinatorics to solve counting problems. Introduction to Software Engineering(Core) Construct a preliminary investigative report for a proposed system that includes scheduling and plans for mitigating potential risks. Create effective, efficient and secure software, reflecting standard principles of software engineering and software assurance. Decompose complex systems using best practice object-oriented analysis and design tools and techniques Design and implement consistent and coherent user-centered interfaces that comply with UI standard practices Evaluate and test software system requirements that considers both validation and verification Use standard analysis and design techniques to produce a team-developed, mediumsized, secure software application that is fully implemented and formally tested. Program Outcome Group: Professionalism, Ethics, Societal Awareness and Global Perspective An ability to analyze the global impact of software solutions on individuals, organizations, and society. An ability to demonstrate social awareness, respect for privacy and responsible conduct. An ability to engage in continuous learning as well as research and assess new ideas and information to provide the capabilities for lifelong learning. An ability to exhibit professional, legal, and ethical behavior. Computer Science I (Core) Choose professional behavior in response to ethical issues inherent in computing. Computer Science II (Core) Discuss significant trends and societal impacts related to computing, software, and the Internet. Computer Science III (Core) Practice the tenets of ethics and professional behavior promoted by computing societies; accept the professional responsibilities and liabilities associated with software development. Introduction to Software Engineering(Core) Practice the tenets of ethics and professional behavior promoted by computing societies; accept the professional responsibilities and liabilities associated with software development. Program Course Sequence Year one, semester one Computer Science I (Core)
Year one, semester two Computer Science II (Core) Mathematics Course Discrete Structures (Core)(Gen Ed Requirement) Year two, semester one Computer Science III (Core) Mathematics Course Calculus I (Core)(Gen Ed Requirement) Year two, semester two Introduction to Software Engineering (Core)