软件:程序、数据、文档 软件工程:指导计算机软件开发的学科 软件的特征:抽象性、无明显制造过程、可能被废弃,不会用坏、受到计算机系统的限制、复杂、昂贵、社会问题 软件危机的表现:成本和进度估计不准、不满意、质量不可靠、不可维护、成本高 软件危机产生的原因:P3,太多 解决途径:既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。 七条基本原理(要背):用分阶段的生命周期计划严格管理、坚持进行阶段评审、实行严格的产品控制、采用现代的程序设计技术、结果应能清楚地审查、开发小组的人员应该少而精、承认不断改进软件工程实践的必要性 发展阶段:传统软件工程、面向对象的软件工程、软件过程工程、第四代软件工程 (传统?)生命周期方法学:软件定义、需求分析、软件设计、编码、测试、运行与维护 瀑布模型: 三个阶段:计划阶段、开发阶段、运行阶段 八个子阶段:问题定义、可行性研究、需求分析、总体设计、详细设计、编码、测试、维护 具有顺序性和依赖性;推迟实现的观点、质量保证的观点 优点:强调开发的阶段性、早期计划及需求审查、产品测试 缺点:过于依赖早期进行的唯一一次需求调查,不能适应需求的变化;单一流程,开发中的经验教训不能反馈应用于本产品的过程 原型模型:需求不确定 可行性研究(优先前三个):技术、经济、操作、实践、组织与管理、社会政策允许 目的和实质:用最小的代价在尽可能短的时间内确定问题是否能够解决,是否有必要解决 成本效益分析:稍微知道一下 需求: //登陆属于系统需求 需求分析的任务:功能、性能、可靠性和可用性、出错处理、接口、约束、逆向、将来可能提出的需求 综合要求、过程:略 数据流图五条原则(一字不差背):第一层DFD应当是基本系统模型、注意父图和子图的平衡,维护信息的连续性、区分局部文件和局部外部项、掌握分解的速度,上快下慢、遵守加工编号原则 验证软件需求(四个词要背,其他的理解):一致性、完整性、现实性、有效性 信息隐蔽,模块独立性,最好背下来;内聚和耦合 //sc图可以按层次分别映射 结构化程序设计:变换形、事物形 编码的目的:使用选定的程序设计语言,把模块的过程描述翻译为用该语言书写的源代码;编码是设计的自然结果,程序的质量主要取决于设计的质量 测试:单元、综合、确认、系统、验收 等价分类法(录入、查询,数据准备),逻辑覆盖法(黑盒白盒) 软件维护 目的:满足用户对已开发产品的性能与软件环境不断提高的需求,进而延长软件的寿命 分类和比例(一定要记住):完善性维护(50%)、适应性维护(25%)、纠错性维护(21%)、其他维护(4%) 可维护性:可理解性、可测试性、可修改性、可移植性、可重用性 --- (这一部分是我自己写的答案) 1. 软件与社会 我记得好像听过一句话,大概是“好的设计就是让人感觉不到它的存在”。现在电子产品已经是人类社会不可缺少的一部分了,而与人直接交互的就是软件。 2. 软件与健康 软件在医疗领域的作用应该还是正在渐渐增加的。以前看病要带病历本,现在带一张卡就行了,资料都储存在电脑里,也不会丢。而软件开发人员应当注意自己的健康。 3. 软件与安全 软件在各个领域都占有一席之地,对重要数据的保护就显得更加重要。在软件中需要使用合适的加密的算法来保证数据安全。而未被发现的软件漏洞有可能会对安全造成很严重的影响。 4. 软件与法律 软件的特性之一就是边际成本低。我国的著作权法是保护软件的版权的,不过因为许多原因,我国的正版率还不够高。不过在游戏领域,已经开始有所好转了。 5. 软件与文化 GitHub是世界上最大的开源社区,其他知名的程序员网站还有StackOverflow。它们都形成了独特的文化。比如开源精神。 --- 工程实践对环境、社会可持续发展的影响 工程师在工程实践中不仅要注意软件开发的效率和目标成果,还要关注环境保护,尽可能减少工程对自然环境的不利,树立正确的环境伦理观,明确自身的环境伦理责任,从而在今后的工程实践中能以节约资源与能源为准则,不再破坏生态环境,实现社会的可持续发展。