250 likes | 396 Views
CS746 Software Architecture Organizational Meeting. Instructor: Prof. Richard C. Holt TA: Jingwei Wu. Overview. Course Assignments and Project Introduction to JGrok Algebraic Calculator BFX-based Architecture Extraction Pipeline Volunteers to present papers next week. Course Assignments.
E N D
CS746 Software Architecture Organizational Meeting Instructor: Prof. Richard C. Holt TA: Jingwei Wu
Overview • Course Assignments and Project • Introduction to JGrok Algebraic Calculator • BFX-based Architecture Extraction Pipeline • Volunteers to present papers next week
Course Assignments • Case software system: Mozilla • Three course assignments • Conceptual architecture (Documented) • Concrete architecture (Implemented) • Architecture refactoring • Historical (Evolutionary evidence) • Future (Forward engineering) • Each assignment takes two weeks • Team work (2~3 persons per team)
Conceptual Architecture • Read a wide variety of software documents • Release notes • Developer docs • Technical article • Research papers • Source code comments • Previous course reports on Mozilla • Warning: The architecture of Mozilla has been fundamentally altered. You cannot simply “reuse” previous course material. • The goal is to understand the software domain
Conceptual Architecture Cont. • Submit a technical report on the conceptual architecture of Mozilla. • Describe major components • Describe component interactions • Clarify architectural style and principles • Concentrate on goals and requirements • Concurrency, evolvability, performance, etc. • Submission date: Tuesday, Sept. 28, 2004.
Concrete Architecture • Extraction • Mozilla implemented in C/C++ • We use BFX, a binary file extractor • Abstraction • Construct containment hierarchy • Larger subsystems contain smaller subsystems • View/Edit • We use LSEdit, a landscape view editor
Concrete Architecture Cont. • Submit a technical report on the concrete architecture of Mozilla. • Organization similar to Assignment I • Describe the architecture at the highest level of abstraction • Describe at least one of the top-level subsystems • Explain why the conceptual and the concrete disagree • Submission date: Tuesday, Oct. 19, 2004
Architecture Refactoring • Two options for this assignment • Historical architecture refactorings • Document architectural changes in the past • Understand how the architecture evolved over time • Extract several versions (at least THREE) • Future architecture refactorings • Describe a desirable feature • Identify an architectural problem • Refactor the current architecture • Focus on the most recent version • Report Submission date: Tuesday, Nov. 09, 2004
Course Project • Five Options • Architecture Refactoring – Future • Architecture Refactoring – Historical • Architectural Repair • New Tools • New Landscapes • Project due: Tuesday, Dec 07 2004
Introduction to JGrok • A simple scripting language • A relational algebraic calculator • Powerful in manipulating binary relations • Widely used in architecture transformation • Online documentation http://swag.uwaterloo.ca/~j25wu/projects/grokdoc/index.html http://swag.uwaterloo.ca/~nsynytskyy/grokdoc/index.html
JGrok Features • Set operations • Union (+), intersection (^), subtraction (-), cross-product (X) • Binary relation operations • Union (+), intersection (^), subtraction (-), composition (o, *), cat-composition (**), projection (.), domain (dom), range (rng), identity (id), inverse (inv), entity (ent), transitive closure (+), and reflective transitive closure (*) • Graph pattern matching (like Prolog) data[id,name,salary] = { @name[id,name]; salary[id,salary]; } • Relation selection, projection data[&1 =~ “Peter.*” && &2 > 50000] names = data[&1, &2];
JGrok Features Cont. • Programming constructs • if else • for, while • Arithmetic, comparison, logical operators • +, -, *, /, % • <, <=, ==, >=, >, != • !, &&, || • Regular expression matching • =~, !~ functions[&0 =~ “nsFrame.*”]
JGrok Scripts (1) $ jGrok >> cat = {“Garfield”, “Fluffy”} >> mouse = {“Mickey”, “Nancy”} >> cheese = {“Roquefort”, “Swiss”} >> animals = cat + mouse >> food = mouse + cheese >> animalsWhichAreFood = animals ^ food >> animalsWhichAreNotFood = animals – food >> animalsWhichAreFood Mickey Nancy >> animals – food Garfield Fluffy >> #food 4 >> mouse <= food True >> >> chase = cat X mouse >> chase Garfield Mickey Garfield Nancy Fluffy Mickey Fluffy Nancy >> >> eat = chase + mouse X cheese >> eat Garfield Mickey Garfield Nancy Fluffy Mickey Fluffy Nancy Mickey Roquefort Mickey Swiss Nancy Roquefort Nancy Swiss
JGrok Scripts (2) >> {“Mickey”} . eat Roquefort Swiss >> eat . {“Mickey”} Garfield Fluffy >> >> eater = dom eat >> food = rng eat >> chasedBy = inv chase >> topOfFoodChain = dom eat – rng eat >> bottomOfFoodChain = rng eat – dom eat >> bothEatAndChase = eat ^ chase >> eatButNotChase = eat – chase >> chaseButNotEat = chase – eat >> secondOrderEat = eat o eat >> anyOrderEat = eat + • Programming constructs • if expression { • statements • } else { • statements • } • while expression { • statements • } • for variable in expression { • statements • }
Source code Prep. code Object code Executable CPP GCC LD Und C/C++ Island Extractors CPPX BFX LDX Wrapper Transformer Transformer Transformer Transformer Transformer Source Models BFX-Based Pipeline LDM Landscape Viewer System Models Aerie Extraction Pipelines
BFX-Based Pipeline Source code Step 1 Build Hierarchical Decomposition Object code Step 2 BFX Program facts Step 3 Link Step 4 Add contain Step 5 System Models LSEdit
BFX-Based Pipeline: Step 1 • Build the system • Download Mozilla (http://www.mozilla.org/) • Download Mozilla 1.7.2 • Download the latest development version via CVS • Build Mozilla • Use default build scripts (make utilities) $ cd mozilla $ gmake –f client.mk build
BFX-Based Pipeline: Step 2 • Extract facts using BFX $ cd .. $ bfx `find mozilla -name “*.o”` -o mozilla.bfx.ta Extract facts from each object module and write all facts to an output file called “mozilla.bfx.ta”.
BFX-Based Pipeline: Step 3 • Link extracted facts (resolve references to external definitions) $ jGrok $QLDX/script/bfx/rawlink.ql mozilla.bfx.ta mozilla.raw.ta Extract facts from each object module and write all facts to an output file called “mozilla.raw.ta”.
BFX-Based Pipeline: Step 4 • Create a hierarchical subsystem decomposition • Create a contain file called “mozilla.contain” in RSF contain mozilla editor.ss contain mozilla layout.ss contain layout.ss html.ss contain html.ss mozilla/layout/html/document/src/nsFrameSetFrame.o • Impose contain on raw data (file-level graph) $ jGrok $QLDX/script/bfx/addcontain.ql mozilla.contain mozilla.raw.ta mozilla.con.ta
BFX-Based Pipeline: Step 5 • Create landscape views • Add schema $ schema mozilla.con.ta mozilla.ls.ta • Edit views $ lsedit mozilla.ls.ta
Volunteer Presenters • Bowman: Linux as Case Study: Extracted Architecture Presenter: Omar Zia • Garlan and Shaw: Introduction to Software Architecture Presenter: Alan Grosskurth