P1L1 Introduction

01 - Welcome

Hello and welcome to CS 6310, Software Architecture and Design.

My name is Spencer Rugaber, and I will be your guide through this material. This lesson tells you about the course. What its subjects are? How it is structured? And what its policies are? A written description of the course can be found at the link in the instructor’s notes for this lesson. But let’s begin with some introductions, both of myself and of Jared Parks.

02 - Introductions

>> Absolutely. As Spencer said, my name’s Jarrod Parkes, and I’ll be working with you and Spencer throughout this course. In terms of software experience, I’ve worked in a number of different places in my career. I’ve worked in a telecommunications company, and there I tested and programmed new features for VDSL routing equipment. I’ve also programmed a number of small video games and prototypes for the biotech community. And I own a web and mobile development company with my twin brother James. More importantly though, is I want to help Spencer bring a new exciting feel to this course.

03 - Course

This course is about software design focusing on high level architectural design rather than detail design. It is not a programing course. In particular, you should already know how to program in at least one programing language in order to succeed in this course.

It is also not an introductory software engineering course. A prerequisite of the course is that you have already been introduced to this subject, even by another course or because you have worked as a developer in a software development organization. This course focuses on object-oriented design, and the projects make use of the Java programming language. Experience with these topics is not strictly required, but familiarity will help.

If you want a refresher, the class resources page linked to from the instructor’s notes points to video lectures I prepared on these topics.

04 - Objectives

This course, has specific learning objectives. It is intended by the end of the course, you will be able to accomplish the following tasks. Fist off, express the analysis and design of an application using the Unified Modeling Language, also called UML. Specify functional semantics of an application using the object constraint language, OCL. Specify and evaluate software architectures, in particular, select and use appropriate architectural styles. Understand and apply object-oriented design techniques. Select and use appropriate software design pattern. Finally, understand and participate in a design review.

05 - Course Structure

This course, software architecture and design, is divided into parts, each interleaving content lessons within class exercises.

After a few introductory lessons we will begin by looking at the process of analyzing a design problem and specifying it using UML and OCL. Both the static and dynamic aspects of analysis will be presented.

The next part of the course has to do with software architecture. This includes different ways of thinking about and representing architectures, the role of non functional requirements in determining architecture, and how architectural designs can be refined into modules that can then be implemented.

The final part of the course gets into the specifics of software design, including object design, design patterns, design principles, and design reviews.

06 - Readings

This class does not have a required textbook, although several books that cover the material are listed on the class resources page.

Instead, there are a set of reading assignments listed on the class schedule page. And the material itself is available via links on the class resources page.

You are expected to have read this material before viewing the corresponding lesson.

07 - Assignments

In addition to the lessons, this course features a collection of assignments meant to give you an opportunity to explore material not directly covered in the lessons. These topics include architectural styles, design patterns, and middleware. There are also two exercises, one on OCL and one on state charts, intended to allow you to try these technologies for yourself. Finally, there’s an opportunity to see how design is done in fields other than software in order to better appreciate how universal design is.

08 - Projects Design Studies

The heart and soul of this course are its projects. I can’t really teach you to design. You have to learn it by doing it yourself. The best I can do is to introduce you to some specific techniques, such as modeling, and technology, such as UML, that you can use in thinking about how to solve design problems.

The learning experience comes from applying them to a problem and getting a feel for how they work. A course on software design faces an important challenge.

Interesting design typically occurs when confronting large complex problems but those can’t be dealt with within the constraints of a single course.

I have taken a different approach to structuring projects called design studies.

The idea here comes from a world of building architecture in which the architect often constructs a variety of small scale models in order to explore a design space. For each of the projects in this course, I ask you to solve it several different ways and then to systematically study the differences. The projects themselves are relatively small, and although some coding is involved, you will be working on teams with enough members that you should have enough resources to get the job done, and then study the variations. I’ve also tried to make the projects similar to those in the real world. The first similarity is that you will be working with team members that you are not collocated with. You will have to learn to quickly organize yourself to work in a parallel distributive fashion.

The second similarity, is that the projects are some what open ended. That is, though they are basically requirements, there is room for you to be creative in your solutions, and to go beyond those requirements, if you believe you can significantly add value to the product you are producing.

Of course, the danger with an open ended project is you might get engaged in polishing an extension and not have a working solution to the basic problem.

I strongly suggest that you tackle these projects in an incremental manner, that is, begin by producing a trivial working program providing only minimal functionality then add one new feature at a time.

Ensuring that the older functionality still works.

The third similarity to the real world is that the projects are phased. What this means is that the three projects all deal with the same problem domain and each subsequent project builds on the solutions developed in the previous ones.

In fact, you’re specifically encouraged to make use of code. From your own or other teams that was developed earlier. This situation is typical of the real world, where successful projects often have long lifetimes in which the additional features are added and released to customers.

The fourth similarity is that the members of your project team change for each phase. In the real world, turnover of teams is common and you have to learn to work with a variety of people. One specific benefit is that by having team members with different teams, you will have familiarity with and access to a variety of working solutions from which you can choose components from previous phases. More over, managing teams in this fashion provides a motivation for designing your solutions in a way that they can be reused on future projects. Even if you don’t know exactly what those projects are.

09 - Policies

As you can imagine, anything as institutionalized as an online course has a strict set of policies to which the students and faculty must adhere.

Of course, Georgia Tech has an honor code linked to in the instructor’s notes that you should read and follow. Unless explicitly stated in the description of an assignment or project, all work you submit must be your own.

The course makes use of the Piazza forum, which allows you to ask questions and otherwise communicate with your fellow students. You are encouraged to ask for clarifications and about the details of a particular tool or technology. But you should not ask for nor provide answers to questions that are an explicit part of the assignment or project. This course is officially administered using T-Square. All material will be turned in using T-Square according to the specific instructions of the assignment or project. Any changes of policy or due date will be announced on T-Square, and you are responsible for monitoring T-Square to obtain the latest information.

The projects and some of the assignments require you to turn in written reports. The format of these documents should adhere to Georgia Tech standards as described on the page linked to from the instructor’s notes.

10 - Grading

There are several means by which your performance will be evaluated for this course. First are quizzes that you will take while watching lessons on Udacity. These quizzes are not graded. But are included to evaluate your understanding of material as you follow along.

In terms of graded evaluation, this course includes projects, assignments, class participation and an exam. The projects and some of the assignments are team based. And all members of the team will receive the same score on that submission.

That said, you will have an opportunity to comment on the contributions, or lack there, of your teammates. Those comments will become part of their class participation scores. The staff of this course, will make a strong effort to express the grading criteria for each deliverable, as explicitly as possible. Moreover, it is our intent to provide you accurate, prompt and informative feedback on your work. Should you have any questions about a grade you receive, please send an email to the head TA.

Do not post a question about grades on Piazza. Any general announcements about grading, will be made by the staff using T-Square.

11 - Class Participation

As I mentioned earlier, I can’t really teach you software design. You have to actively learn it. To encourage this, part of your grade for the course will be a measure of your participation in it. This is necessarily a subjective element, but I can let you know of some of the considerations that go into it.

First is your teammates’ evaluations of you on the projects and assignments.

Also your engagement in the quizzes that are part of the lessons. Third is your non-gratuitous participation on the class form. I consider this course, itself, as a design project. Although it has been offered many times before, it has necessarily been adapted to deal with the constraints of web-based delivery and a large number of students. Therefore, I expect some elements will work better than others. I specifically would like to solicit your contributions, such as the following. First, any bugs in the material. These can be as trivial as typos, or as vague as questions about unclear lesson content.

If you have any suggestions for additional content, as long as the suggestions fit within the general intent of the course. Also, specific examples, either generated by you or ones that you have seen that were particularly edifying.

Alternative assignments or assignment questions. Even suggestions for style elements that might be added to the course. In general, the first contributor on a particular item will get primary credit for that contribution.

12 - Resources

As part of this course, you’ll be given access to a virtual machine that contains an environment and tools that should aid your work for the course. For example, the virtual machine has ARGO UML, a UML-aware drawing tool. You are not required to use ARGO UML, but it may enable you to get started more quickly with the UML related work.

There are other tools such as Eclipse installed as well. In addition to the virtual machine you should also be aware of the class resources page. It not only contains links to all the courses required readings, but other items referenced in the lessons, and some pointers. That should allow you to dig deeper into topics that interest you.

I encourage you to explore. Also, if you are aware of other interesting resources, let us know on the class forum and we will add them to this page.

13 - Conclusion

Thanks for sticking with me through this introduction. I look forward to seeing your contributions and hope you find the course engaging and enlightening.