软件工程知识点总结 下载本文

软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。是一门指导软件系统开发的工程学科,它以计算机理论及其他学科为指导,采用工程化的概念、原理、技术和方法进行软件的开发和维护,把经实践证明的学科的管理措施与最先进的技术方法结合起来,目标是以较少的投资获取高质量的软件。 内容:方法与技术、工具与环境、管理技术、标准与规范。 领域:软件需求分析、软件设计、软件构造、测试和维护。 难题 1.复杂性 2.不可见性 3.易变性 4.服从性 5.非连续性

计算机科学中与实践相关的部分,都和数据以及其他学科发生关系。软件工程和人的行为、现实社会的需求息息相关。

发展史:1.生产作坊方式2.面向对象的方法3.软件过程工程4.软件复用和基于构件的开发 学生做到:1.研发出符合客户需求的软件 2.通过一定的软件流程,在预计的时间内发布足够好的软件 3.通过数据和其他方式展现所开发的软件是可以维护和继续发展。

单元测试(好标准):1.在最基本的功能/参数上验证程序正确性;2.由最熟悉代码的人写;3.测试后,机器状态保持不变;4.要快;5.产生可重复、一致的结果;6.独立性;7.覆盖所有代码路径;8.集成到自动测试的框架中;9.和产品代码一起保存和维护。

回归测试:模块出现退步,从正常退化到不正常状态,为了验证新改进的代码的正确性。 个人开发:计划:估计时间(开发):.需求分析.生成设计文档.设计复审.代码规范.具体设计.具体编码.代码复审.测试;记录用时;测试报告;计算工作量;事后总结;提出改进计划 个人在团队中:1.通过交流实验等方法理解问题、需求或任务2.提出多种解决办法3.与相关角色交流解决问题的提案,决定一个可行方案4.执行5.和其他角色合作,测试实现方案,修复缺陷6.对结果负责

代码规范:代码风格规范:1.缩进2.行宽3.括号4.断行与空白行5.分行6.命名7.下划线8.大小写9.注释 代码设计规范:1.函数2.goto3.错误处理4.处理C++中的类 代码复审目的:1.找出错误代码2.发现逻辑错误3.发现算法错误4.发现潜在错误5.发现可能需要改进的地方6.传授经验

代码复审步骤:1.代码成功编译2.程序员必须测试过代码3.程序与提出新的代码,差异分析4.可选择面对面复审,独立复审5.面对面复审中,开发者控制流程,讲述修改的前因后果,复审者有权打断叙述提出自己意见7.开发者负责所有问题得到满意解答8.达成一致意见 复审后:1.改正明显的错误2.对无法解决的错误,记录下来3.把所有错误记在“我常犯的错误”表中,作为以后自我复审的第一步

结对编程好处:1.在开发层次,提供更好的设计质量和代码质量,解决问题能力强2.对开发人员,结对更有信心3.在企业管理层上,更有效的交流相互学习传递经验,高投入产出比 如何结对编程:1.驾驶员:写设计文档,进行编码和单元测试2.领航员:审阅文档、编码;考虑单元测试的覆盖率;思考是否需要重构;帮解决技术问题3.不断轮换角色,不连续一小时,领航员控制时间4.主动参与5.只有水平差距,没有级别差距6.设置好结对编程环境 团队模式:1.主治医师2.明星3.社区4.业余剧团5.秘密团队6.特工7.交响乐团8.爵士乐 开发方法: 统一流程(RUP)业务建模.需求.分析和设计.实现.测试.部署.配置和变更管理.项目管理.环境. 敏捷开发原则:1.尽早并持续交付有价值的软件满足需求2.欢迎需求的变化3.经常发布可用软件,间隔较短4.业务员与开发人员共同工作5.以有进取心的人为核心6.面对面交流7.可用软件是衡量项目进展的主要指标8.可持续发展9.不断关注技术和设计10.保持简明 敏捷流程:1.找出完成产品所需要做的事2.决定当前冲刺需要解决的事3.冲刺 软件需求:1.获取和引导需求2.分析和定义需求3.验证需求4.在软件产品的生命周期中管理需求(功能性需求.开发过程需求.非功能性需求.综合需求)

需求获取方法:用户调查1.焦点小组2.深入面谈3.卡片分类4.调查问卷5.用户日志研究6.人类学调查7.眼动跟踪研究8.快速原型调研9.a/b测试

利益相关者:用户:直接使用软件的人;客户:购买软件的人;市场分析师:代表典型用户的需求;监管机构:符合行业和政策规定;软件工程师:需求阶段重要角色

项目经理PM:对项目流程负责,正确的协调团队内部外部,调配各部门资源和时间,有效进行风险管理,保证一个项目按计划结项。管事也管人,不一定做具体工作。 应对风险:1.进一步研究2.接受3.规避4.转移5.降低6.制定应急计划

PM能力:1.观察、理解和快速学习2.分析管理能力3.专业能力4.自省能力

典型用户:名字.年龄.收入.代表的用户在市场上的比例和重要性.典型场景.环境.生活情况.知识层次/能力.偏好

功能说明书 1.定义好相关概念2.规范好一些假设3.避免误解,界定边界条件4.描述主流用户5.一些好的功能会有副作用6.服务质量说明 功能驱动设计:1.构造总体模型2.构造功能列表3.制定开发计划4.功能设计阶段5.实现具体功能

用户体验:1.用户第一印象2.从用户角度考虑问题3.软件服务始终要记住用户的选择4.短期刺激和长期影响5.不让用户犯简单错误6.用户体验和质量7.情感设计 评价标准:1.尽快提供可感触的反馈2.系统界面符合用户的现实惯例3.用户有控制权4.一致性和标准化5.适合各种类型的用户6.帮助用户识别、诊断并修复错误7.有提示和帮助文档 测试方法:1.单元测试2.代码覆盖率测试3.构建验证测试4.验收测试5.探索式测试6.回归测试7.场景/集成/系统测试8.伙伴测试9.效能测试10.压力测试11.内/外部公开测试

黑箱:把软件系统当作一个黑箱,无法了解或使用系统的内部结构及知识。从软件的行为而不是从内部结构出发来设计测试。 白箱:设计者可以看到软件系统的内部结构,并使用软件的内部结构和知识来选择测试数据及具体的测试方法。

软件质量:1.程序的质量2.软件工程的质量(开发过程可见性、风险控制、软件内部模块、开发成本控制、内部质量指标完成情况)

如何衡量:CMMI理论:一级初始级(企业项目目标实现),二级管理级(对项目流程审查,保证成功),三明确级(对管理体系制度化保障完成),四量化管理级(数字化管理,流程的稳定性),五级优化级(充分利用信息资料,主动改善流程)

如何衡量:1.软件CC后DCR的数量2.用户的好评3.在CC后发现bug的数量4.文档完整性和准确性5.修复bug平均时间6.单位开发量出现最大bug数量7.测试用例的覆盖率8.模块的复杂程度9.代码的行数10.文档的数量和复杂程度11.有多少代码重复12.平均每天构建失败的次数13.实现了多少功能点14.软件能运行多久,平均初次错误时间,无故障时间 会诊:1.开发者提交参加会诊的bug和修改方案2.会议决定是否同意修改方案3.执行

IT创新:1.灵光一闪,创新及随其后2.大家都喜欢创新3.好的想法会赢4.创新者都是一马当先5.要成为领域的专家6.技术是创新的关键7.成功的团队更能创新

团队合作阶段:1.萌芽阶段2.磨合阶段3.规范阶段4.创造阶段5.团队的效能曲线和假团队 职业道德:1.行为与公众利益一致2.以客户和雇主利益最大化的方式做事3.确保自己的产品以及修改满足专业标准4.具备完整独立的专业判断5.软件项目的经理和领导人应提倡并亲自采用复合道德规范的方法来管理软件的开发和维护6.保证职业的诚信和荣誉7.公平对待同侪,并予以支持和帮助。

需求分析:四方面:对问题的识别、分析与综合、制定规格说明书、评审;三原则:必须能够表达和理解问题的数据域和功能域;必须按自顶向下、逐步分解的方式对问题进行分解和不断细化;要给出系统的逻辑视图和物理视图。