Sei sulla pagina 1di 16

Software Engineering

Key construction decisions Design challenges

Key construction decisions

Choice of programming paradigm, language and environment:

Can improve productivity, reliability, simplicity and comprehensibility by an order of magnitude Strongly influenced by previous experience

Experienced programmers in a language can be up to 30% more productive than nonexperienced ones Experience can take as much as three years to get

Key construction decisions

Architectural guidelines and programming conventions:

Many alternatives exist, coherence and discipline are important

Key construction decisions

Location on the technology wave:

End of the wave: bug-free compilers and environments, several alternative tools, powerful environments, good documentation, integrated tools, availability of courses and experts. Beginning of wave: buggy compilers and environments, few choices, primitive environments, poor documentation, lack of integration, inexperienced community pioneers in the wild.

Key construction decisions

Programmers should make good use of paradigm, language and environment, but... Programmers should program into the language, and not in the language (see next slides):

Key construction decisions

Programming in the language: language filters and determines patterns of reasoning about problem and its solutions

Programmer

Problem

Language

Key construction decisions

Programming into the language: programmer analyses problem based on their personal skills and techniques, and then makes good use of language to implement solution

Programmer

Problem

Language

Major construction practices

Major construction practices checklist:

Coding

How much design will be done before coding, and how much will be done just in time? Are conventions defined for names, comments and layout?

Major construction practices

Coding (cont):

Specific coding practices implied by architecture:


Handling of error conditions Security issues Conventions for class interfaces Standards applicable to reused code How much to consider performance while coding

Major construction practices

Coding (cont):

Positioning on the technology wave Programming in the language versus programming into the language Integration procedure specific steps a programmer must go through before checking code into the master sources

Teamwork:

Major construction practices

Teamwork:

Pair programming, individual programming, or some other policy? Will programmers write test cases for their code before writing the code itself? Will programmers write unit tests for their code regardless of whether they write them first or last?

Quality assurance:

Major construction practices

Quality assurance (cont):

Will programmers step through their code in the debugger before they check it in? Will programmers integration-test their code before they check it in? Will programmers review or inspect each others code?

Major construction practices

Tools:

Have you selected a revision control tool? Have you selected language, language version, and compiler version? Have you selected a framework such as J2EE or Microsoft .NET or explicitly decided not to use a framework? Have you decided whether to allow use of nonstandard language features? Have you identified and acquired other tools you will be using editor, refactoring tool, debugger, test framework, syntax checker, and so on?

Design challenges

Design is a wicked problem

Wicked problem (H. Rittel and M. Webber, 1973): can only be clearly defined by being solved. Consequently, optimised solution can only be achieved by solving problem once, learning from experience, throwing solution away and solving problem again.

Design challenges

Design is a sloppy process


When is design good enough? How detailed should it be? How formal? How just-in-time? When is it finished?

Design challenges
Design is about tradeoffs and priorities under constraints Design is nondeterministic Design is heuristic Design is emergent

Potrebbero piacerti anche