Site uses cookies to provide basic functionality.

OK
Query
Tags
Author
Link Quote Stars Tags Author
c14f457 By far the most common project risks in software development are poor requirements and poor project planning, thus preparation tends to focus on improving requirements and project plans. Steve McConnell
60857bf Global data is generally subject to two problems: routines operate on global data without knowing that other routines are operating on it, and routines are aware that other routines are operating on the global data but they don't know exactly what they're doing to it. Steve McConnell
7817a4c you shouldn't be uneasy about any parts of the architecture. It shouldn't contain anything just to please the boss. It shouldn't contain anything that's hard for you to understand. You're the one who'll implement it; if it doesn't make sense to you, how can you implement it? Steve McConnell
553592b The first conclusion is that we now know with certainty that peopleware issues have more impact on software productivity and software quality than any other factor. Steve McConnell
fa25ba2 it's better to strive for a good solution and avoid disaster rather than trying to find the best solution Steve McConnell
b1b3c44 Even if you do a few things right, such as making high use of modern programming practices, you might still make a mistake that nullifies your productivity gains. Steve McConnell
9bb6595 Classes and routines are first and foremost intellectual tools for reducing complexity. If they're not making your job simpler, they're not doing their jobs. Steve McConnell
b52b692 in the vast majority of systems, efficiency isn't critical. Steve McConnell
b359e93 defect corrections have more than a 50 percent chance of being wrong the first time Steve McConnell
df0c51a Hurrying to solve a problem is one of the most time-ineffective things you can do. Steve McConnell
70c23d1 There is no code so big, twisted, or complex that maintenance can't make it worse. Steve McConnell
398c613 One key to successful programming is avoiding arbitrary variations so that your brain can be free to focus on the variations that are really needed. Steve McConnell
15a3475 The process is called estimation, not exactimation. --Phillip Armour Steve McConnell
8051137 The gap between the best software engineering practice and the average practice is very wide--perhaps wider than in any other engineering discipline. A tool that disseminates good practice would be important. -- Fred Brooks Steve McConnell
ac17c9e When in doubt, use brute force. Steve McConnell
14bc00c Programmers who program "into" a language first decide what thoughts they want to express, and then they determine how to express those thoughts using the tools provided by their specific language." Steve McConnell
495474c Eighty percent of the errors are found in 20 percent of a project's classes or routines Steve McConnell
91efda6 In software, consultants sometimes tell you to buy into certain software-development methods to the exclusion of other methods. That's unfortunate because if you buy into any single methodology 100 percent, you'll see the whole world in terms of that methodology. In some instances, you'll miss opportunities to use other methods better suited to your current problem. Steve McConnell
3255303 the error rate in manual testing is comparable to the bug rate in the code being tested. Steve McConnell
65eff3c One effective approach is to determine a range of accuracy that is acceptable and then use a boolean function to determine whether the values are close enough. Steve McConnell
8484f75 code reading detected about 80 percent more faults per hour than testing Steve McConnell
145aabd An algorithm gives you the instructions directly. A heuristic tells you how to discover the instructions for yourself, or at least where to look for them. Steve McConnell
45b0ceb Quicksort a few times, but what are the odds that your custom version will be fully correct on the first try? Steve McConnell
701c99a Another good reason to create a class is to model an abstract object--an object that isn't a concrete, real-world object but that provides an abstraction of other concrete objects. A good example is the classic Shape object. Circle and Square really exist, but Shape is an abstraction of other specific shapes. Steve McConnell
25f5065 Isolate complexity. Complexity in all forms--complicated algorithms, large data sets, intricate communications protocols, and so on--is prone to errors. If an error does occur, it will be easier to find if it isn't spread through the code but is localized within a class. Changes arising from fixing the error won't affect other code because only one class will have to be fixed--other code won't be touched. If you find a better, simpler, or m.. Steve McConnell
5a8ddcd Hide global data. If you need to use global data, you can hide its implementation details behind a class interface. Working with global data through access routines provides several benefits compared to working with global data directly. You can change the structure of the data without changing your program. You can monitor accesses to the data. The discipline of using access routines also encourages you to think about whether the data is r.. Steve McConnell
c5f136c Streamline parameter passing. If you're passing a parameter among several routines, that might indicate a need to factor those routines into a class that share the parameter as object data. Streamlining parameter passing isn't a goal, per se, but passing lots of data around suggests that a different class organization might work better. Steve McConnell
fdca2f3 NASA's Software Engineering Laboratory studied ten projects that pursued reuse aggressively (McGarry, Waligora, and McDermott 1989). In both the object-oriented and the functionally oriented approaches, the initial projects weren't able to take much of their code from previous projects because previous projects hadn't established a sufficient code base. Subsequently, the projects that used functional design were able to take about 35 percen.. Steve McConnell
4da5f69 NASA identifies reuse candidates at the ends of their projects. They then perform the work needed to make the classes reusable as a special project at the end of the main project or as the first step in a new project. This approach helps prevent "gold-plating"--creation of functionality that isn't required and that unnecessarily adds complexity." Steve McConnell
996dc08 Containment is the simple idea that a class contains a primitive data element or object. A lot more is written about inheritance than about containment, but that's because inheritance is more tricky and error-prone, not because it's better. Containment is the work-horse technique in object-oriented programming. Steve McConnell
d93d18f developers' estimates tend to have an optimism factor of 20 to 30 percent Steve McConnell
c16e058 Be critical of classes that contain more than about seven data members. The Steve McConnell
33b8ff5 If a class contains more than about seven data members, consider whether the class should be decomposed into multiple smaller classes (Riel 1996). You might err more toward the high end of 7+-2 if the data members are primitive data types like integers and strings, more toward the lower end of 7+-2 if the data members are complex objects. Steve McConnell
b4d45dc Inheritance is the idea that one class is a specialization of another class. The purpose of inheritance is to create simpler code by defining a base class that specifies common elements of two or more derived classes. The common elements can be routine interfaces, implementations, data members, or data types. Inheritance helps avoid the need to repeat code and data in multiple locations by centralizing it within a base class. When you decid.. Steve McConnell
a38874a Implement "is a" through public inheritance. When a programmer decides to create a new class by inheriting from an existing class, that programmer is saying that the new class "is a" more specialized version of the older class. The base class sets expectations about how the derived class will operate and imposes constraints on how the derived class can operate (Meyers 1998)." Steve McConnell
c7fe5ad Avoid duplicate code. Undoubtedly the most popular reason for creating a routine is to avoid duplicate code. Indeed, creation of similar code in two routines implies an error in decomposition. Pull the duplicate code from both routines, put a generic version of the common code into a base class, and then move the two specialized routines into subclasses. Steve McConnell
db1545c The underlying message of all these rules is that inheritance tends to work against the primary technical imperative you have as a programmer, which is to manage complexity. For the sake of controlling complexity, you should maintain a heavy bias against inheritance. Steve McConnell
fa18b00 Here's a summary of when to use inheritance and when to use containment: If multiple classes share common data but not behavior, create a common object that those classes can contain. If multiple classes share common behavior but not data, derive them from a common base class that defines the common routines. If multiple classes share common data and behavior, inherit from a common base class that defines the common data and routines. Inher.. Steve McConnell
1b0993f developer testing should probably take 8 to 25 percent of the total project time. Steve McConnell
59dd2b9 Immature testing organizations tend to have about five clean tests for every dirty test. Steve McConnell
3678a20 Mature testing organizations tend to have five dirty tests for every clean test. Steve McConnell
158ab13 it's done by creating 25 times as many dirty tests Steve McConnell
8ad80fc Be sure that the names you choose favor read-time convenience over write-time convenience. Steve McConnell
afa61f0 The most challenging part of programming is conceptualizing the problem, and many errors in programming are conceptual errors. Because Steve McConnell