Você está na página 1de 5

Chapter No 1:

The Software Problem

[2 hrs

5 M]

Comparison to Other CS disciplines  Software Engineering focuses on the development of software generically
o

Other disciplines, such as databases, operating systems, compilers, etc., focus on particular software products

 It is also different in that it has a strong focus on process and is an attempt to turn software development into an engineering discipline
o

Software Engineering is the systematic approach to the development, operation, maintenance, and retirement of software systems

Thought Experiment  you are given a description of a software system and you estimate, based on prior experience, that such a system would be approximately 10,000 lines of Java code  Assuming that the problem domain does not require specialized expertise, how long would it take you to build a 10,000 line program? Discussion  Most students would answer 1 to 3 months  Assume a student finishes the project in 2 months, that would result in a productivity of 5,000 lines of code (LOC) per month.  We can point out that across industries, professional software development teams average somewhere on the order of 100 LOC per month to 1000 LOC per month  Assuming the latter rate, a professional software development team would require 10 months to build a system that meets the same requirements that our hypothetical student did in two months

Answer  Two different systems are being built: a student system and an industrialstrength software system  What are the differences? Student Software Developer is the User
y y y

Industrial-Strength Software Client is the User


y y y

Bugs are tolerable UI not important No documentation

Bugs are not tolerated UI is important Lots of documentation

Software not in critical use Reliability, robustness not important No investment Does not care about portability Key difference
y y

Supports important business functions Reliability, robustness very important Heavy investment Portability allows a company to market a product on multiple platforms

Quality According to the international standard on software product quality, software quality is defined with respect to six main attributes. These attributes are:

Quality Attribute Definition Functionality Reliability Usability Efficiency Maintainability The system fulfills its requirements The system provides consistent performance The ease at which users can acquire skill with the system The system provides performance relative to its resources The system can be modified to make corrections, improvements/ adaptations

Portability

The system can be adapted to other platforms

Reliability is often ranked as the most important quality attribute. If a system is unreliable, users will stop using it.

SE challenges  In general, software engineering has as its goal the creation of a software system that meets the needs of its users.  In particular, we need to develop methods that make developing particular classes of software systems repeatable. That is, if the methods are used by different teams of developers, similar software is produced.  Software engineers encounter several challenges to meeting this goal, including:
o o o o

Scale Quality and Productivity Consistency and Repeatability Change

Scale Developing large systems requires different techniques than developing small systems Quality and Productivity Engineering disciplines are driven by the practical parameters of cost, schedule, and quality  A solution that takes enormous resources and many years to complete may not be acceptable  A poor quality solution may not be much use, even if its low costs or completed quickly
y

In software engineering, productivity (measured in KLOC per person-month) can encapsulate both cost and schedule concerns o As productivity goes up, the cost per person-month goes down. (The same work can be done in fewer person-months) o In addition, as productivity goes up, the amount of time it takes to finish a project goes down

Consistency and Repeatability

y An organization involved in software development not only wants high quality and productivity, it also wants these things consistently y Consistency of performance is an important factor for any organization; it allows an organization to make predictions and estimates for future projects y The SE community has looked at these issues and developed standards for organizations to follow to help them achieve consistency

Change
y

A big problem in software development is that "things change" all the time: requirements change or new requirements are added

y y

And, these changes occur rapidly, challenging our ability to deal with the changes Fred Brooks cites changeability as one of the four "essential difficulties" that faces software development
o

The other three are complexity, conformity, and invisibility

Software is under constant pressure to change, because our clients tend to think that all software change requests are equal
o

This does not occur in most other engineering disciplines because their products are tangible, unlike software

Consider the phases of building a house. Homeowners understand that making changes during the "blueprints" stage is easy. They know that their architect can make the change at relatively low cost

Likewise, homeowners understand that if they want to make a change after the foundation has been poured, that it gets much more expensive. Concrete has to be removed, and then new concrete has to be poured at great cost!

Software doesn't provide such affordances, a user can ask a developer to change the color of a UI element and ask that the software support multiple users in the same sentence without batting an eye!


As such, developers must work with clients to make them understand the severity of particular change requests

Agile Design methods arose out of the needs to be able to handle rapid change in software development. Over the course of the semester, we'll look at how change impacts traditional software development and how Agile Methods attempts to mitigate those impacts

A software engineer creates software through the practice of software engineering. Software is the product; software engineering is the process to create the product.

Você também pode gostar