2021.09.17.-2021.12.10.
코로나19 장기화로 성인 10명 중 3명의 체중이 증가했다는 통계 결과가 있다.
바깥 활동이 줄고 집에 머무르는 시간이 길어지며 활동량이 줄어든 데다가,
배달음식으로 인한 고칼로리 섭취가 늘어난 탓이라는 이유를 볼 수 있다.
외출 횟수가 감소하며 일상생활 활동량도 함께 감소되며 운동량도 줄어들었다고 본다.
이러한 사회현상을 해결하기 위해 우리는 집에서 할 수 있는 운동을 추천해주고
운동을 꾸준히 할 수 있게 격려해주는 운동 프로그램을 앱으로 제작하려 한다.
인터넷으로 충분히 찾을 수 있는 내용이지만 운동을 시작하는 사람들은 방대하고 많은 양의 정보중 어떤 정보를 믿어야 할지 고민하다 끝내버리는 경우가 많다.
우리는 이런 번거로움과 운동의 지속성을 유지하는 동기 부여를 앱을 통해 관리하고 사용자가 스스로 루틴을 정할 수 있게 도움을 주는 앱을 개발하고자 한다.
이 중, 요일별 스케쥴 조회, 수정, 삭제, 등록, 추천 운동 정보 조회 기능을 구현
개발 환경 : Windows 10, Android Studio
관리 도구 : Git, XLGantt
개발 언어 : Java
데이터베이스 : SQLite
개발 생명주기 : 피드백 있는 폭포수 모델
개발생명주기모델 : 피드백이 있는 폭포수 모델 생명주기
| 단계 | 입력 산출물 | 수행 태스크 | 출력 산출물 | 시작 기준 | 완료 기준 |
|---|---|---|---|---|---|
| 요구사항 | 프로젝트 제안서 | 기능 분석 및 명세서 작성 | 요구사항 명세서 | 프로젝트 제안서 작성 | 요구사항 명세서 작성 |
| 설계 | 요구사항 명세서 | 아키텍쳐 DB 설계 | 설계서 | 요구사항명세서 작성 | 설계서 작성 |
| 구현 | 설계 사양서 | 개발 코딩 단위 테스트 | 소스 코드 테스트 보고서 | 설계서 작성 | 구현 후 단위 테스트 종료 |
| 테스트 | 소스 코드 | 시스템 테스트 인수 테스트 | 테스트 보고서 | 통합 테스트 종료 | 시스템/인수 테스트 종료 |
| 유지 보수 | 테스트 보고서 | 프로젝트 검토 | 프로젝트 완료 보고서 | 전 테스트 종료 | 완료 보고서 작성 |
객체지향 방법론을 이용한다.
JAVA가 제공하는 다양한 메소드를 활용하여 여러가지 기능 구현이 가능하다.앱 사용자와 운동 관리/기록을 총괄하는 앱을 UML 언어의 Use Case와 Sequence Diagram을 이용하여 요구사항을 분석하고, ER 다이어그램과 테이블 목록 및 기술을 하여 데이터베이스 요구사항을 분석
시스템 설계 - DB를 최대한 최적화하여 설계
객체 설계 - UML 언어의 Class Diagram을 이용 class를 정의하고 class들 간의 관계 및 알고리즘 그리고 자료구조를 설계
DB 설계 - ER 다이어그램을 이용하여 테이블을 상세 기술
설계를 바탕으로 Java를 이용하여 데이터 구조 부분과 관련 메소드를 포함하는 여러 객체들로 구현





| 기능 | 개수 | 평균 가중치 | 기능 점수 | ||
|---|---|---|---|---|---|
| 데이터기능 | ILF | 운동 테이블, 회원 테이블 | 2 | 7.5 | 15.0 |
| 트랜잭션 기능 | EI | 요일별 운동 부위 등록/수정/삭제, 회원 정보 등록/수정/삭제, 운동시간 타이머 측정 | 7 | 4.0 | 28 |
| EO | 주간 운동시간 조회, 순위 조회 | 2 | 5.2 | 10.4 | |
| EQ | 푸시 알림, 운동 정보 조회(추천), 회원 정보 조회, 요일별 운동 부위 조회 | 4 | 3.9 | 15.6 | |
| 기능 점수의 합 | 15+28+10.4+15.6=69 | ||||
| 보정 전 개발 원가 | 69 * 519,203 = 35,825,007 원 | ||||
| 보정 계수 | 규모 보정(0.65), 애플리케이션 유형 보정(1.0),언어 보정(1.2), 품질/특성 보정(1.0) | ||||
| 보정 후 개발 원가 | 35,825,007(0.651.01.21.0)=27,943,505.45 원 |
데이터 기능 점수 = ILF 개수 x 7.5 + EIF 개수 x 5.4
= 2x7.5 + 0
= 15
트랜젝션 기능 점수 = (EI개수 x 4.0) + (EO개수 x 5.2) + (EQ개수 x 3.9)
= 7x4.0 + 2x5.2 + 4x3.9
= 54
보정 전 개발 원가 = 미조정 기능 점수 x 기능 점수당 단가
= ( 데이터 기능 점수 + 트랜잭션 기능 점수 ) x 519.203
보정 후 개발 원가 = 보정 전 개발 원가 x ( 규모 보정 계수) x 애플리케이션 보정 계수 x 언어 보정 계수 x 품질/특성 보정 계수)




| 액터 | 설명 |
|---|---|
| 사용자 | 운동 관리 앱을 사용하는 사람 |
| 관리자 | 운동 관리 앱을 관리하고, 운동 정보를 관리하는 사람 |
| 식별자 | 행위자 | 설명 |
|---|---|---|
| UC-U01 | 사용자 | 요일별 운동 부위 등록 |
| UC-U02 | 사용자 | 요일별 운동 부위 수정 |
| UC-U03 | 사용자 | 요일별 운동 부위 삭제 |
| UC-U04 | 사용자 | 요일별 운동 부위 조회 |
| UC-U05 | 사용자 | 회원 정보 등록(회원가입) |
| UC-U06 | 사용자 | 회원 정보 수정 |
| UC-U07 | 사용자 | 회원 정보 삭제(회원탈퇴) |
| UC-U08 | 사용자 | 회원 정보 조회 |
| UC-U09 | 사용자 | 추천 운동 정보 조회 |
| UC-U10 | 사용자 | 푸시 알림 설정 |
| UC-U11 | 사용자 | 운동시간 타이머 측정 |
| UC-U12 | 사용자 | 운동 시간 조회 |
| UC-U13 | 사용자 | 로그인 |
| UC-U14 | 사용자 | 순위 조회 |
| UC-U15 | 사용자 | 주간 운동 시간 조회 |
| UC-A01 | 관리자 | 운동 등록 |
| UC-A02 | 관리자 | 운동 수정 |
| UC-A03 | 관리자 | 운동 삭제 |



| 유스케이스 ID | 유스케이스명 | 항목 | 요구사항 |
|---|---|---|---|
| UC-U01 | 요일별 운동 부위 등록 | 운동 부위 입력 | 각 요일별로 운동 부위를 입력한다. |
| UC-U02 | 요일별 운동 부위 수정 | 운동 부위 수정 | 각 요일별로 입력한 운동 부위를 수정한다. |
| UC-U03 | 요일별 운동 부위 삭제 | 운동 부위 삭제 | 각 요일별로 입력한 운동 부위 정보를 전체 삭제한다. |
| UC-U04 | 요일별 운동 부위 조회 | 운동 부위 조회 | 각 요일별로 입력한 운동 부위를 조회한다. |
| UC-U09 | 추천 운동 정보 조회 | 추천 운동 정보 조회 | 사용자가 선택한 운동 부위에 따라 적절한 운동을 추천한다. |



| 항목 | 요구사항 |
|---|---|
| 반응시간 | 시스템은 사용자의 요구에 5초 이내에 처리해 결과를 보여야 한다. |
| 항목 | 요구사항 |
|---|---|
| 데이터 신뢰성 | 사용자가 측정한 운동 시간에 대하여 시스템은 정확한 정보를 유지하고 관리해야 한다. |
| 데이터 정확성 | 운동 데이터 등록, 수정, 삭제는 관리자가 제공한 데이터의원본 그대로 사용자에게 제공되어야 한다. |
| 데이터 무결성 | 사용자가 과거에 운동했던 기록은 시스템에서 임의로 수정 및 추가, 삭제되어서는 안된다. |
| 항목 | 요구사항 |
|---|---|
| 로그인 비밀번호 | 로그인 비밀번호는 입력시 “*”로 보여주며, 6자리 이상으로 한다. |
| DB 관리 | DB의 운동 등록/수정/삭제는 인증된 관리자만이 수행할 수 있다. |




















메인 화면(로그인 화면)
추천 운동 정보 조회 화면 초기 (자동으로 팔이 선택됨)
추천 운동 정보 조회 화면에서 등 부분을 선택했을 경우 (아래 리스트가 달라짐)
‘등’ 운동 부위를 선택해서 출력된 리스트 중 오버헤드 랫폴 다운을 클릭시
운동 방법이 출력
요일별 스케쥴 초기 화면 (사용자의 스케쥴이 미등록 상태)
요일별 스케쥴 화면에서 요일 버튼을 클릭시 리스트뷰가 아래에 출력
요일을 선택하고 리스트뷰의 운동 부위를 선택시 다음과 같이 스케쥴 추가 가능
스케쥴을 추가한 후 저장 버튼을 클릭시 등록/수정이 가능
(그래야 다른 화면으로 이동하거나 로그아웃해도 스케쥴이 사라지지 않음)
삭제 버튼을 클릭시, AlertDialog가 출력되며 확인 버튼을 클릭시 사용자가 등록한 스케쥴이 삭제된다.
삭제버튼을 클릭한 후의 화면
분기 커버리지, 사용자 운동 스케쥴 삭제

(가) 조건문 : Yes / No에 따른 한 가지 경로를 가짐 >> 2가지 분기를 가짐
스케쥴 삭제 기능
분기 커버리지, 사용자 운동 스케쥴 저장

(가) 조건문 : Yes / No에 따른 한 가지 경로를 가짐 >> 2가지 분기를 가짐
스케쥴 저장 기능

[1] 안드로이드 : 프래그먼트에 리스트뷰(ListView) 사용하기, https://m.blog.naver.com/cosmosjs/222006150792
[2] RecyclerView를 커스텀해서 가로, 세로 구현하기, https://taek2.tistory.com/m/13
[3] Fragment Refresh(새로고침) 하는 방법, https://maivve.tistory.com/35
[4] SQLite 사용 방법 및 예제, https://blog.naver.com/hee072794/220619425456
[5] 텍스트뷰(TextView) 동적생성, https://aries574.tistory.com/62
[6] BottomNavigationView 사용하여 하단 메뉴 만들기, https://lktprogrammer.tistory.com/183
[7] AlertDialog 사용하여 알림창 띄우는 방법 총정리, https://lktprogrammer.tistory.com/155
[8] 테이블-AUTOINCREMENT을 설정했을 때 값의 할당 규칙,
https://araikuma.tistory.com/690
혹시 소스코드좀 공유해주세요