195 private int huntForYearContaining(int anOrdinalDay, int startingYear) {
196 int aYear = startingYear;
197 while (firstOrdinalOfYear(aYear) <= anOrdinalDay)
198 aYear++;
199
200 return aYear - 1;
201 }
202
203 private int firstOrdinalOfYear(int year) {
204 return calcOrdinal(1, Month.JANUARY, year);
205 }
206
207 public static DayDate createInstance(Date date) {
208 GregorianCalendar calendar = new GregorianCalendar();
209 calendar.setTime(date);
210 return new SpreadsheetDate(calendar.get(Calendar.DATE),
211 Month.fromInt(calendar.get(Calendar.MONTH) + 1),
212 calendar.get(Calendar.YEAR));
213
214 }
215 }
Приложение B. Перекрестные ссылки
Перекрестные ссылки для «запахов кода» и эвристических правил из приложения А организованы по принципу Номер_главы-Номер_страницы.
C1 | 16–306, 16–309, 17–323 |
C2 | 16–309, 16–312, 16–320, 17–323 |
C3 | 16-<$R[P#,R16–10]>, 16–312, 16–314, 17–323 |
C4 | 17–323 |
C5 | 17–324 |
E1 | 17–324 |
E2 | 17–324 |
F1 | 14–266, 17–325 |
F2 | 17–325 |
F3 | 17–325 |
F4 | 16–304, 16–314>, 17–325 |
G1 | 16–307, 17–325 |
G2 | 16–305, 17–326 |
G3 | 16–305, 17–326 |
G4 | 16–308, 17–326 |
G5 | 16–308, 16–313, 16–317, 16–320, 17–327 |
G6 | 6–128, 16–309, 16–311, 16–315, 16–318, 16–319, 17–328 |
G7 | 16–309, 17–329 |
G8 | 16–311, 17–329 |
G9 | 16–311, 16–312, 16–314, 17–330 |
G10 | 5–107, 16–311, 17–330 |
G11 | 15–295, 16–311, 16–314, 16–317, 17–330 |
G12 | 16–312, 16–313, 16–314, 16–315, 16–320, 17–331 |
G13 | 16–313, 16–314, 17–331 |
G14 | 16–314, 17–331 |
G15 | 16–315, 17–333 |
G16 | 16–315, 17–333 |
G17 | 16–315, 17–334, 17–337 |
G18 | 16–315, 16–316, 16–317, 17–334 |
G19 | 16–316, 16–317, 17–335 |
G20 | 16–316, 17–335 |
G21 | 16–317, 17–336 |
G22 | 16–318, 17–336 |
G23 | 3–63, 14–265, 16–319, 17–338 |
G24 | 16–320, 17–338 |
G25 | 16–320, 17–339 |
G26 | 17–340 |
G27 | 17–340 |
G28 | 15–293, 17–341 |
G29 | 15–394, 17–341 |
G30 | 15–295, 17–341 |
G31 | 15–296, 17–342 |
G32 | 15–296, 17–343 |
G33 | 15–298, 17–343 |
G34 | 3–60, 6–128, 17–344 |
G35 | 5–111, 17–345 |
G36 | 6–126, 17–346 |
J1 | 16–306, 17–347 |
J2 | 16–308, 17–347 |
J3 | 16–311, 16–312, 17–348 |
N1 | 15–296, 16–307, 16–309, 16–310, 16–314, 16–315, 16–316, 16–319, 17–349 |
N2 | 16–307, 17–351 |
N3 | 16–312, 16–314, 17–352 |
N4 | 15–294, 16–316, 17–352 |
N5 | 2–45, 14–248, 17–353 |
N6 | 15–293, 17–353 |
N7 | 15–294, 17–354 |
T1 | 16–304, 16–305, 17–354 |
T2 | 16–304, 17–354 |
T3 | 16–305, 17–354 |
T4 | 17–355 |
T5 | 16–305, 16–306, 17–355 |
T6 | 16–305, 17–355 |
T7 | 16–306, 17–355 |
T8 | 16–306, 17–355 |
T9 | 17–356 |
Эпилог
На конференции по гибким методологиям, проходившей в Денвере в 2005 году, Элизабет Хедриксон[83] вручила мне зеленый браслет наподобие тех, которые стали такими популярными после Ланса Армстронга. На браслете было написано «Одержим тестированием». Я с гордостью носил этот браслет. С тех пор как Кент Бек научил меня методологии разработки через тестирование (TDD) в 1999 году, я действительно стал буквально одержим этой темой.