Tutorial 

- 데이터사이언스 스쿨: https://datascienceschool.net/intro.html

Libraries to use

- scipy: https://scipy.org/

- numpy: https://numpy.org/

- matplotlib: https://matplotlib.org/3.1.0/index.html

- scikit-learn: https://scikit-learn.org/stable/

- pytorch: https://pytorch.org/

- gensim: https://radimrehurek.com/gensim/

- FastText: https://fasttext.cc/

Helpful Links for Pre-knowledge

- 점프 투 파이썬: https://wikidocs.net/book/1

- Teachable Machine: https://teachablemachine.withgoogle.com/

- numpy quickstart tutorial: https://numpy.org/devdocs/user/quickstart.html

- numpy tutorial: https://www.tutorialspoint.com/numpy/index.htm 

- requests와 BeautifulSoup으로 웹 크롤러 만들기: https://beomi.github.io/gb-crawling/posts/2017-01-20-HowToMakeWebCrawler.html

- An Introduction to Online Machine Learning with Scikit-learn: https://dziganto.github.io/data%20science/online%20learning/python/scikit-learn/An-Introduction-To-Online-Machine-Learning/

- Incremental (Online) Learning with Scikit-Multiflow https://towardsdatascience.com/incremental-online-learning-with-scikit-multiflow-6b846913a50b

Helpful Links for Deep learning

- 모두를 위한 딥러닝: https://hunkim.github.io/ml/

- 딥러닝을 이용한 자연어 처리 입문: https://wikidocs.net/book/2155

- FastText: https://fasttext.cc/docs/en/support.html

- How to use Different Batch Sizes when Training and Predicting with LSTMs: https://machinelearningmastery.com/use-different-batch-sizes-training-predicting-python-keras/

- How to Use Word Embedding Layers for Deep Learning with Keras: https://machinelearningmastery.com/use-word-embedding-layers-deep-learning-keras/

- How to update LSTM Networks During Traning for Time Series Forecasting https://machinelearningmastery.com/update-lstm-networks-training-time-series-forecasting/

- Online/Incremental Learning with Keras and Creme https://www.pyimagesearch.com/2019/06/17/online-incremental-learning-with-keras-and-creme/

- Online machine learning with creme: https://maxhalford.github.io/slides/creme-pydata/#1

- Introduction to Online Machine Learning: Simplified https://www.analyticsvidhya.com/blog/2015/01/introduction-online-machine-learning-simplified-2/

- Data Streams and Online Machine Learning in Python: https://medium.com/analytics-vidhya/data-streams-and-online-machine-learning-in-python-a382e9e8d06a

- Stateful and Stateless LSTM for Time Series Forecasting with Python https://machinelearningmastery.com/stateful-stateless-lstm-time-series-forecasting-python/

Introduction

We will review the concept of software architecture and practice software architecture design. We also use architecture design tools, if needed. In addition, we review the latest trends in standards and industry.

  • Lecturer: Seonah Lee
  • Class Time: Wednesday 19:00-21:50
  • Class Rome: No. 202 (or 204)

Objectives

  • Students will be able to explain the concept of software architecture.
  • Students will be able to document software architecture.
  • Students will be able to discuss the latest trends in standards and industry.

References

Tool Installation

  • You can download UML Rhapsody from here. The version is Rhapsody Architect for Software v8.2.
  • You can then set up the license as the following steps:
    1. Set up the value of the system environment variable TELELOGIC_LICENSE_FILE. (Please, ask the value to the instructor Seonah Lee, Hint: 9X3).
    2. Find HKEY_CURRENT_USER\Software\FLEXlm License Manager in window registry, and set up the  value of TELELOGIC_LICENSE_FILE.
  • You can find the tool already installed in Room 202.

Evaluation

Proposal 10% FACE Presentation 20%
Mid-term Presentation 25% Attendance and Discussion, etc. 10% 
Final Presentation 35%    

*. You can replace your attendance by summarizing each book chapter and submit your summary to e-campus. If you want to replace your attendance with your summary, please email to This email address is being protected from spambots. You need JavaScript enabled to view it.

*. You have to submit your 6 assignments to e-campus.

Schedule

Week

Date

Content

Submission

1

Mar. 13

  • Course Introduction
  • Definition of Software Architecture
  • Architecture Drivers
 

2

Mar. 20

  • UML Introduction
  • Rhapsody Tutorial
  • 1-page project proposal
    • Design Topic
    • Context Diagram

3

Apr. 3

Proposal Presentation

  • Architecture Design Strategy
  • Architecture View, Veiw-points, View-types
  • Proposal Presentation
    • Topic
    • Context Diagram
    • Functional Reqs
      • Use Case Diagram
      • Use Scenarios
    • Quality Reqs
      • Quality Scenarios
    • Constraints

4

Apr. 10

 

  • Interim Report (1-page)
    • Architectural Strategies
    • Identified Components 

5

Apr. 24

Mid-term Presentation 

  •  Mid-term Presentation
    • Topic
    • Functional Reqs (Scenarios)
    • Quality Reqs (Scenarios)
    • Constraints
    • Architectural Strategies
    • Module View
    • C&C View
 

May 1

 Architecture Documentation

  • Arcadia (Teles in France)
  • Siemens' approach 
 

6

May 8

  Architecture Evaluation
  • SAAM, ATAM, CBAM
 

7

May 15

  • FACE Presentation I, II
  • FACE Presentation III, IV
 

9

Jun 12

Final Presentation 

  Mid-term Presentation
  • Topic
  • Context Diagram
  • Functional Reqs (Scenarios)
  • Quality Reqs (Scenarios)
  • Constraints
  • Architectural Strategies
  • Siemens View or Teles View
    • e.g.,Conceptual View
    • e.g.,Module View
    • e.g.,Execution View
    • e.g.,Code View
  • ATAM Table
  • Reflection


 *. The schedule, lecture materials, and assignments can be changed and updated just before each class.

Project

You can choose any software project that you have done, you are doing, or your plan to do. In this class, you will perform software architecture design activities for the project.

FACE Presentation

You can download the FACE pdf from here. If you want to get an overview of FACE, please refer to the presentation slides.

  • FACE Presentation I    OS Segment                                                                p.16-44 (29 pages) 이건표
  • FACE Presentation II   IO Segment/Platform-specific Services Segment         p.45-57 (13 pages) 안찬주
  • FACE Presentation III  Transport Services Segment,                                       p.57-80 (24 pages) 조희태
  • FACE Presentation IV   Data Architecture/Portable Component Segment       p.81-88 (10 pages) 이현권
  • FACE Presentation V    Graphic Services/LCM Services                                  p.95-112 (17 pages)

Introduction

We will look at the latest research trends and tools necessary for software evolution with an overall understanding of software engineering.

  • Lecturer: Seonah Lee
  • Class Time: Wednesday 19:00-21:50
  • Class Rome: No. 203 (or 204)

References

Major Tasks

  1. Development Project: Individually, you have to choose a development project. It could be your own research project, any open source project, or the project in your company. If you can find no project, you can choose the Ruby-on-Rails project that is incorporated with the CS169 class. In this class, you should consider several aspects of software engineering and mull over the application of software engineering principles and practices to your project. In the final presentation, you should show the application results and your reflections on the application of software engineering.
  2. Paper Presentation: You have to select one research paper from our reading list and present it. You also have to discuss another paper.

Discussion Guidance

Graduate students who just entered the graduate school may not know how to discuss a scientific journal paper. There are a lot of useful advices. Please, refer to the following links:

Evaluation sheet

We will use the following evaluation sheet for each presenter [download]

Evaluation

Project Proposal (~3 Slides) 5%
Mid-term Presentation (5~10 Slides) 20%
Final Presentation (15~20 Slides) 30%
Final Report (2 Page IEEE Format) 5%
Preparation Weekly Report (1 Page) 20%
Presentation Paper Presentation 10%
Discussion Lead 5%
Attendance Attendance 5%

*. You can replace your attendance by summarizing each video lectures and submit your summary to the e-mail: This email address is being protected from spambots. You need JavaScript enabled to view it.


Course Schedule

Week Theory, Discussion and Practice Reporting, Presentation and Discussion Discussion Lead
1: 9.5 Introduction to Software Engineering:1.1-1.3    
2: 9.12 Introduction to Software Engineering:1.7-1.13 Paper Selection  
3: 9.19 Agile Methodology: Working with the Customer7.1-7.5, 7.11-7.12

 

 
4: 9.26 Thanksgiving day (No class)    
5: 10.3 National foundation day (No class)    
6: 10.10 BDD with cucumber and Capybara7.6-7.9

Project Proposal

Paper Presentation [3] 조희태

장규리
7: 10.17 TDD with RSpec8.2-8.4 Paper Presentation [2] 이주헌 김일환 
8: 10.24 TDD with RSpec8.5-8.9 Paper Presentation [9] 장규리 이건표 
9: 10.31 Code Repo Hygiene for Agile Teams10.3-10.6 Mid-term Presentation from 6:30 pm  
10: 11.7 Exploring a Legacy Codebase9.1-9.3 No Class  
11: 11.14 Refactoring & SOFA9.5-9.6, 9.8-9.10 Paper Presentation [14] 파라스  김일환
12: 11.21 Design Patterns for SaaS11.1, 11.3-11.7 Paper Presentation [11] 미르잔  파라스
13: 11.28 Practical DevOps: Deployment, Upgrades, Performance, Security12.1-12.3 Paper Presentation [1] 이건표  조희태 
14: 12.5   Final Presentation  

*. Classes and schedules can be adjusted.


Reading List (ICSE 2018 Paper)

  1. Russo, Daniel, Gerolamo Taccogna, Paolo Ciancarini, Angelo Messina, and Giancarlo Succi. Contracting agile developments for mission critical systems in the public sector. In Proceedings of the 40th International Conference on Software Engineering: Software Engineering in Society, pp. 47-56. ACM, 2018.
  2. Gralha, Catarina, Daniela Damian, Anthony I. Tony Wasserman, Miguel Goulão, and João Araújo. "The evolution of requirements practices in software startups." In Proceedings of the 40th International Conference on Software Engineering, pp. 823-833. ACM, 2018.
  3. Rath, Michael, Jacob Rendall, Jin LC Guo, Jane Cleland-Huang, and Patrick Mäder. "Traceability in the wild: automatically augmenting incomplete trace links." In Proceedings of the 40th International Conference on Software Engineering, pp. 834-845. ACM, 2018.
  4. Inayat Rehman, Mehdi Mirakhorli, Meiyappan Nagappan, Azat Aralbay Uulu, and Matthew Thornton. 2018. Roles and impacts of hands-on software architects in five industrial case studies. In Proceedings of the 40th International Conference on Software Engineering (ICSE '18). ACM, New York, NY, USA, 117-127.
  5. Meng, Na, Stefan Nagy, Danfeng Daphne Yao, Wenjie Zhuang, and Gustavo Arango Argoty. Secure coding practices in java: Challenges and vulnerabilities. In Proceedings of the 40th International Conference on Software Engineering, pp. 372-383. ACM, 2018.
  6. Sawant, Anand Ashok, Mauricio Aniche, Arie van Deursen, and Alberto Bacchelli. "Understanding Developers’ Needs on Deprecation as a Language Feature." In Proceedings of the 40th ACM/IEEE International Conference on Software Engineering (ICSE 2018). forthcoming. 2018.
  7. Zhilei Ren, He Jiang, Jifeng Xuan, and Zijiang Yang. 2018. Automated localization for unreproducible builds. In Proceedings of the 40th International Conference on Software Engineering (ICSE '18). ACM, New York, NY, USA, 71-81.
  8. Foyzul Hassan and Xiaoyin Wang. 2018. HireBuild: an automatic approach to history-driven repair of build scripts. In Proceedings of the 40th International Conference on Software Engineering (ICSE '18). ACM, New York, NY, USA, 1078-1089.
  9. Saha, Ripon K., Hiroaki Yoshida, Mukul R. Prasad, Susumu Tokumoto, Kuniharu Takayama, and Isao Nanba. "Elixir: an automated repair tool for Java programs." In Proceedings of the 40th International Conference on Software Engineering: Companion Proceeedings, pp. 77-80. ACM, 2018.**[included in comprehensive exam.]
  10. Pengcheng Wang, Jeffrey Svajlenko, Yanzhao Wu, Yun Xu, and Chanchal K. Roy. 2018. CCAligner: a token based large-gap clone detector. In Proceedings of the 40th International Conference on Software Engineering (ICSE '18). ACM, New York, NY, USA, 1066-1077.
  11. Chase Greco, Tyler Haden, Kostadin Damevski, StackInTheFlow: behavior-driven recommendation system for stack overflow posts. In Proceedings of the 40th International Conference on Software Engineering: Companion Proceeedings, (ICSE '18). ACM, New York, NY, USA, 5-8 **[included in comprehensive exam.]
  12. Phan, Hung, Hoan Anh Nguyen, Ngoc M. Tran, Linh H. Truong, Anh Tuan Nguyen, and Tien N. Nguyen.**[included in comprehensive exam.]"Statistical learning of API fully qualified names in code snippets of online forums." In Proceedings of the 40th International Conference on Software Engineering, pp. 632-642. ACM, 2018.
  13. Christopher Mendez, Hema Susmita Padala, Zoe Steine-Hanson, Claudia Hilderbrand, Amber Horvath, Charles Hill, Logan Simpson, Nupoor Patil, Anita Sarma, and Margaret Burnett. 2018. Open source barriers to entry, revisited: a sociotechnical perspective. In Proceedings of the 40th International Conference on Software Engineering (ICSE '18). ACM, New York, NY, USA
  14. Jane Cleland-Huang, Michael Vierhauser, and Sean Bayley. 2018. Dronology: an incubator for cyber-physical systems research. In Proceedings of the 40th International Conference on Software Engineering: New Ideas and Emerging Results (ICSE-NIER '18). ACM, New York, NY, USA, 109-112. DOI: https://doi.org/10.1145/3183399.3183408***[included in comprehensive exam.]

과목 소개

해당 수업은 이론(전용기 교수), 실습(이선아 교수)으로 나누어 진행합니다. 과목의 실습은 두 가지를 고려하여 순서를 배정하였습니다. 첫째, 전용기 교수님 수업과 가급적 일치하도록, 둘째, 2018년 1학기 이성진교수님 수업과의 일관성을 가지도록 주제와 실습을 배치하였습니다. 또한 기본 프로그래밍 언어는 C이나 이해를 돕기 위해 Python 코드를 활용한 설명과 실습을 진행할 수 있습니다. 실습 자료는 매 주차 e-campus를 통해 과제물로 공지하며, 이에 대한 제출물도 e-campus를 통해 관리합니다.

교재 및 참조 문헌

(1) 윤성우의 열혈 자료구조 – C언어를 이용한 자료구조 학습서, 윤성우, 오렌지미디어
(2) 뇌를 자극하는 알고리즘, 박상현, 한빛미디어
(3) 파이썬 자료구조와 알고리즘, 미아 스타인 저, 최길우 역, 한빛미디어
(4) 고전 컴퓨터 알고리즘 인 파이썬, 데이비드 코펙, 최길우 역, 한빛미디어
 
참조 링크
(1) 데이타 구조와 알고리즘, 이성진 교수님 홈페이지,
(2) 자료구조, 생활코딩, https://opentutorials.org/module/1335/8634  
 

실습 및 숙제 계획

주차

주제

실습

숙제

01: 3/17,19

C복습: 포인터와 배열

포인터와 배열

실습 결과 제출

02: 3/24,26

C복습: 구조체

구조체

실습 결과 제출

03: 3/31,2

알고리즘 성능분석, 재귀문

재귀문제, 성능분석

이론 Algorithm 숙제

04: 4/7, 9

링크드 리스트

링크드 리스트

이름순으로 삽입, 삭제 구현

05: 4/14,16

스택

스택

사칙연산이 들어오면 계산

06: 4/21,23

이론 Data Structure 숙제

실습 결과 제출

07: 4/28,30

중간고사

-

-

08: 5/5,7

트리

트리

최소 신장 트리 구하기

09: 5/12,14

탐색

탐색

이론 Searching 숙제

10: 5/19,21

정렬

정렬

실습 결과 제출

11: 5/26,28

그래프

그래프

이론 Sorting 숙제

12: 6/2,4

해시테이블

해시테이블

전화번호부 구현

13: 6/9,11

분할정복

분할정복

그래프 Application 숙제

14: 6/16,18

동적계획법

동적계획법

Longest Common Sequence

구하기

15: 6/23,25

기말고사

-

-

*. 해당 실습과 숙제는 기본 C언어로 진행하며, 이해를 돕기 위해 일부 Python코드를 활용할 수 있습니다.

*. 해당 실습과 숙제는 진행 과정에 변경될 수 있습니다. 

*. The grade of assignment will be subtracted by 1 point each day after the deadline.

 

Course Information

Lecturer Prof. Seonah Lee
Time and Place Tuesday, 19:00-22:00, 407-604

This is a graduate course where we review and discuss the papers that are relevant to software evolution. Students also experiment with tools and data for verifying the results of the selected papers.

Course Introduction

Software evolution is a process of constantly changing and improving software systems that are initially developed. The cost of software evolution accounts for more than 90% of the total lifecycle cost of a software system. This course introduces the recent techniques that can resolve several problems of software evolution and that can reduce its cost. Among the solutions, we focus on mining software repositories and maintaining open source systems. Especially, to understand the recent research trends, we include ICSE2018 papers. Students also conduct replication experiments to understand the nature of experimental research. Temporarily, we are using the following site for students' submission: https://gnuse.tnaru.com/web/index

Objective

  • Students will be able to present a paper.
  • Students will be able to discuss a paper.
  • Students can understand and replicate others' work.
  • Students can understand the research trends of software evolution. 

Discussion Guidance

Graduate students who just entered the graduate school may not know how to discuss a scientific journal paper. There are a lot of useful advices. Please, refer to the following links:

Evaluation sheet

We will use the following evaluation sheet for each presenter [download]

Reading List and Schedule

March 27th Repair (Presenter: 김태형, Discussion Leader: 백형진)

April 3rd Refactoring (Presenter: 박종열, Discussion Leader: 장규리)

  • Tsantalis, Nikolaos, et al. "Accurate and Efficient Refactoring Detection in Commit History." Software Engineering (ICSE), 2018
  • Bavota, Gabriele, et al. "Methodbook: Recommending move method refactorings via relational topic models." IEEE Transactions on Software Engineering 40.7 (2014): 671-694.
  • Murphy-Hill, Emerson, Chris Parnin, and Andrew P. Black. "How we refactor, and how we know it." IEEE Transactions on Software Engineering 38.1 (2012): 5-18.

April 10th API learning (Presenter: 조희태, Discussion Leader: 정세린)

  • Xiaodong Gu, Hongyu Zhang, Dongmei Zhang, Sunghun Kim. DeepAM: Migrate APIs with Multi-modal Sequence to Sequence Learning. In Proceedings of the 26th international Joint Congerence on Artificial Intelligence (IJCAI’2017), 2017
  • Deep API Learning. Xiaodong Gu, Hongyu Zhang, Dongmei Zhang, Sunghun Kim. Deep API Learning. In Proceedings of the 24th ACM SIGSOFT International symposium on Foundations of Software Engineering (FSE’16), pages 631-642. ACM, 2016.
  • Neural Machine Translation By Jointly Learning To Align And Translate. Dzmitry Bahdanau, Kyunghyun Cho, Yoshua Bengio. Neural Machine Translation By Jointly Learning To Align And Translate. In Proceedings of the International Conference on Learning Representations (ICLR'15)

April 17th No class

April 24th Cloning (Presenter: 장규리, Discussion Leader: 박종열)

  • Kamiya, Toshihiro, Shinji Kusumoto, and Katsuro Inoue. "CCFinder: a multilinguistic token-based code clone detection system for large scale source code." IEEE Transactions on Software Engineering 28.7 (2002): 654-670.*
  • On detection of gapped code clones using gap locations, Date of Conference: 4-6 Dec. 2002, Date Added to IEEE Xplore: 28 February 2003, Authors : Y. Ueda, T. Kamiya, S. Kusumoto
  • Index-based code clone detection: incremental, distributed, scalable, Date of Conference: 12-18 Sept. 2010, Date Added to IEEE Xplore: 25 October 2010, Authors : Benjamin Hummel, Elmar Juergens, Lars Heinemann
  • Using a clone genealogy extractor for understanding and supporting evolution of code clones, St. Louis, Missouri — May 17 - 17, 2005, Authors: Miryung Kim, David Notkin
  • White, Martin, Michele Tufano, Christopher Vendome, and Denys Poshyvanyk. "Deep learning code fragments for code clone detection." In Proceedings of the 31st IEEE/ACM International Conference on Automated Software Engineering, pp. 87-98. ACM, 2016.
  • Cheng, Xiao, Zhiming Peng, Lingxiao Jiang, Hao Zhong, Haibo Yu, and Jianjun Zhao. "Mining revision histories to detect cross-language clones without intermediates." In Automated Software Engineering (ASE), 2016 31st IEEE/ACM International Conference on, pp. 696-701. IEEE, 2016.
  • Pengcheng Wang, Jeffrey Svajlenko, Yanzhao Wu, Yun Xu, Chanchal K. Roy, CCAligner: a token based large-gap clone detector, ICSE 2018 (no paper, yet)*

May 1st RTM (Presenter: 정세린, Discussion Leader: 조희태)

May 8th Bug patterns (Presenter: 백형진, Discussion Leader: 김태형)

  • Lu, Shan, Soyeon Park, Eunsoo Seo, and Yuanyuan Zhou. "Learning from mistakes: a comprehensive study on real world concurrency bug characteristics." ACM SIGOPS Operating Systems Review 42, no. 2 (2008): 329-339.
  • Park, Sangmin, Richard W. Vuduc, and Mary Jean Harrold. "Falcon: fault localization in concurrent programs." In Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering-Volume 1, pp. 245-254. ACM, 2010.
  • Krena, Bohuslav, Zdenek Letko, Rachel Tzoref, Shmuel Ur, and Tomáš Vojnar. "Healing data races on-the-fly." In Proceedings of the 2007 ACM workshop on Parallel and distributed systems: testing and debugging, pp. 54-64. ACM, 2007.