Lecture 0

advertisement
CSCI 6231: Software Engineering
Instructor: Morris Lancaster
Web Page
http://www.seas.gwu.edu/~mlancast/csci6231
CSCI 6231 Lecture 0
2
Instructor
Morris Lancaster
– (703) 400 6408
– lancaster_morris@bah.com
– Office hours by appointment
CSCI 6231 Lecture 0
3
SWE Courses
• Domain Specific
– Aeronautical/Aerospace
• Level of Detail/Process Oriented
– Overview course from a civil/environmental eng. Dept
– Elements of Software Construction from a CS department
CSCI 6231 Lecture 0
4
Openly Available Resources
• Software Engineering Courses/Course Notes
– MIT Open Courseware
– Open Software Engineering
– Free Open Courseware Page
• Open Source Tools
– At the Development Level Another
– At the Project Management Level Another
• Professional Societies
– Association for Computing Machinery SigSoft
– IEEE
CSCI 6231 Lecture 0
5
Software Engineering
“the application of engineering to software” – IEEE
Std 610.12 -1990, Standard Glossary of Software
Engineering Terminology (ANSI)
“the multi-person construction of multi-version
software” - Parnas
CSCI 6231 Lecture 0
6
Course Approach
Present the background body of knowledge found in
the text
Use a team project to provide some hands on
experience for a development effort (the teams
will define, estimate, plan, provide management
reviews, develop, test, implement and present their
projects)
CSCI 6231 Lecture 0
7
Programming versus Software Engineering
Programming – a personal activity
Structured programming did not solve our
problems
Software Engineering – team activity
Software Engineers emerged (honest brokers,
heroes, and snake oil salesmen)
CSCI 6231 Lecture 0
8
Role of Software Engineering
In overall system design
Software is a component of larger systems
Software engineers now participate in the design of
the whole system (some arrogance among systems
engineers still remains, which often times pushes
them on to the next project before the roof caves
in)
CSCI 6231 Lecture 0
9
Software Engineering Choices
Trade-off
Hardware, software, or elbow wear
Compromise
Good, fast, cheap (pick 2)
Performance, schedule, cost
CSCI 6231 Lecture 0
10
Software Engineering Environment
Risk
Cost
Schedule
Performance
We hope to address some principles that will
withstand the changes in how we develop large
software products
CSCI 6231 Lecture 0
11
Software Engineering History
In the beginning was the machine language programmer who
addressed well understood problems that had to be solved
quickly
Computers became cheaper and high level languages emerged
- programming became a profession
- user and programmer became separate
- user wrote specification and programmer implemented
- still very few large projects
- reuse through subroutines
CSCI 6231 Lecture 0
12
Software Engineering History
1960’s
- MIT (MULTICS Project) link link
- IBM OS 360 (Over 1 staff century of labor)
-- Fred Brooks – Mythical Man Month link
- Scaling of development efforts was difficult - folklore
- Structured Programming – Harlan Mills
- The problems being solved were not well understood
(lots of basic research in operating systems conducted)
- Basic concepts emerged, reuse through libraries,
modularity, pathological coupling (later used in structured
design)
CSCI 6231 Lecture 0
13
Software Engineering History
1970’s
- Even cheaper computers micro mini
- Range of problems attacked grew
- Many failures
- Emergence of structured design
-- cohesion
-- coupling
- Team efforts addressed
- Still much communication by folklore
CSCI 6231 Lecture 0
14
Software Engineering History
1980’s
- Even cheaper computers and larger number of
programming languages
- DoD attempts to solve manpower problems by
mandating Ada
- In the programming genre encapsulation and
abstract data types emerged
- Serious metrics and whole life cycle
methodologies emerged
CSCI 6231 Lecture 0
15
Software Engineering History
1990’s
- Even cheaper computers, industry settles on C/C++,
Academia uses C++ and moves toward Java, Ada all but
dies
- Java language was developed
- Industry products developed that incorporated business
logic (the reuse concept that began with subroutines,
matured with abstract data types and object oriented
development, was now applied to whole areas of business)
- Whole life cycle methods continued, new development
concepts emerge to break the long time frame of the
waterfall model – rapid prototyping, agile development
- Components emerge from middleware
CSCI 6231 Lecture 0
16
Engineering
- The solution to an engineering construction or design
problem can either be visualized, or is the result of a
selection from a possible set of alternatives that can be
“constructed” directly by piecing together components
with known characteristics and capabilities. (We can
visualize a house, draw a scale model, pick the appropriate
components to meet the underlying requirements at each
point, and produce a result.
CSCI 6231 Lecture 0
17
The Software Life Cycle
- Requirements Analysis and Specification (expressed in some
form A)
- System Design and Specification (expressed in form A and B)
- Coding and Testing (results in a program and the necessary
artifacts to document the program, expressed in form C)
- Integration and system testing (parts are put together and tested,
test results communicated in form D)
- Delivery and Maintenance (system is operational, with changes
to remove defects and meet new requirements)
(THE WATERFALL MODEL)
How do we connect these representations so that the
transitions can be verified?
CSCI 6231 Lecture 0
18
Relationship of SWE to Other Areas of
Computer Science
Programming Languages
- modularity, encapsulation, reuse
Operating Systems
- virtual machines, portable OS
Databases
- most computation is processing information
Artificial Intelligence
- large, complex, and not fully understood systems were
developed
Theoretical Models
- from 210, remember the logical and algebraic paradigms,
CSCI 6231 Lecture 0
19
Relationship of SWE to Other Disciplines
Management Science
As much of an oxymoron as software
engineering? Not really, the difficulty is in
understanding the degree of precision with which
we can work.
Systems Engineering
Leave the difficult problems for the software?
CSCI 6231 Lecture 0
20
Chapter 1
Some Key Points of Chapter 1
- Two kinds of challenges in software development,
essential and accidental
-- accidental problems can be remedied
-- essential problems are more of an issue
- Complexity is our enemy, it increases risk
-- complexity of the problem
-- complexity due to size of project
CSCI 6231 Lecture 0
21
Download