这学期学习邹欣老师的《构建之法:现代软件工程》一书收获颇多。
第一章 概论 软件 = 程序 + 软件工程
软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。软件工程包括:软件求分析、软件设计、软件构建、软件测试和软件维护。软件的特殊性:复杂性、不可见性、易变性、服从性、非连续性。
第二章 个人技术和流程
单元测试(用VSTS写单元测试、好的单元测试的标准)回归测试、效能分析工具、个人软件开发流程(实践最简单的项目:WC)。
第三章 软件工程师的成长
个人能力的衡量与发展(在团队工作中,稳定、一致的交付时间时衡量一个员工能力的重要方面)团队对个人的展望(交流、说到做到、接受团队赋予的角色并按角色要求工作、全力投入团队活动、按团队流程的要求工作、准备、理性地工作)。
软件工程师的职业发展(职业发展、职业成长),技能的反面:模仿是学习的一个重要手段。
第四章 两人合作
代码风格规范(缩进、行宽、括号、断行与空白的{}行、分行、命名、下划线、大小写、注释)、代码设计规范(函数、goto、错误处理、如何处理C++中的类)、代码复审(代码复审的目的及原因、代码复审的步骤、代码复审的核查表)、结对编程(结对编程能够不断的复审、如何结对编程)
第五章 团队和流程
团队有一致的集体目标,团队成员有个自分工,互相依赖合作,共同完成任务。软件团队的模式为窝蜂模式、主治医师模式、明星模式、社区模式、业余剧团模式、秘密团队、特工团队、交响乐团模式、爵士乐模式、功能团队模式、官僚模式。
软件开发流程的目的是为了提高软件开发、运营和维护的效率,以及提升用户满意度、软件的可靠性和可维护性。
第六章 敏捷流程
敏捷流程的问题和解法、敏捷的团队。
第七章 MSF
MSF基本原则、MSF的团队模型、MSF过程模型、MSF对敏捷和CMMI的支持。
第八章 需求分析
软件需求(获取和引导需求、分析和定义需求、验证需求、在软件产品的生命周期中的管理需求)、软件产品的利益相关者(用户、顾客、市场分析者、监管机构、系统/应用集成商、软件团队、软件工程师)、获取用户需求(用户调研)、竞争性需求分析的框架(N、A、B、C、D)、功能的定位和优先级、计划和估计、分而治之。
第九章 项目经理
微软PM的来历、PM做开发和测试之外的所有事情、PM和风险管理、PM的能力要求和任务(观察、理解和快速学习能力、分析管理能力、一定的专业能力、自省的能力)
第十章 典型用户和场景
Visual Studio的典型用户、典型用户的价值、用例、规格说明书(入死内奸功能说明书、软件技术说明书)、功能的驱动设计。
第十一章 软件设计与实现
把代码修改记集成到代码库中,软件的分析和设计方法、图形建模和分析方法(实体与实体之间的关系、数据的流动、统一的表达方式)、其他设计方法、从Spec到实现、开发阶段的日常管理。
第十二章 用户体型
用户体验的要素、用户体验设计的步骤和目标、评价标准
第十三章 软件测试
软件测试方法:黑箱测试、白箱测试、功能测试、非功能测试、单元测试、代码覆盖率测试、构建验证测试验收测试、“探索式”的测试、回归测试、场景/集成/系统测试、伙伴测试、效能测试、压力测试、内部/外部公开测试、易用性测试、“小强”大扫荡。
测试工作中的文档:测试设计说明书、测试用例、错误报告、测试修复,关闭缺陷报告、测试报告。
运用测试工具:运用工具记录手工测试、运用工具记录自动测试、如何测试效能(效能测试、负载测试、压力测试)。
第十四章 质量保证
软件的质量 = 程序的质量 + 软件工程的质量
影响程序质量的因素和影响软件工程质量的因素,其中程序质量可以通过短期的努力看到明显的效果,而软件工程的质量受很多方面因素的影响例如书中提到的:软件开发过程的可见性、软件开发的风险控制、软件内部的模块、开发成本的控制、内部质量指标的完成情况。
第十五章 稳定和发布阶段
软件团队的各个角色代表组成了会诊小组,处理每一个影响产品发布的问题;复杂项目的会诊;频率和不同覆盖范围的渐进发布;发布之后诸葛亮会议。
第十六章 IT行业的创新
怎样才能创新、创新的时机、创新的招数、魔方的创新、创新和作坊
第十七章 人,绩效和职业道德
绩效管理、团队合作的几个阶段(萌芽阶段、磨合阶段、规范阶段、创造阶段)、软件工程的职业道德。
邹老在本书中通过简单的小故事和移山公司,王屋村这样的经典词汇,程序员每天的工作就是搬砖,来让读者阅读和理解起来更加的容易,书中用“阿超”、“国栋”、“小飞”、“小李”等角色之间的对话来揭示一个概念的本质,同时通过他们之间风趣的对话又加快了对相关概念的理解。
问题/疑问:
1、 怎样学好统一流程、渐进交付流程、敏捷流程、开发流程?
2、 对于MSF这一块有点懵
3、 每种开发模式都有优缺点,那应该怎么去选择合适的开发模式呢?
4、 个人开发流程,特别是流程中的分析和设计那一块.感觉还不怎么会
5、 应该采用哪种团队模式和团队开发模式比较实际,在分工上面需要如何分配?
6、 如何在这第一次至关重要的用户初次体验中,尽可能的让用户达到他们想要的效果?
7、 怎样提高自己的代码能力?