Software Engineering - Computer Science - Computer Engineering

Software Engineering - Computer Science - Computer Engineering

Post by GS » Sun, 10 Mar 2002 08:00:05



Computer Science -
  Teaches the fundamentals of programming
     Languages  (Basic, COBOL, C, C++, Ada, PL-1, Java, Assembly etc)
     Data Structures (linked lists, queues, stacks)
     Algorithms (will teach specifics of using a language to
accomplish some functionality  ( binary tree searching, ray tracing,
waveform analysis )
     Compiler Theory (Algorithms specifically to interpret word/symbol
sequences that define a Computer Language)
     Artificial Intelligence
     Computer Graphics (graphics specific data structures, algorithms
and in advanced courses Toolset to accomplish ray tracing, animation)
     Databases (how to structure data relationship, Database languages
like Structure Query Language (SQL)
     Operating System (Teaches how computers access devices from a OS
software device driver, how to prioritize sequence of process, access
communication devices, displays, and drives, disk structures (File
Allocation Tables), BIOS Basic Input Output System )

     Systems Analysis ( In the 60/70/80's this was the means by which
the process of identifying the needs of a customer were gathered and
the prototypes of screen displays, algorithm implementation, and
report generation, and identification of current business process
(Manual or Mixed (Computer/Manual) are analyzed and a Analysis is made
of what should be Computerized and what may stay manual.

     Software Engineering ( usually limited to a single College Junior
or Senior level course in a B.S Computer Science (CS) degree (1990's
to present)) - discusses the systematic process of developing software
which use the disciplines mentioned in the other categories withing
Computer Science. This is a general overview course.  This is covered
as a complete Masters Program at universities like Carnegie Mellon
University, Pennsylvania, USA.

Failings of CS Degree -  Generally does not promote projects that
contain Large Group Development ( 7-30 people working on a single
application) Reference BROOKS "Mythical Man Month" affects of large
group development.
                         It does not teach the disciplines of
(Analysis, Design, Test)of Software Product Design mention in any
great detail .  I leave out Code because it is the most work performed
by any CS major, writing code.  The developed college programs often
have little analysis, design, or testing artifacts that support "what"
the Source Code was to do, "how" the Design fulfills the requirements,
and "Tests" that show the robustness of Design & Implementation
[source code = algorithms + data structures + language syntax +
compiler directives], and Verifies that Requirements are indeed
incorporated into Design, Code and truly meet the customer's desired
functionality, and performance Requirements.

In the late 80's Carnegie Mellon University at the urging of the US
Department of Defense founded the Software Engineering Institute
(SEI).  .."It mission is to provide leadership in advancing the state
of the practice of software engineering to improve the quality of
systems that depend on software." ISBN 0-201-54664-7, Tha Capability
maturity model (SEI series) primarily due to failures of large
programs like B1 bomber program was delivered 3 years late. (scheduled
4 year development, delivered in 7th year).

It found that the characteristics of any organization's ability to
develop software in a predictable manner which exhibits timely
delivery and quality had the following Key Process Areas mastered.  I
have shortened the list to deal with what I feel are the minimum areas
of understanding that any general Computer Science, Software Engineer
or Computer Engineer must possess if he/she is expecting to work in a
company (Consultant,Public,Private) in development of
commercial/military based applications.  These disciplines must also
be practiced in applications which will have an enduring maintenance
period and constant rotation of developers (CS,SE,CE).  The work
products are configuration managed and archived will provide a
significant amount of "bread crumbs" ,hansel & gretel childrens story,
for those individuals who must analyze, design, and code the updates
to your original work. Your sucessors will search endlessly for the
"What", "How", and "Does it or Did it ever work or Does it work as
previously intended... Test" before there is great confidence in the
complete package.

   Software Capability Maturity Model (SW-CMM v 1.1)
The disciplines of Software Engineeing are:
   Requirements Management                  |
   Software Project Management              |
        -  Software Project Planning        |=> This group is Level 2
        -  Software Project Tracking        |   of SEI SW-CMM v 1.1
   Software Configuration Management        |
   Software Quality Assurance               |

   Software product engineering             |=> This is a element of
                                            |   Level 3
        -  Software Requirements Analysis |     of SEI SW-CMM v 1.1
        -  Software Design                |
        -  Software Coding                |
        -  Software Testing               |
   Peer Review                              |=> This is a element of
                                            |   Level 3
                                                of SEI SW-CMM v 1.1

Software Engineering
   Deals with the understanding of the entire organization which
develops software.  I would call Software Engineering the equivalent
knowledge of an MBA candidate who knows what the interrelationship of
Business functions are and the affects they have on each other, but
generally does not practice or is considered an expert in any one
discipline.  If I reengineered a business organization I would be at
the Macro level, the interrelationships, and not on the details (i.e
How do I use web technology to perform Marketing).  In Mastering
Software Engineering you should be able to anticipate and understand
the cause and effect relationship of successful/unsuccessful execution
of the Disciplines of Software Engineering explained above.

   The Software Engineer is examining the broad understanding of
developing applications from a organizational level that I do not
consider it a starting point of a career.  As you enter the market
place you will fall into one or more of the categories of disciplines
mention above.  The size of the company will dictate weather this is a
formal position "Configuration Management/Document Control",
"Software", "Testing".  You will find these positions in companies
like IBM, NASA, Military Subcontractors, and commercial applications
developers which model after these agencies.  In other companies these
activites may be performed by the entire project team or subset of the
team whether stated formally (Project Development Plan) or informally
( Joe will design the archtecture and subsystem interfaces).   In
"Adhoc" companies there is cursory understanding of the disciplines
and the cause and effect relationship they have on the "Product" and
how it satisfies the customer or its oversite group for safety
(example: Sales Dept, Ford, GM, US Air Force, US Food & Drug
Adminstration).

   The Software Engineer can understand the fundamental aspects of the
development process and propose changes to the organization, its
processes in the quest for improved development cost containment,
ontime delivery, correct functionaility, organizational productivity
and quality and safety of the product.

   If an individual aspires to run a Software Development organization
or team I would recommend the study of Software Engineering as a
Masters program.

   It should be a Intership based program similar to many architecture
programs.  You must learn the disciplines of Software Engineering and
then practice them.  A Masters program should gear all Lecture courses
programs/document assignments toward a single project objective which
is performed as a Large Team in the following semester.  The project
should evolve as a realworld development with all disciplines of
software engineering participating.  reference
http://www.stsc.hill.af.mil/doc/index.asp Reference  look for Mil-STD
498 (SOFTWARE DEVELOPMENT AND DOCUMENTATION)

  Example:
     Semester 1
         System Planning,  Systems Development Lifecycle
         Systems Product Development
               Systems Requirements
               Systems Design
               Systems Testing
         Software Planning, Software Development Lifecycles
         Software Quality Assurance
         Software Configuration Management

     Semester 2
         Project develops organzational structures and responsibilites
         Systems data is created/received (Program Plans,
Requirements, Test Requirements) based on Development type Concept
prototype, Production intent, and LifeCycle selected.
         Software Development Organization is established
         Software Plan is outlined by early System Plan milestones and
post delivery Milestones.
         Software Quality Assurance identifies plans for ensuring
quality in all Software Engineering activities
         Software Configuration Management prepares methods for
identifying, controlling and tracing changes to work products. It also
assures control groups are established to regulate change based on
organizatonal objectives. (ex. System Plan/Cost overruns, Software
Plan/Cost overruns, Interorganizational Plan/Cost overruns (Hardware
changes, Testing changes, repeating System Validation)).

     Semester 3
         Software Planning (part 2)
         Software Tracking
         Software Product Development
                 Software Analysis
                 Software Design
                 Software Coding (learned in CS, CE)
                 Software Integration
                 Software Testing
         Peer Review
         Metrics

    Semester 4
         Update Software Plan - partition time for Software Analysis
                              - identify development environment and
long lead
                                  purchases
         Software Analysis proceeds generates a Software Requirements
Specification
            (pick your technique: Structured Analysis, Object Oriented
-UML - (Use case, Sequence Diagrams, Collaboration, Class diagrams),
State Charts, Data Flow Diagrams, HIPO - Hierarchical Input Process
Output.

                reference SRS
http://www.raycomm.com/techwhirl/softwarerequirementspecs.html

         Software Analysis reviewed
         Software Quality assurance ensure analysis conducted and
verifies all System Requirements are appropriately incorporated in
Software Analysis (traceability)
         Software Testing verifies that all Software Requirements are
testable.
         Configuration Management establishes Allocated baseline
         Software project manager tracks creation of analysis items
         Software project manager tracks execution of review(s)
         Software project manager/design lead plans Design phase
milestones and reviews
         Software Design proceeds
            (pick your technique flow charts, pseudo code, structured
english,
                  structure charts, UML - (Class, Collaboration,
Sequence Digrams, State Charts, Activity Diagrams) diagrams,
Specification Design Language (SDL))
         Software Testing beings developing plans on milestones for
creation of testing documents (test plan, test designs, test cases,
test procedures, execution of test, test report)
         Software project manager/design lead/Test lead identify the
integration of design elements to best verify Software Requirements
Specification implementation and testing process as Software Design
evolves.
         Software Design reviewed
         Software Test looks at Software Design (Will design fail, how
do I test, what software requirement are satisfied)
         Software Quality Assurance reviews Software Design (review
process, design compliance to standards, strength of design, are all
software requirements satisfied)
         Software Code proceeds to implement Software Designs in
source code.  The sequence is determined on integration build sequence
agreed upon by Software and Test.
         Software Configuration Management is aware of the required
sequence of elements to be placed under control.  The changes to
Analysis (Software Requirements), and Designs are reviewed for impact
to work already reviewed.  It provides hard numbers on the number of
issues outstanding, affected products, and issues current state or
disposition (closed,open,in-progress) and targetted product version
for closure of issue.

         Software Code is reviewed
         Software Quality Assurance ensure review processes are
adheared too, coding standards are adheared too, review preparation
was adequate. Software Code has properly implemented Software Design
and the Software Requirements allocated to the Software Design item.

         Software Test assures that Unit test are developed based on
Software Design.
         Software Test/Design/Code may execute Unit test and record
results

         Software Design/Code or Test will integrate source units and
perform Integration testing if required to prove implementation of
Software Requirements.

         Software/System Test will perform System Testing to ensure
that the "products System" meets the Software Requirements which are a
representation of the System Requirements.

Computer Engineering
   Usually a field associated with Electrical Engineering deals with
the development of software targeted to a Embedded Microcontroller.
The device generally is not loaded with new programs once released
into the field as a products (example Air Bag controller, Engine
Controller, Microwave Oven, Cell phone).  (exceptions are
configuration of device, or Device design for reading data media,
example: GPS navigation mapping, Palm, Cell phones with ring tones,
pictures).
   The computer engineer will learn the fundamentals of Electrical
Engineering, and how to write software which utilizes the internal
architectures of a Microcontroller ( usually has devices such as
Analog to Digital converters, timers, Digital to Analog converters,
PWM, Phase Lock Loop circuits for clock generation) as well as the
understanding of control theory and circuit theory.

  A Computer Engineering is generally exposed to C and assembly
language for a particular microcontroller.  The Computer Engineer is
not often taught the principles of Software Engineering and is given
minimal exposure to Software Design principles.  It is generally
limited to Top Down and Functional Decomposition techniques with
little or no use of Applications Software.

WHAT IS SOFTWARE ENGINEERING?
  I hope that you have a sense that if you plan to write programs you
will use the skills of Computer Science or Computer Engineering as you
use Computer Languages.  If your processes document and extract "What"
to Build (Requirements), "How" the Program is structured (Design),
"Is" actually written using Computer Language, Data Structures, and
Algorithms (Implementation), and "Design Works" (Unit Test/Integration
Test), "Product Works" (System Test), "Product Works in Customer's
Implementation" (Acceptance Test) while managing the project with
Plans, Tracking Progress, Controlling intermediate products, and
controlling change you will have participated in an organization that
utilized Software Engineering principles.

If you want to form the organizations guiding principles and process
methods defined above you must become a master of Software
Engineering.

If you have no desire to be a manager, leader or director of a
software development organization the formal education is Software
Engineering will make you comfortable if a SOFTWARE ENGINEER(s) begin
to control the development infrastructure of your organization.

BIO -  EE Undergraduate 1980-1983
          1st IBM 1981
       BS Computer Science 1883-1985
       Commission US Air Force (2nd Lt)
       Graduate US Air Force Computer Communications Officer Training
-
           specialization - Plans & Program Management
       US Air Force - Maintenance Assembly Language SACDIN - SACCS
system
                      Missle Air Wing - Record Communication Network
Offut AFB
       US Air Force (1st Lt)
       US Air Force - Development Graphical Output Network Automated
Display System for SACCS Network Quality Control Center  (Object Based
Development -Ada)
       US Air Force - Short Course Systems Acquistion
       US Air Force (Capt)
       US Air Force - Technical Computer Communications Officer for
acquisition of New Air Force Missle Launch Control Facility Weapon
Console and Communications Console (REACT - Rapid Execution and Combat
Targeting program)
                      Technical Advisor to System Program Office and
HQ SAC REACT acquisition team at all Reviews/Technical Interchange
Meetings
       US Air Force - Planning Manpower, Facilities, and Organization
for REACT maintenance facilities
       US Air Force - HQ Air Training Command - Policies and
Procedures for Pentagon and HQ USAF.
       1992 Consultant/Training Automotive & Medical Industry (GM,
Siemens). Develop Embedded applications in Battery Control Module, and
Design and Configuration Management of Gamma Camera Devices
       1996 Consultant/EDS to GM Powertrain in Structured Analysis,
                                  Tools Development and Integration
                           to Delphi Energy and Engine Management =
                                  Tools Development and Integration
                           to Delphi Chassis = Structured Analysis,
                                  Tools Development and Integration
       1999 Engineer specializing in development of Software
Engineering Process for Embedded Software Development Group

       2001 Manager Software Design = Development of Production Intent
Air Bag Control Modules ( 2000, 2001, 2002, 2003 Ford Vehicles)

Feedback: gsu_enterpr...@yahoo.com

 
 
 

1. Computer Science Engineering vs. Computer Science

Hi,

I am 16 years old and am looking at colleges. Whenever I browse through the
programs I see C.S under engineering and its own category. What's the
difference.

If you have majored in computer anything, I'd appreciate it if you could
email me explaining the program. Anything will be great.

-Thanks


2. is lex useful?

3. PhD in Computer Science vs. Computer Engineering

4. shut down

5. Difference between Software Engineering and Computer Science degrees

6. Frontpage extention question.

7. BSc Software Engineering vs. BSc Computer Science

8. editors: VI, EMACS

9. Are Computer Engineers Really Engineers? Prove It!

10. hardware engineers, software engineers and systems engineers

11. CFP: ICSE16 Software Engineering and Human-Computer Interaction Workshop

12. Alternative Careers for Computer Scientists/Software Engineers