还剩28页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
株洲软件工程培训课件第一章绪论软件工程的世界软件定义与特点软件危机软件工程的目标软件是计算机系统中与硬件相互依存的另一20世纪60年代末,软件开发面临成本超部分,包括程序、数据和文档它无处不支、进度延误、质量低下等严重问题,这促在,从智能手机到云计算平台,从工业控制使人们开始思考如何系统化、规范化地开发系统到人工智能应用,软件正在深刻改变我软件,软件工程学科由此诞生们的生活方式和工作模式软件生命周期概述软件工程师的职业道德0102需求分析阶段设计阶段•尊重用户隐私和数据安全确定软件系统的功能和性能要求,理解用将需求转化为系统架构和详细设计方案•提供准确可靠的技术信息户真实需求•遵守知识产权和版权法规•持续提升专业技能0304•维护公共利益和社会责任实现阶段测试阶段编写代码,将设计转化为可执行的程序验证软件功能,发现并修复缺陷05维护阶段持续改进,适应变化的需求和环境软件开发的挑战与机遇第二章软件开发模型瀑布模型快速原型与增量模型螺旋模型与敏捷开发线性阶段划分需求、设计、实现、测试、维护快速原型通过构建可运行的原型系统快速验证螺旋模型结合瀑布模型和原型模型,强调风险依次进行,每个阶段完成后才能进入下一阶段需求,获取用户反馈后改进分析,适合大型复杂项目优点结构清晰,文档完整,适合需求明确的项增量模型将系统分解为多个增量,逐步交付可目缺点缺乏灵活性,难以应对需求变更用功能,灵活应对需求变化敏捷开发详解极限编程()框架XP ScrumScrum是一种迭代式的敏捷框架,将开发工作分解为短期冲刺(Sprint),通常为2-4周Product Backlog产品待办列表极限编程是最著名的敏捷方法之一,强调简单设计、结对编程、测试驱动开发和频繁重构Sprint Planning冲刺计划会议结对编程两人协作编码,提高代码质量Daily Standup每日站会测试驱动开发先写测试,后写实现Sprint Review冲刺评审持续集成频繁集成代码,快速发现问题Sprint Retrospective冲刺回顾简单设计避免过度设计,保持代码简洁持续集成与持续交付第三章需求分析需求获取需求分类通过访谈、问卷、观察等方法收集用户需求区分功能需求和非功能需求(性能、安全性、可用性等)需求文档需求建模编写详细、准确、可验证的需求规格说明书使用用例图、数据流图等工具可视化需求需求建模工具用例图描述系统功能和参与者交互数据流图(DFD)展示数据在系统中的流动状态图描述对象状态变化需求分析案例分享某电商系统需求分析实战功能需求需求变更管理用户管理注册、登录、个人信息管理在电商系统开发过程中,市场需求和用户期望不断变化有效的需求变更管理商品管理商品浏览、搜索、分类展示包括购物车添加商品、修改数量、结算订单管理下单、支付、订单跟踪
1.建立变更控制委员会,评估变更影响评价系统商品评价、晒图、回复
2.使用版本控制系统管理需求文档推荐系统个性化商品推荐
3.评估变更对成本、进度、质量的影非功能需求响性能支持10万并发用户,响应时间2秒
4.及时更新相关文档和测试用例安全性数据加密传输,防SQL注入沟通技巧可用性系统可用性≥
99.9%可扩展性支持微服务架构,易于功能扩展第四章结构化设计模块化原则内聚与耦合将复杂系统分解为功能独立的模块,每个模块完成特定高内聚模块内部元素紧密相关,功能单一明确低耦功能,降低系统复杂度,提高可维护性和可重用性合模块之间依赖关系最小化,降低模块间影响设计工具数据字典定义数据元素,判定表和判定树表达复杂逻辑,结构图展示模块层次关系和调用关系变换分析与事务分析变换分析事务分析适用于数据流中存在明显的输入流、变换中心和输出流的系适用于以事务处理为中心的系统,根据事务类型划分处理路统通过识别数据流图中的变换中心,将其映射为软件结径识别事务中心,为每种事务设计相应的处理模块构•识别事务中心•确定数据流边界•确定事务类型•识别变换中心•设计输入、处理、输出模块结构化设计实例订单管理系统模块划分与接口设计订单接收模块负责接收用户订单请求,验证订单信息的完整性和合法性,生成订单编号并记录订单初始状态1输入用户信息、商品清单、配送地址输出订单编号、确认信息库存检查模块查询商品库存状态,判断是否满足订单需求,锁定相应库存以防止超售2输入商品编号、数量输出库存状态、锁定结果支付处理模块对接支付网关,处理用户支付请求,验证支付结果,更新订单支付状态3输入订单编号、支付方式、金额输出支付结果、交易流水号订单跟踪模块记录订单状态变化,提供订单查询功能,支持用户实时了解订单进展输入订单编号、用户身份输出订单详情、物流信息第五章面向对象分析与设计封装隐藏内部实现细节,提供公共接口类与对象类是对象的抽象,对象是类的实例继承子类继承父类属性和方法,实现代码复用抽象提取共同特征,忽略非本质细节多态同一接口,不同实现,运行时动态绑定建模技术UML统一建模语言(UML)是面向对象系统建模的标准工具,提供了丰富的图形化表示方法用例图类图顺序图描述系统功能和外部参与者的交互关系,明确系统边界展示类的属性、方法以及类之间的关系(关联、聚合、组合、继描述对象间的交互顺序,展示消息传递的时间顺序承)面向对象设计案例图书管理系统建模与设计模式应用UML核心类设计设计模式应用工厂模式Book类书名、作者、ISBN、出版日期、库存数量BookFactory负责创建不同类型的图书对象Reader类读者编号、姓名、联系方式、借阅(纸质书、电子书、期刊),隐藏对象创建细历史节Loan类借阅记录,关联Book和Reader单例模式Librarian类图书馆员,管理图书和借阅LibrarySystem类采用单例模式,确保系统只类之间的关系有一个图书馆管理实例,统一管理所有资源观察者模式•Reader与Loan一对多关联•Book与Loan一对多关联当图书归还时,通知预约该书的读者,实现自动•Librarian与Book依赖关系通知机制•Book继承自PublicationItem抽象类通过UML建模,系统结构清晰可见;应用设计模式提高了代码的可维护性和可扩展性顺序图详细描述了借书、还书等关键用例的交互流程,为开发实现提供了明确指导第六章软件实现编码规范与风格统一的命名规范、代码格式和注释标准是团队协作的基础遵循语言特定的编码标准(如Java的《阿里巴巴Java开发手册》),保持代码风格一致性,提高代码可读性合理使用空格、缩进和换行,编写清晰的注释说明复杂逻辑代码复用与模块化实践避免重复编码,通过函数、类库和框架实现代码复用将功能分解为独立模块,降低模块间耦合使用接口定义模块契约,便于模块替换和测试合理使用设计模式,提高代码的灵活性和可维护性版本控制工具基础操作GitGit是现代软件开发必备的版本控制工具基本操作包括git init初始化仓库,git add添加文件到暂存区,git commit提交更改,git push推送到远程仓库,git pull拉取最新代码分支管理使用git branch和git checkout,合并使用git merge编码实战演示环境下编辑器使用常用命令演示Linux VimGit基本工作流程#克隆远程仓库git clonehttps://github.com/user/repo.git#创建新分支git checkout-b feature-login#查看状态git status#添加文件到暂存区git addlogin.java#提交更改git commit-m实现用户登录功能#推送到远程分支git pushorigin feature-login#切换到主分支git checkoutmain#合并分支git mergefeature-login第七章软件测试白盒测试1基于代码内部逻辑结构的测试,检查程序路径、条件、循环等常用技术包括语句覆盖、分支覆盖、路径覆盖需要了解源代码,适合单元测试2黑盒测试基于需求规格说明的测试,不关注内部实现,只检查输入输出常用技术包括等价类划分、边界值分析、因果图适合功能测试和系统测试单元测试3针对最小可测试单元(函数、方法、类)的测试,验证其是否按预期工作使用JUnit、PyTest等测试框架,实现测试自动化4集成测试测试模块间的接口和交互,发现模块集成后的问题采用自顶向下、自底向上或三明治集成策略,逐步组装系统系统测试5在真实环境中测试完整系统,验证系统是否满足需求规格说明包括功能测试、性能测试、安全测试、兼容性测试等自动化测试工具自动化测试提高测试效率和覆盖率常用工具包括Selenium用于Web应用UI测试,JUnit/TestNG用于Java单元测试,Postman用于API测试,JMeter用于性能测试软件测试案例某项目测试用例设计与缺陷管理登录功能测试用例设计用例编号测试场景测试步骤预期结果优先级TC001正确的用户名和密码输入有效用户名和密码,点击登录登录成功,跳转到主页高TC002错误的密码输入正确用户名和错误密码,点击登录提示密码错误高TC003不存在的用户名输入不存在的用户名,点击登录提示用户不存在中TC004空用户名或密码用户名或密码留空,点击登录提示请输入用户名和密码中TC005SQL注入攻击输入SQL注入字符串系统正常处理,不发生异常高缺陷管理流程缺陷严重程度分类01缺陷提交致命系统崩溃、数据丢失、安全漏洞严重主要功能无法使用测试人员发现缺陷后,在缺陷管理系统中详细记录一般部分功能异常,有替代方案02轻微界面问题、文字错误缺陷分类使用JIRA、Bugzilla等工具进行缺陷跟踪管理,确保每个缺陷都能得到及时处理定期召开缺陷分析会议,总结常见问题,改进开发和测试流程根据严重程度和优先级对缺陷进行分类03缺陷分配项目经理将缺陷分配给相应的开发人员04缺陷修复开发人员修复缺陷并更新状态05缺陷验证测试人员验证修复效果,确认缺陷已解决06缺陷关闭第八章软件维护与演化纠错性维护适应性维护修复软件运行中发现的错误和缺陷,确保系统正常运行这是最基本的维护类型,通适应外部环境变化,如操作系统升级、硬件更新、法律法规变化等这类维护约占常占维护工作的20%左右及时响应用户报告的问题,快速定位并修复bug25%的工作量需要对系统进行调整以保持兼容性和合规性完善性维护预防性维护根据用户新需求增加功能、改进性能、提升用户体验这是最常见的维护类型,占维主动改进软件结构,提高可维护性,预防未来可能出现的问题包括代码重构、文档护工作的50%以上通过持续改进,保持软件的竞争力和用户满意度更新、技术债务偿还等虽然短期看不到直接收益,但对长期发展至关重要软件演化模型维护中的文档管理软件系统在其生命周期内不断演化Lehman定律指出持续使用的软件必须持续演完善的文档是软件维护的基础应维护需求文档、设计文档、代码注释、用户手册等每化,否则会逐渐失去价值演化过程需要平衡新功能开发与技术债务管理次修改都要更新相关文档,建立变更日志,记录修改原因和影响第九章软件项目管理项目计划团队组建制定详细的项目计划,明确目标、范围、资源、进度组建高效团队,明确角色职责,建立沟通机制干系人管理执行监控管理干系人期望,保持有效沟通,获取支持按计划执行,监控进度和质量,及时调整偏差质量保证风险管理建立质量标准,实施过程控制,确保交付质量识别、分析、应对项目风险,降低不确定性进度控制技术甘特图关键路径法()CPM使用横道图展示任务时间安排,直观显示项目进度每个任务用一条横杠表示,长度代表持识别项目中最长的依赖路径,这条路径决定了项目最短完成时间关注关键路径上的任务,续时间,清晰展示任务依赖关系和关键路径任何延误都会影响整个项目进度项目管理工具介绍JIRA TrelloAsanaAtlassian公司开发的专业项目管理工具,广泛基于看板方法的可视化项目管理工具,界面简洁功能全面的团队协作和任务管理平台,支持列表应用于敏捷开发团队支持Scrum和Kanban直观,易于上手通过卡片、列表和面板组织任视图、看板视图、时间线视图等多种展示方式,方法论,提供强大的问题跟踪、Sprint规划、务,适合中小型团队和个人项目管理帮助团队高效协作燃尽图等功能•直观的拖放操作•强大的任务依赖管理•灵活的工作流自定义•丰富的Power-Up扩展•自动化工作流•强大的报表和仪表板•支持多平台同步•详细的进度追踪•与Git、Confluence无缝集成选择合适的项目管理工具需要考虑团队规模、项目类型、预算和集成需求这些工具都支持云端协作,帮助分布式团队保持同步第十章新兴技术与趋势云计算与软件工程与持续交付人工智能在软件开发中的应用DevOps云计算改变了软件开发和部署模式IaaS、PaaS、SaaS提供DevOps文化打破开发与运维的壁垒,通过自动化实现快速、AI正在改变软件开发方式智能代码补全(GitHub不同层次的服务微服务架构、容器化技术(Docker、可靠的软件交付CI/CD流水线自动完成构建、测试、部Copilot)提高编码效率,自动化测试生成减少人工工作量,Kubernetes)使应用更灵活、可扩展云原生应用充分利用署基础设施即代码(IaC)实现环境管理自动化监控和日智能缺陷预测提前发现潜在问题,代码审查辅助工具提升代码云平台特性,实现弹性伸缩和高可用志系统提供实时反馈质量机器学习优化性能调优和资源分配其他重要趋势低代码无代码平台边缘计算区块链技术/通过可视化界面快速构建应用,降低开发门槛,加速数字化转将计算能力推向网络边缘,减少延迟,支持物联网和实时应去中心化、不可篡改的特性,应用于供应链、金融等领域型用行业前沿构网型储能系统软件开发简介储能构网技术对软件系统的挑战PCS构网型储能系统(Grid-Forming EnergyStorage System)是新型电力系统的重要组成部分与传统跟网型系统不同,构网型系统能够主动建立电压和频率基准,支撑电网稳定运行技术挑战智能控制算法与系统集成构网型储能系统采用先进的控制策略实时控制算法虚拟同步机技术模拟同步发电机特性,提供惯量和阻尼需要在毫秒级别响应电网变化,实现快速功率调节和电压频率支撑软件系统必须具备极高的实时性自适应控制根据电网状态动态调整控制参数和可靠性多机协同多个储能单元协调配合,实现系统级优化预测性维护利用AI算法预测设备状态,提前安排维护复杂系统建模软件系统需要与硬件紧密集成,包括PCS(储能变流器)、BMS(电池管理系统)、EMS(能量管理系统)等模块采用分层架构,实现从底层驱动到上层应用的完整覆盖涉及电力电子、电网动态、储能特性等多物理场耦合需要准确的数学模型和高效的仿真算法故障穿越能力在电网故障时保持运行,提供支撑软件需要实现快速故障检测和智能保护策略软件工程职业发展路径初级程序员掌握一门编程语言,熟悉基本算法和数据结构,能够在指导下完成编码任务学习软件开发流程,积累项目经验中级开发工程师独立完成模块开发,能够进行需求分析和设计熟练使用开发工具和框架,具备一定的系统思维和问题解决能力高级开发工程师承担核心模块开发,参与系统架构设计具备技术深度和广度,能够指导初中级工程师,解决复杂技术问题系统架构师负责系统整体架构设计,制定技术方案和标准具备全局视野和前瞻性,平衡技术、成本和业务需求技术专家技术总监/引领技术方向,解决关键技术难题具备深厚的技术积累和行业洞察力,对团队和产品有重大影响其他职业方向测试工程师产品经理项目经理专注软件质量保证,从手工测试到自动化测试,再到测试架构师从技术转向产品,负责需求管理、产品规划和用户体验管理项目全生命周期,协调资源,确保项目成功交付必备技能扎实的技术基础、持续学习能力、沟通协作能力、问题解决能力、业务理解能力成长建议深耕一个领域成为专家,同时保持技术广度;积极参与开源项目,建立个人品牌;培养软技能,学会与人合作学习资源推荐经典教材优质在线课程中国科学技术大学《软件工程实践者的研究方法》《软件工程》课程,在中国大学MOOC平台提供,系统讲解软件工程基础理论作者Roger S.Pressman被誉为软件工程领域的圣经,全面系统地介绍软件工程理论与实践,适合初学者和专业人士电子科技大学《软件工程实践》课程,注重实践项目,培养工程能力《代码大全》作者Steve McConnell关于软件构建的百科全书,涵盖编码实践的方方面面,大量实例和最佳实践CourseraUniversity ofAlberta的Software Designand Architecture专项课程《设计模式可复用面向对象软件的基础》edXMIT的Software Construction课程,质量高,内容深入作者Gang ofFour面向对象设计的经典著作,介绍23种常用设计模式,是软件设计的必读书学习社区与资源GitHub阅读优秀开源项目代码《重构改善既有代码的设计》Stack Overflow技术问答社区作者Martin Fowler系统讲解代码重构技术,帮助开发者提高代码质量和可维护性博客园、CSDN中文技术博客平台掘金、思否前端和全栈开发社区《程序员》杂志了解行业动态实践环节安排第一阶段需求分析与设计第三阶段项目展示与评审时间2周时间1周•组建4-5人小组,选择项目主题•准备项目演示PPT和系统演示•进行用户调研,编写需求规格说明书•每组进行15分钟项目展示•绘制用例图、类图等UML图•回答老师和同学的提问•完成系统架构设计和数据库设计•提交完整的项目文档和源代码•提交设计文档并进行小组评审•进行项目总结和经验分享123第二阶段代码实现与测试时间4周•按照设计文档进行编码实现•使用Git进行版本控制和团队协作•编写单元测试和集成测试•进行代码审查,优化代码质量•完成系统测试,修复发现的缺陷项目主题建议在线图书管理系统校园二手交易平台课程管理与选课系统即时通讯应用项目评分标准需求分析与设计(25%)、代码质量与实现(35%)、测试与文档(20%)、团队协作(10%)、项目展示(10%)常见问题答疑问软件工程学习的最大难点是什么答软件工程的难点在于理论与实践的结合很多同学能理解理论概念,但在实际项目中不知如何应用建议
①通过实际项目加深理解;
②阅读开源项目代码学习最佳实践;
③参与团队协作体验真实开发流程;
④关注代码质量而非仅仅实现功能问如何选择合适的开发模型答选择开发模型需考虑多个因素需求明确度(需求清晰用瀑布,需求模糊用敏捷)、项目规模(小项目可用快速原型,大项目考虑螺旋模型)、团队经验(新手团队适合结构化方法)、风险承受度(高风险项目用螺旋模型)实际项目中往往混合使用多种模型问测试到什么程度才算充分答测试充分性难以量化,但可参考以下指标
①代码覆盖率达到80%以上;
②所有功能需求都有对应测试用例;
③常见异常情况都有测试;
④用户验收测试通过记住测试不能保证没有bug,只能发现已知的bug持续测试和监控更重要问如何平衡代码质量和开发进度答这是永恒的矛盾建议
①编码规范和代码审查不能省,长远看节省维护成本;
②使用自动化工具提高效率(静态分析、自动化测试);
③采用敏捷迭代,先实现核心功能后持续改进;
④记录技术债务,安排专门时间偿还短期牺牲质量会导致长期灾难软件工程职业道德与规范职业道德准则诚信与责任的重要性IEEE/ACM国际电气电子工程师学会(IEEE)和美国计算机协会(ACM)联合制定了软件工程职业道德和专业实践准则,是全球软件工程师遵循的行为规范公众利益软件工程师应始终考虑公众利益,确保软件对社会有益无害客户和雇主在符合公众利益的前提下,维护客户和雇主的最佳利益产品质量确保软件产品和相关修改满足最高的专业标准判断独立性在职业判断中保持诚实和独立持续学习软件工程师的工作影响着人们的生活、财产甚至生命安全从医疗设备软件到金融系统,从自动驾驶到航空航天,软件缺陷可能导致严重后果促进软件工程实践的道德方法,支持和鼓励持续学习实践中的职业道德数据隐私尊重用户隐私,不滥用数据诚实沟通如实报告项目状态和技术风险知识产权尊重版权和开源协议质量承诺不交付已知存在严重缺陷的软件持续改进主动学习新技术,提升专业能力团队协作尊重同事,分享知识,共同成长团队合作,成就卓越软件优秀的软件从来不是个人英雄主义的产物,而是团队智慧的结晶在现代软件开发中,跨职能团队紧密协作,产品经理、设计师、开发工程师、测试工程师、运维工程师各司其职,又相互配合有效的沟通、互相尊重、知识共享是团队成功的关键敏捷方法强调面对面交流、每日站会、结对编程,这些实践都在促进团队协作记住伟大的软件产品背后,一定有一个伟大的团队沟通协作目标一致持续改进主动分享信息,及时反馈团队成员对项目目标有共定期回顾总结,不断优化问题,倾听他人意见同理解和承诺团队协作方式课程总结理论基础开发过程系统学习软件工程的基本概念、原理和方法论掌握从需求到维护的完整软件生命周期管理职业素养技术工具树立正确的职业道德观和质量意识熟练使用UML、Git、测试框架等现代开发工具团队协作实践能力体验真实的团队开发,提升沟通和协作能力通过项目实践培养分析、设计、编码、测试能力软件工程的系统性与实践性软件工程是一门系统性的学科,涵盖技术、管理、人员等多个维度它不仅是编程技能,更是工程思维和系统方法软件工程强调规范化、标准化,但也需要创造性和灵活性理论学习是基础,实践应用是关键只有在真实项目中不断实践、反思、改进,才能真正掌握软件工程的精髓持续学习与技术更新软件技术日新月异,编程语言、框架、工具层出不穷作为软件工程师,必须保持持续学习的态度关注行业动态,学习新技术,但不盲目追逐热点打好基础,培养学习能力,具备学习如何学习的元认知能力参与开源社区,阅读优秀代码,与同行交流,建立个人知识体系记住技术会过时,但学习能力和工程思维永不过时激励与展望软件工程助力数字中国建设中国正处于数字化转型的关键时期,十四五规划明确提出加快数字中国建设从工业互联网到智慧城市,从人工智能到量子计算,软件工程师肩负着重要使命万万800045%500数字经济从业人员数字经济占比年度软件人才缺口GDP中国数字经济规模持续扩大,创造大量就业机会数字经济成为经济增长的重要引擎软件工程师需求持续旺盛,职业前景广阔未来软件工程师的无限可能技术创新引领者创业者与创新者参与前沿技术研发,推动技术创新从5G到6G,从AI到量子计算,软件工程师是技术变革的主力军凭借技术能力和创新思维,创立科技公司,实现创业梦想中国互联网巨头的创始人很多都是优秀的软件工程师数字化转型推动者社会问题解决者帮助传统企业实现数字化转型,用技术赋能各行各业制造、医疗、教育、金融,处处需要软件工程师的智慧运用技术解决社会问题,让世界变得更美好环保监测、教育公平、医疗健康,技术能够造福人类软件正在吞噬世界——Marc Andreessen每个公司都将成为软件公司——Satya Nadella作为软件工程师,你们是这个时代最幸运的人技术赋予你们改变世界的能力,也赋予你们无限的职业发展空间保持好奇心,勇于创新,敢于挑战,用代码书写你们的精彩人生!谢谢聆听!欢迎提问与交流感谢大家的认真学习和积极参与软件工程的学习是一个持续的过程,课堂只是起点,实践才是真正的老师希望本课程能为你们打开软件工程的大门,激发你们对这个领域的兴趣和热情联系方式后续安排邮箱contact@example.com•课后作业将于本周五发布•项目实践分组名单下周公布微信SoftwareEng2024•答疑时间每周三下午2-4点课程网站www.example.com/course•期末考试时间待定,提前两周通知学习资料课程资料已上传至教学平台祝大家在软件工程的道路上不断进步,成就卓越!✨。
个人认证
优秀文档
获得点赞 0