I will now give you the main topics and concepts discussed in the course thus far. Please create a new and better cheat sheet with this new information in conjunction with the above information about the sample midterm questions and initial cheat sheet. Please take into account the indentations marked by specific symbols. Please number all parts and sub-parts clearly. Please briefly explain each thing and give examples when needed, as you would for a cheat sheet.

Motivation for Process Models
- Software Process Model
Overview of Process Models
- Software Development Process Models
o Waterfall model
o Incremental model
 Continuous Integration Model
 Multiple Releases
o Spiral model
o Rational Unified Process model
- Entry and Exit Criteria
Agile Methodologies
- Problems with “Traditional” Processes
- Example Agile Methodologies
- XP’s Core Values
- XP’s Fundamental Principles
- XP’s “Process”
- Agile vs. Non-Agile?
Test-Driven Development (TDD)
Tool Support for Software Engineering
- CASE: Computer Aided Software Engineering
- Tools for Software Engineering Activities
Version Control Systems
- Centralized vs. Distributed
Git Basics
- Basic git operations and descriptions. Clone, add, rm, commit, push, pull, status, blame, bisect, clone, and other major ones.
- Merge conflicts
- Branches
- .gitignore
- Pull request
Process Models Recap
- Selecting Process Models: Traditional or Agile?
Android
- The Android Software Stack
- Android Studio
o Uses the Gradle build system, by default.
Android Basics
- Learn the following by creating a basic app ▶ Putting together a basic Android App ▶ Activities ▶ Widgets
Android SDK
Android Project
- Android Manifest file (an XML file) ▶ UI definition in XML ▶ Other definitions, e.g. strings for internationalization
o All activities, services and content provider components of the application must be statically declared in this file
o Content in Android Manifest File
- Resource files
- Designing the UI
o Typical Android UI elements
- Some Android Program Elements
- Android Activity
- Callbacks
- ▶ Java files (Your code) ▶ Gradle build scripts and settings ▶ Other resources (e.g. images, animations)
Model-View-Controller
An introduction to event-driven programming
- Event-Driven versus Algorithm-Driven
- GUI Event-Driven Programming
o GUI Event
o Event Listener
o Event Handler
o GUI Event Handling
build.gradle Files
- Project-level
- Module-level
Android Apps Lifecycle
Activities and Intents
- Using Android Intents 
o Starting and Stopping Second Activity 
 Starting Another Activity: No Return Code
 Stopping the Other Activity: No Data Back
o Implicit or explicit intents
o Passing Data to Second Activity 
o Returning Data to First Activity
Android Activity Lifecycle
Creating Activity Class
Example onCreate() Method
- Elements in onCreate() Example
Connecting UI and Activity
Preparation for Requirement Engineering
Major Requirements Engineering Activities
- Requirements Elicitation
- Analysis: Requirements Categorization
- Analysis: Requirement Prioritization
- Requirements Definition/Prototyping/Review
- Requirements Definitions/Documentation
- Establishing Requirement Traceability
- Requirements Prototyping
- Requirement Specification
Review of Agile Model
Behavior-Driven Development – an Agile Approach
User Stories For Requirements
- User stories are the means by which we express application requirements in agile processes
- “Connextra” format:
- “SMART” User Stories
- Acceptance Tests
- Mapping User stories to Acceptance Tests
- Scenarios - Format: Given/When/Then.
- Create Scenarios for User Stories
- Gherkin format
User-interface (UI) part of the requirements What’s our approach? – “Lo-Fi” sketches and storyboards
- UI Sketches
- UI Sketches and Wireframes
- Storyboard
- From UI Sketches to Storyboards and Lo-Fi Prototype
- Why “Lo-Fi“ Storyboards and UI Sketches and Prototypes?
Measuring Productivity
- Velocity
- User Story Burndown Charts
What is Software Quality?
- Conforms to requirements – via validation.
- Fit to use – via verification.
- Quality assurance
- Quality control
- “Error-Detection” Techniques
o Testing
o Inspections and reviews
o Static analysis
o Formal methods (proving software correct)
- Error vs Fault vs Failure
- Limitation of Testing
- What is Tested (Type of Tests)
- Testing Methods
o Glass-box (aka white-box) testing
o Black-box testing
o White-box vs. Black-box
- Example Testing Methods
o Equivalence Class Partitioning
o Boundary Value Analysis
o Path Analysis/Control Flow Testing 
o Combinations of Conditions
o Guideline testing
- Unit/Functional Testing
o Assertion
o Unit/Functional Testing: Testing Methods
- Test-Driven Development
- Common Test Coverage Levels
o Method, call (entry/exit), statement, branch, and path coverages.
- Modified Condition/Decision Coverage (MCDC)
- Achieving Test Coverage
- Types of test execution approaches
o Regression Testing
o Continuous Integration Testing
- Inspections and Reviews
o Review
o Walkthrough
o Software inspection
- Inspections vs. Testing
Exercise: Design Test Cases
Equivalence Class Partitioning
Equivalence Class Partitioning: Heuristics
Test-Driven Development (TDD)
- TDD High Level Work Flow
- RED-GREEN-REFACTORING
Tools for TDD
- Junit
- JUnit Tests
- Write a Simple Test Case
Types of Tests
- System or Acceptance Test
- Integration/system testing
- Module or Functional Test
- Unit testing
Test Case and Running Test Case
Components of a Test Case
Android UI Testing
- Espresso
o ViewMatchers
o ViewActions
o ViewAssertions
o Testing Scenarios with Espresso
o Basic Espresso Test
o Using Espresso: Preparation and Steps
o A Simple User Story
o Testing a Scenario
 onView
 perform
 check
이제 지금까지 강의에서 논의한 주요 주제와 개념을 알려드리겠습니다. 위의 중간고사 문제 샘플 및 초기 치트 시트에 대한 정보와 함께 이 새로운 정보를 사용하여 새롭고 더 나은 치트 시트를 작성하십시오. 특정 기호로 표시된 들여쓰기를 고려하십시오. 모든 파트와 하위 파트에 번호를 명확하게 매겨 주십시오. 치트 시트에서와 마찬가지로 각 항목을 간략하게 설명하고 필요한 경우 예시를 제시해 주세요.프로세스 모델에 대한 동기 부여- 소프트웨어 프로세스 모델프로세스 모델 개요- 소프트웨어 개발 프로세스 모델o 폭포수 모델o 점진적 모델 지속적 통합 모델 다중 릴리스o 나선형 모델o 합리적인 통합 프로세스 모델- 진입 및 퇴출 기준애자일 방법론- "전통적인" 프로세스의 문제점- 애자일 방법론의 예- XP의 핵심 가치- XP의 기본 원칙- XP의 "프로세스"- 애자일과 비애자일?테스트 중심 개발(TDD)소프트웨어 엔지니어링을 위한 도구 지원- 사례: 컴퓨터 지원 소프트웨어 엔지니어링- 소프트웨어 엔지니어링 활동을 위한 도구버전 관리 시스템- 중앙 집중식과 분산식Git 기초- 기본적인 Git 작업 및 설명. 복제, 추가, 리마인드, 커밋, 푸시, 풀, 상태, 블레임, 바이섹트, 클론 및 기타 주요 작업.- 충돌 병합- 브랜치- .gitignore- 풀 리퀘스트프로세스 모델 요약- 프로세스 모델 선택하기: 전통적 또는 애자일?Android- 안드로이드 소프트웨어 스택- 안드로이드 스튜디오o 기본적으로 Gradle 빌드 시스템을 사용합니다.안드로이드 기초- 기본 앱 만들기 ▶ 기본 안드로이드 앱 구성하기 ▶ 활동 ▶ 위젯을 통해 다음을 학습합니다.안드로이드 SDK안드로이드 프로젝트- 안드로이드 매니페스트 파일(XML 파일) ▶ XML로 UI 정의 ▶ 기타 정의(예: 국제화를 위한 문자열)o 애플리케이션의 모든 활동, 서비스 및 콘텐츠 제공자 구성 요소는 이 파일에 정적으로 선언되어야 합니다.o 안드로이드 매니페스트 파일의 콘텐츠- 리소스 파일- UI 디자인o 일반적인 안드로이드 UI 요소- 일부 안드로이드 프로그램 요소- 안드로이드 활동- 콜백- Java 파일(사용자 코드) ▶ Gradle 빌드 스크립트 및 설정 ▶ 기타 리소스(예: 이미지, 애니메이션)모델-뷰-컨트롤러이벤트 중심 프로그래밍 소개- 이벤트 중심과 알고리즘 중심 비교- GUI 이벤트 중심 프로그래밍o GUI 이벤트o 이벤트 리스너o 이벤트 핸들러o GUI 이벤트 처리build.gradle 파일- 프로젝트 수준- 모듈 수준안드로이드 앱 라이프사이클활동 및 인텐트- 안드로이드 인텐트 사용 o 두 번째 활동 시작 및 중지  다른 활동 시작하기: 반환 코드 없음 다른 활동 중지하기: 데이터 백 없음o 암시적 또는 명시적 의도o 두 번째 활동으로 데이터 전달 o 첫 번째 활동으로 데이터 반환안드로이드 활동 수명 주기활동 클래스 생성onCreate() 메서드 예제- onCreate()의 요소 예제UI와 활동 연결하기요구사항 엔지니어링을 위한 준비주요 요구 사항 엔지니어링 활동- 요구 사항 도출- 분석 요구 사항 분류- 분석 요구사항 우선순위 지정- 요구 사항 정의/프로토타이핑/검토- 요구 사항 정의/문서화- 요구 사항 추적성 확립- 요구 사항 프로토타이핑- 요구 사항 사양애자일 모델 검토행동 중심 개발 - 애자일 접근 방식요구 사항에 대한 사용자 스토리- 사용자 스토리는 애자일 프로세스에서 애플리케이션 요구 사항을 표현하는 수단입니다.- "커넥스트라" 형식:- "스마트" 사용자 스토리- 수락 테스트- 사용자 스토리를 수락 테스트에 매핑하기- 시나리오 - 형식: 주어진/언제/언제.- 사용자 스토리에 대한 시나리오 만들기- 거킨 형식요구 사항의 사용자 인터페이스(UI) 부분 접근 방식은 무엇인가요? - "Lo-Fi" 스케치 및 스토리보드- UI 스케치- UI 스케치 및 와이어프레임- 스토리보드- UI 스케치에서 스토리보드 및 Lo-Fi 프로토타입까지- 왜 "Lo-Fi" 스토리보드와 UI 스케치 및 프로토타입인가?생산성 측정- 속도- 사용자 스토리 번다운 차트소프트웨어 품질이란 무엇인가요?- 요구사항 준수 - 검증을 통해.- 사용 적합성 - 검증을 통해 확인합니다.- 품질 보증- 품질 관리- "오류 감지" 기법o 테스트o 검사 및 검토o 정적 분석o 공식적인 방법(소프트웨어가 올바른지 증명)- 오류 대 결함 대 실패- 테스트의 한계- 테스트 대상(테스트 유형)- 테스트 방법o 글래스 박스(일명 화이트 박스) 테스트o 블랙박스 테스트o 화이트 박스 대 블랙 박스- 테스트 방법 예시o 동등성 클래스 분할o 경계 값 분석o 경로 분석/제어 흐름 테스트 o 조건 조합o 가이드라인 테스트- 단위/기능 테스트o 어설션o 단위/기능 테스트 테스트 방법- 테스트 중심 개발- 일반적인 테스트 커버리지 수준o 메서드, 호출(진입/종료), 문, 분기 및 경로 커버리지.- 수정된 조건/결정 커버리지(MCDC)- 테스트 커버리지 달성하기- 테스트 실행 접근 방식 유형o 회귀 테스트o 지속적 통합 테스트- 검사 및 리뷰o 검토o 연습o 그래서