什么是软件?
程序、数据、文档
软件的分类?
按功能划分:系统软件、支撑软件、应用软件
软件的特点?
抽象、复杂、系统
软件危机
软件在研发、运行、管理过程中出现的一系列严重问题的现象。
是由于需求不清晰、项目开发没有明确规划和管理、程序设计和编码缺乏规范化和系统化、缺乏合适的工具支持
软件工程基本概念
工程、技术、管理
目的:高效,高质量,低成本开发软件产品
软件生命周期
从软件开始研发到停止使用,内容包括:问题的定义,可行性分析,需求分析,总体设计,详细设计,编码,测试,运行,维护
软件开发环境
在基本硬件和宿主软件的基础上,为支持系统软件和应用软件工程化开发和维护而使用的一组软件。
软件质量保证
软件质量保证是建立一套有计划,有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。
过程模型
瀑布模型:瀑布模型是一种线性的,顺序的模型方法,每一个阶段任务依赖上层的任务质量和文档。
优点:结构清晰,容易理解控制
缺点:周期长,不灵活,难变更。
原型模型:在任务开始之前,首先快速构建一个原型,以此与客户沟通,便于充分理解需求,适用于需求不清晰和有较多变化的项目。
优点:效率高,风险低,直观,可以得到客户反馈提高满意度。
缺点:原型的构建往往是高速的产物,意味着可能并不是最佳技术方案,很多细节上也没有过多顾及,后期难维护。
增量模型:增量模型是将系统模块化,通过分析设计编码测试这些系统组件,逐步实现系统的完整性。
优点:灵活,低风险,进度可控,用户满意,人员配置灵活。
缺点:系统的整体性较差,要具备科学的,规范的开发管理方法,严格的测试和管理,以及小组成员间的充分交流沟通,使各模块正确衔接。
迭代模型:迭代模型是一种逐步演绎,循序渐进的过程。首先完成程序的最基本功能,满足客户需求,其后再经过不断迭代,完善出整个产品。
优点:进度可控,需求明确,用户满意。
缺点:需要系统的规划和管理,并且与客户要做高频度的沟通。
螺旋模型:它基于螺旋的概念,螺旋的每一圈都代表一个完整的软件开发周期,每一轮都要作出分析并形成大量文档,可以很好地应对需求变化。
优点:灵活,可变更,适合大型复杂项目以及不确定性大的项目。
缺点:需要大量的风险评估和文档分析,成本高,周期长。如果有未经发现的潜在风险,将造成巨大损失。
敏捷开发:敏捷开发是一种快速高效构建软件的方法,能应对需求变更,旨在以最短时间创造最高价值软件。通过冲刺以及设置一系列里程碑,高效迭代,提高效率。
优点:构件形式,灵活可变更。进度可控,客户满意度高。时间短,效率高。
缺点:适用中小型项目,成本高,缺乏文档,难以维护。人员多沟通效率极低。
DevOps:DevOps方法灵感基于敏捷开发,他进一步强调了团队合作的重要性,并鼓励跨团队交流,比如开发和运营之间。除此之外,他强调端到端的思想,也就是软件开发生命周期的自动化,尽量减少手动操作以引入错误。其次就是将重复任务和高频度任务的自动化,降低成本提升效率,提供了一系列软件开发支持工具,比如版本控制,配置管理,容器化技术等。他也强调以客户为中心,通过不断地反馈来优化开发流程。
优点:交付速度快,效率高,风险低。
缺点:对团队的全能性有要求,要同时懂开发,运营,测试的知识。其次就是涉及到的工具和技术的决策有学习成本。