Software-Analysis-and-Transformation / Syllabus

Syllabus for CSc 81020 Spring 2018

Home Page:https://software-analysis-and-transformation.github.io/Syllabus/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

CSc 81020: Software Analysis and Transformation

3 credits. Department of Computer Science, Graduate Center, City University of New York.

Details

Field Value
Instructor: Raffi Khatchadourian
Office: 4327
Email: rkhatchadourian@gc.cuny.edu
Phone: (212) 817-8190
Office hour: W 10:00-11:00 am or by appointment
Semester: Spring 2018
Section: 38732

Questions

This term we will be using Piazza for class discussion. The system is highly catered to getting you help fast and efficiently from classmates and myself. Rather than emailing questions to the teaching staff, I encourage you to post your questions on Piazza. If you have any problems or feedback for the developers, please email them.

Find our class page and sign up for the forum.

Email

Emails to the instructor must be via a CUNY email addresses for FERPA reasons. Please post all class-related discussion on Piazza. Also, please ensure that your correct email address is entered into the CUNY Blackboard.

Bulletin Board

You should check the Blackboard site regularly, since all class material will be posted there. Please make sure you have configured Bb to use your GC email address. You are responsible for any email the instructors might send there.

Key Dates

Event Date
Recess March 30-April 8
Friday Schedule April 11
Withdrawal Deadline April 16
Final Exam ? (May 18-24)

Academic Violations

The classroom environment employed will be that of a professional one. While students may discuss course materials and assignments with others, any submitted work in this course must be the result of individual effort only. Students are strongly advised to read the following resources regarding academic integrity:

Rationale

With the rise of mobile computing, cybersecurity, and big data, the need for software engineering tools to assist developers in cultivating and managing the complexity of large software systems has never been more evident, giving way to such tools as GitHub, Pivotal, and SonarQube. Software analysis and transformation has a variety of uses, including performance optimization (in compilers), decompiling, obfuscating, verifying program correctness, domain-specific programming languages, and software understanding, evolution, debugging, and testing in software engineering tools. The material will be useful for students working in compilers, developer tools, systems, software engineering, and programming languages.

Course Description

This course introduces the foundations of algorithms that analyze and manipulate software. Refactoring, the process of reorganizing software for an improved design while preserving its original functionality, concepts and techniques will also be introduced, along with several type inferencing techniques. The course will involve hands-on experience in creating algorithms and tools.

List of Topics

The topics may include but are not limited to:

  • intermediate program representations, including Abstract Syntax Trees (ASTs)
  • tree traversal and manipulation algorithms
  • control- and data-flow analyses
  • type inference
  • object-orientation
  • pointer/alias analysis
  • side-effect analysis
  • refactoring
  • object-oriented software design patterns

Suggested Previous Courses

  • Excellent programming skills in an object-oriented programming language such as C++ or Java.
  • CSc 71010 (Programming Languages) or equivalent or an introductory course on compilers would be useful. Otherwise, students may review the first two chapters of Compilers: Principles, Techniques and Tools by Aho, Sethi and Ullman. However, previous experience in software analysis will not be assumed.

Learning Objectives

The learning goals include:

  • understand abstract software representations on a meta-level
  • comprehend and develop various algorithms for traversing and manipulating abstract software representations.
  • relate software analysis and transformation algorithms to their application in real-world problems.
  • good working knowledge of object-oriented type systems and inference.
  • understand the challenges and solutions associated with analysis of software written in programming languages that allow aliasing and side-effects.
  • knowledge of various software refactorings, how to formulate refactoring preconditions, and issued related to programs semantics-preservation in an object-oriented setting.
  • good working knowledge of various enterprise-level software design patterns and their relationship to refactorings.

Assessment

Several homework assignments involving technical problems related to the class lectures and reading material. Completion of the homework will benefit the students, particularly in their technical skills and problem solving. These will account for 25% of the overall grade.

In additional to homework, a sequence of projects will also be assigned. Student project topics may be selected depending on the student's research interests and goals. These will account for 55% of the overall grade.

A special topics lecture that discusses current research in the area will also be assigned, accounting for 10% of the grade, while class participating will account for the remaining 10%.

Special Needs

Students with special needs should see me for accommodation.

ADA Compliance

In compliance with the American Disability Act of 1990 (ADA) and with Section 504 of the Rehabilitation Act of 1973, Hunter College is committed to ensuring educational parity and accommodations for all students with documented disabilities and / or medical conditions. It is recommended that all students with documented disabilities (Emotional, Medical, Physical and / or Learning) consult the Office of Accessibility located in Room E1124 to secure necessary academic accommodations. For further information and assistance please call (212-772-4857)/TTY (212-650-3230).

Family Educational Rights and Privacy Act (FERPA)

The Family Educational Rights and Privacy Act (FERPA) (20 U.S.C. § 1232g; 34 CFR Part 99) is a Federal law that protects the privacy of student education records. The law applies to all schools that receive funds under an applicable program of the U.S. Department of Education.

FERPA gives parents certain rights with respect to their children's education records. These rights transfer to the student when he or she reaches the age of 18 or attends a school beyond the high school level. Students to whom the rights have transferred are "eligible students."

  • Parents or eligible students have the right to inspect and review the student's education records maintained by the school. Schools are not required to provide copies of records unless, for reasons such as great distance, it is impossible for parents or eligible students to review the records. Schools may charge a fee for copies.
  • Parents or eligible students have the right to request that a school correct records which they believe to be inaccurate or misleading. If the school decides not to amend the record, the parent or eligible student then has the right to a formal hearing. After the hearing, if the school still decides not to amend the record, the parent or eligible student has the right to place a statement with the record setting forth his or her view about the contested information.
  • Generally, schools must have written permission from the parent or eligible student in order to release any information from a student's education record. However, FERPA allows schools to disclose those records, without consent, to the following parties or under the following conditions (34 CFR § 99.31):
    • School officials with legitimate educational interest;
    • Other schools to which a student is transferring;
    • Specified officials for audit or evaluation purposes;
    • Appropriate parties in connection with financial aid to a student;
    • Organizations conducting certain studies for or on behalf of the school;
    • Accrediting organizations;
    • To comply with a judicial order or lawfully issued subpoena;
    • Appropriate officials in cases of health and safety emergencies; and
    • State and local authorities, within a juvenile justice system, pursuant to specific State law.

Schools may disclose, without consent, "directory" information such as a student's name, address, telephone number, date and place of birth, honors and awards, and dates of attendance. However, schools must tell parents and eligible students about directory information and allow parents and eligible students a reasonable amount of time to request that the school not disclose directory information about them. Schools must notify parents and eligible students annually of their rights under FERPA. The actual means of notification (special letter, inclusion in a PTA bulletin, student handbook, or newspaper article) is left to the discretion of each school.

For additional information, you may call 1-800-USA-LEARN (1-800-872-5327) (voice). Individuals who use TDD may use the Federal Relay Service.

Or you may contact us at the following address:

Family Policy Compliance Office U.S. Department of Education 400 Maryland Avenue, SW Washington, D.C. 20202-8520

Instructor Biography

Raffi Khatchadourian is an Assistant Professor in the Computer Science Department at Hunter College and the Graduate Center of the City University of New York (CUNY). He received his MS and Ph.D. degrees in Computer Science from Ohio State University and BS degree in Computer Science from Monmouth University in New Jersey. Prior to joining CUNY, he was a Software Engineer at Apple, Inc. in Cupertino, California, where he worked on Digital Rights Management (DRM) for iTunes, iBooks, and the App store. He also developed distributed software that tested various features of iPhones, iPads, and iPods. Raffi's research focus is techniques for automated software evolution, particularly those related to automated refactoring and source code recommendation systems with the goal of easing the burden associated with correctly and efficiently evolving large and complex software.