ACM CC2020 Learning Outcomes/Software Engineering Competencies



Section 1: Software Requirements 

  1. Identify and document software requirements by applying a known requirements elicitation technique in work sessions with stakeholders, using facilitative skills, as a contributing member of a requirements team.
  2. Analyze software requirements for consistency, completeness, and feasibility, and recommend improved requirements documentation, as a contributing member of a requirements team.
  3. Specify software requirements using standard specification formats and languages that have been selected for the project and be able to describe the requirements in an understandable way to non-experts such as end-users, other stakeholders, or administrative managers, as a contributing member of a requirements team.
  4. Verify and validate the requirements using standard techniques, including inspection, modeling, prototyping, and test case development, as a contributing member of a requirements team.
  5. Follow process and product management procedures that have been identified for the project, as a contributing member of the requirements engineering team.


Section 2: Software Design

  1. Present to business decision-makers architecturally significant requirements from a software requirements specification document.
  2. Evaluate and compare tradeoffs from alternative design possibilities for satisfying functional and non-functional requirements and write a brief proposal summarizing key conclusions for a client.
  3. Produce a high-level design of specific subsystems that is presentable to a non-computing audience by considering architectural and design patterns.
  4. Produce detailed designs for a client for specific subsystem high-level designs by using design principles and cross-cutting aspects to satisfy functional and non-functional requirements.
  5. Evaluate software testing consideration of quality attributes in the design of subsystems and modules for a developer/manufacturer.
  6. Create software design documents that communicate effectively to software design clients such as analysts, implementers, test planners, or maintainers.


Section 3: Software Construction

  1. Design and implement an API using an object-oriented language and extended libraries, including parameterization and generics on a small project.
  2. Evaluate a software system against modern software practices such as defensive programming, error and exception handling, accepted fault tolerances, in a runtime mode that considers state-based table-driven constructions on a large project, as a member of a project team.
  3. Develop a distributed cloud-based system that incorporates grammar-based inputs and concurrency primitives for a medium-size project and then conduct a performance analysis to fine-tune the system, as a member of a project team.


Section 4: Software Testing

  1. Perform an integrative test and analysis of software components by using black-box and use case techniques in collaboration with the clients.
  2. Conduct a regressive test of software components for a client that considers operational profiles and quality attributes specific to an application following empirical data and the intended usages.
  3. Conduct a test utilizing appropriate testing tools focused on desirable quality attributes specified by the quality control team and the client.
  4. Plan and conduct process to design test cases for an organization using both clear- and black-box techniques to measure quality metrics in terms of coverage and performance.


Section 5: Software Sustainment

  1. Describe the criteria for transition into a sustainment status and assist in identifying applicable systems and software operational standards.
  2. Relate to the needs of operational support personnel for documentation and training and help develop software transition documentation and operational support training materials.
  3. Help in determining the impacts of software changes on the operational environment.
  4. Describe the elements of software support activities, such as configuration management, operational software assurance, help desk activities, operational data analysis, and software retirement.
  5. Perform software support activities; and interact effectively with other software support personnel.
  6. Assist in implementing software maintenance processes and plans and make changes to software to implement maintenance needs and requests.


Section 6: Software Process and Life Cycle

  1. Engage with a team to translate a software development process into individual areas of responsibility.
  2. Commit to and perform tasks related to assigned or agreed-upon areas of responsibility.
  3. Propose and justify software lifecycle process improvements based on team capacity, project progress data, and quality analysis as part of a software development team's retrospective activities.


Section 7: Software and Systems Engineering

  1. Provide a description of system engineering concepts and activities to identify problems or opportunities, explore alternatives, create models, and test them.
  2. Develop the big picture of a system in its context and environment to simplify and improve system architectures for supporting system designers.
  3. Develop interfaces, which interact with other subsystems. Use information hiding to isolate the contents and collaborations within subsystems, so that clients of the subsystem need not be aware of the internal design of subsystems.
  4. Work effectively with engineers and developers from other disciplines to ensure effective interaction.


Section 8: Software Quality

  1. Distinguish quality attributes that are discernable at run-time (performance, security, availability, functionality, usability), from those not discernable at run-time (modifiability, portability, reusability, integrability, and testability) and those related to the intrinsic qualities of architecture and detailed design (conceptual integrity, correctness, and completeness).
  2. Design, coordinate, and execute, within a project team, software quality assurance plans for small software subsystems and modules, considering how quality attributes are discernable. Correspondingly, measure, document, and communicate appropriately the results.
  3. Perform peer code reviews for evaluating quality attributes that are not discernable at run-time.
  4. Explain the statistical nature of quality evaluation when performed on software execution; develop, deploy, and implement approaches to collect statistical usage and testing outcome data; compute and analyze statistics on outcome data.
  5. Interact with external entities including clients, users, and auditing agencies in conveying quality goals for processes and products.


Section 9: Software Security

  1. Apply the project’s selected security lifecycle model (e.g., Microsoft SDL), as a contributing member of a project team.
  2. Identify security requirements by applying the selected security requirements method, as a contributing member of a software project team.
  3. Incorporate security requirements into architecture, high-level, and detailed design, as a contributing member of a software project team.
  4. Develop software using secure coding standards.
  5. Execute test cases that are specific to security.
  6. Adhere to the project’s software development process, as a contributing member of a software project team.
  7. Develop software that supports the project’s quality goals and adheres to quality requirements.


Section 10: Software Safety

  1. Describe the principal activities with the development of software systems, which involve safety concerns (activities related to requirements, design, construction, and quality).
  2. Create and verify preliminary hazard lists; perform hazard and risk analyses, identify safety requirements.
  3. Implement and verify design solutions, using safe design and coding practices, to assure that the hazards are mitigated, and the safety requirements are met.
  4. Be aware of the consequences of the development of unsafe software, that is, the negative effect on those who use or receive services from the software.


Section 11: Software Measurement

  1. Develop and implement plans for the measurement of software processes and work products using appropriate methods, tools, and abilities.


Section 12: Project Management

  1. Explain the principal elements of management for a small project team.
  2. Assist in the managerial aspects of a small project team, including software estimation, project planning, tracking, staffing, resource allocation, and risk management.
  3. Develop and implement plans for the measurement of software processes and work products using appropriate methods and tools.
  4. Work effectively with other team members in project management activities.


Section 13: Behavioral Attributes


  1. Engage with team members to collaborate in solving a problem, effectively applying oral and/or written communication skills. Work done towards team effort is accomplished on time; it complies with the role played in the team: it uses established quality procedures; and it advances the team effort.
  2. Assist in the analysis and presentation of a complex problem, considering the needs of stakeholders from diverse cultures, needs, and/or geographic locations. Help in developing a solution for the problem and presenting it to stakeholders, explaining the economic, social, and/or environmental impact of the proposed solution. Identify areas of uncertainty or ambiguity and explain how these have been managed.
  3. Analyze software employment contracts from various social and legal perspectives, ensuring that the final product conforms to professional and ethical expectations, and follows standard licensing practices.
  4. Locate and make sense of learning resources, and use these to expand knowledge, skills, and dispositions. Reflect upon one’s learning and how it provides a foundation for future growth.


Levels of Coverage for Learning Outcomes/Competencies

Introduction (I): Familiarizes student with concepts; Prepares for future additional learning and application of material; Goes as far towards meeting the exact wording of the competency definition as is possible given the course delivery method 

Practice (P):  Deepens understanding of material through application in a controlled or semi-controlled educational environment; May include additional breadth in coverage of topic 

Application (A):  Further deepens understanding of material through application in a real-world project context; Typically involves no influence of simplifying or controlling effects originating from the educational environment