понедельник, 31 марта 2008 г.

Классические ошибки разработки ПО

Важное свойство разработки ПО как профессии - необходимость постоянно обучаться.
Мы должны постоянно оценивать свою работу, обучаться новым технологиям и походам и т.п.
Любой успешный разработчик решает для себя эту задачу, или он перестаёт быть успешным :)
Но вот странная тенденция, которую я наблюдаю - подавляющее большинство людей, занимающихся разработкой ПО, предпочитают обучаться новым технологиям разработки, не пытаясь получить представление о работе других членов команды и самом процессе разработки.
Подозреваю, что с новешими фичами Framework 3.5 сейчас знакомо больше разработчиков, чем с "кирпичом" Code complete МакКоннелла.

Список из 30+ самых распространенных ошибок в разработке ПО, составленный МакКоннеллом - пример небольшого и невероятно ценного куска информации.
Список этот сейчас не обсуждается на форумах и, подозреваю, не висит ни у кого на стене, в отличие от диаграммы классов .net framework :)

Если ошибки из него возвести в ранг общепринятой терминологии, как "Паттерны проектирования", качество нашей работы должно вырасти больше, чем от перехода на .net framework 6.0

Ошибки, связанные с сотрудниками
1. Подрыв мотивации
2. Слабая команда
3. Неспособность управлять «проблемными» сотрудниками
4. Сверхвысокие обязательства, «героизм» команды
5. Добавление людей к отстающему проекту
6. Шумное рабочее место
7. Плохое взаимодействие разработчиков и клиентов
8. Нереальные планы
9. У команды нет «своего человека» среди топ-менеджеров компании-разработчика
10. Не все стороны заинтересованы в продвижении проекта
11. Отсутствие взаимодействия с конечными пользователями продукта
12. Политические решения в ущерб содержательной работе
13. Пассивное принятие желаемого за действительное

Ошибки, связанные с процессом разработки
14. Чрезмерно оптимистичные сроки
15. Недостаточное управление рисками
16. Проблемы с субподрядчиками
17. Недостаточное планирование
18. Команда с нереальными сроками игнорирует задачи планирования и сам план
19. Потеря времени на предпроектных процедурах (утверждение бюджета и т.п.)
20. Время на анализ и проектирование урезается в пользу кодирования
21. Неверные результаты проектирования
22. Время на процедуры Quality Assurance урезается в пользу кодирования
23. Задачи управления проектом не решаются
24. Слишком ранняя, слишком частая сборка проекта в релиз
25. В плане нет многих необходимых работ
26. Команда не укладывается в сроки, решением считается ускоренная работа на поздних стадиях
27. Неуправляемая «быстрая и грязная» разработка (code-like-hell)

Ошибки, связанные с продуктом
28. Множество ресурсоемких требований, в действительности необязательных
29. Добавление новых требований в ходе разработки (feature creep)
30. Множество интересных самим разработчикам требований, в действительности необязательных
31. Пассивные переговоры с клиентом, принятие нереальных планов под давлением
32. Необязательные исследовательские, «красивые» задачи в требованиях

Ошибки, связанные с технологиями
33. Синдром серебряной пули
34. Переоценка эффекта применения новых инструментов и методов
35. Смена инструментов разработки в ходе работы над проектом
36. Отсутствие автоматической системы управления кодом

Новые ошибки (не включенные в список за 1996г)

• Плановые оценки превращаются в сроки
• Чрезмерное «распараллеливание»: член команды одновременно решает слишком много задач
• Игнорирование, недооценка проблем организации работы команд, распределенных географически (global development)
• Нечеткое видение проекта (project vision)
• Положения в плане и проекте имеют приоритет над действительным положением дел (trusting the map more than the terrain)
• Аутсорсинг как средство снижения затрат

В конечном счете, кто может поспорить хоть с одним пунктом? И какой разработчик не сможет изменить свой проект к лучшему, держа в уме только этот список?
Перевод выполнен мною, он не полон и не идеален. Перевести на русский описание каждой ошибки оказалось сликом большим трудом, поэтому получился такой вот cheatsheet.
Оригинал этого списка есть здесь и здесь, каждый пункт обстоятельно откомментирован.
На написание этого поста меня сподвиг блог Coding Horror

пятница, 21 марта 2008 г.

Код Asp.Net MVC Framework на Codeplex

Scott Guthrie и компания выложили на Codeplex часть кода Asp.Net MVC framework preview 2.

Код, который можно скачать здесь, содержит исходники System.Web.Mvc (1800 строк кода) и скомпилированные System.Web.Abstractions, System.Web.Routing.

Лицензия прав на их декомпиляцию не дает, а жаль - в System.Web.Routing лежит самое для меня интересное :). (В рефлекторе Abstractions и Routing выглядят как самые обыкновенные библиотеки без native-кода)

Для меня это первый релиз приложения, разрабатываемого Microsoft, в исходных кодах. На Codeplex есть багтрекер и каменты. Новые релизы MVC Framework явно планируется выпускать чаще, чем номерные беты.

По масштабам проект конечно походит на песочницу, но мне хочется верить, что компания, обкатав такой способ взаимодействия с сообществом, перенесет его на другие разработки.

понедельник, 10 марта 2008 г.

Microsoft Singularity source

Роюсь в исходниках Singularity. Microsoft Research, определенно, жжот:

В Microsoft.Singularity.Crypto.PublicKey.Random:

 public Random() : this(250787849) {

            // John DeTreville's Social Security Number

        }



Кусок драйвера S3 Trio на Sing#, Microsoft.Singularity.Drivers.S3Trio64.S3Device:

public void set_1024x60Hz_16bpp()

        {

            CrtAddrPort.Write16(0x0034);  // S3R4 - Backwards Compatibility 3

 

            IndxOut(CrtAddrPort, new byte[] {

                0x4b,0xff,0x00,0x8c,0x08,0x8a,0x25,0xf5,

                0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,

                0x02,0x0f,0xff,0x00,0x60,0xff,0x21,0xeb,

                0xff } );

 

            CrtAddrPort.Write8(0x51);  // overflow bits for CR13

            byte bt=CrtDataPort.Read8();//setting 4th bit , resetting 5,6 & 7 th bit

            bt &= 0x0f;                    // bit 5,4 = 01

            bt |= 0x10;

            CrtDataPort.Write8(bt);

 

            CrtAddrPort.Write16(0x355d);

            CrtAddrPort.Write16(0x005e);

            CrtAddrPort.Write16(0x1050);  // 16 bit pixel length

            CrtAddrPort.Write16(0x5067);  // mode 10: 16 bit color, 1 VCLK/pixel

            CrtAddrPort.Write16(0x026d);  // recover pixel on right hand edge in 16 bpp mode

        }

 

        // Wait for the vertical blanking interval on the chip.

        public void Wait_VSync()

        {

            byte bt;

 

            // It's possible that this routine will get called

            // when the 911 is in a zombie state, meaning there is no

            // vertical sync being generated.  This is why we have some long

            // time out loops here.

 

            // First wait for getting into vertical blanking.

 

            for (int i = 0; i < 0x100000; i++) {

                if ((SysCtrlPort.Read8() & 0x08)!=0) {

                    break;

                }

            }

 

            //

            // We are either in a vertical blanking interval or we have timed out.

            // Wait for the Vertical display interval.

            // This is done to make sure we exit this routine at the beginning

            // of a vertical blanking interval, and not in the middle or near

            // the end of one.

            //

            for (int i = 0; i < 0x100000; i++) {

                if ((SysCtrlPort.Read8() & 0x08)==0) {

                    break;

                }

            }

 

            //

            // Now wait to get into the vertical blank interval again.

            //

            for (int i = 0; i < 0x100000; i++) {

                if ((SysCtrlPort.Read8() & 0x08)!=0) {

                    break;

                }

            }

        }



Смотря на такой код, понимаешь, что Макконнелл называет внутренней сложностью проблемы, почти не устранимой изменением инструмента: писать бухгалтерию на C все ещё спокойнее, чем драйвера на .Net :)

четверг, 6 марта 2008 г.

Плоды MIX'08

Вчера на MIX'08 Microsoft выпустили две интересных беты:
  • IE 8 beta 1 - заявленный standarts compliance, прохождение ACID 2 и т.п. Большинство сайтов, тем не менее, в бете правильно не отображаются. Bil Simser выдвигает предположение, что рендеринг в IE8 ломают браузер-специфичные фиксы сайтов для IE6 и IE7 :). Как новый браузер будет бороться с таким наследством - вопрос, будоражащий умы многих. Установка IE8b1, увы, ведет к недетскому количеству глюков, поэтому ставить себе этот продукт я пока не собираюсь.

  • ASP.Net MVC Preview 2 - этот релиз MVC Framework будет первым, который я поставлю. Уж больно хочется посмотреть на новый ASP.Net без ужасов постбака и page lifecycle.
    Видео четырёх обучающих скринкастов by Scott Hanselman есть на asp.net

P.S. На visitmix.com лежат видео keynote и познавательных сессий. Новая фича IE - IE8 Activities смотрятся здорово.