Skip to content

软件工程概览 ​

1. 什么是软件工程 ​

将系统化、规范化、可量化的方法应用于软件开发、运行和维护。核心目标:按时、按质、按预算交付有价值的软件。

维度编程软件工程
范围写代码需求→设计→编码→测试→部署→维护
关注点功能实现质量、可维护性、团队协作
时间尺度小时/天月/年
产出程序产品

2. 核心目标 ​

目标说明
正确性满足需求规格
可靠性在规定条件下完成功能
可维护性易于修改和扩展
可复用性组件可在不同项目复用
效率合理使用资源

3. 软件开发生命周期 ​

txt
需求分析 → 设计 → 编码 → 测试 → 部署 → 维护

4. 开发模型与交付方式 ​

四者分属不同层次,工程实践中常组合使用而非互斥。迭代强调重复开发周期逐步完善,增量交付强调分批交付可用功能,二者常结合。

概念所属层次特点与适用场景
瀑布过程模型线性顺序,需求明确
迭代过程模型重复开发周期,逐步完善方案
敏捷价值观与工作方式快速响应变化,强调个体与协作
DevOps交付与运维实践开发运维一体化,持续交付

5. 核心价值观 ​

  • 人 over 流程
  • 可工作软件 over 详尽文档
  • 客户协作 over 合同谈判
  • 响应变化 over 遵循计划

6. 质量属性 ​

属性度量方式实践手段
可用性SLA(如 99.99%)冗余、故障转移、健康检查
性能响应时间、吞吐量缓存、异步、索引优化
安全性漏洞数量与严重程度输入校验、加密、最小权限;渗透测试作为验证手段
可测试性测试覆盖率(辅助)依赖注入、接口抽象、测试隔离
可扩展性水平扩展能力无状态设计、分片

7. 工程师成长路径 ​

阶段关注点能力要求
初级写好代码语言基础、设计模式、单元测试
中级设计系统架构设计、性能优化、技术选型
高级技术决策技术战略、团队建设、业务理解
专家行业影响技术布道、标准制定、创新突破

上表是能力关注点的概括,并非线性晋升路径。实际成长中技术深度、业务影响与管理职责常不同步。

8. 实践建议 ​

java
/**
 * 软件工程的核心不是写代码,而是管理复杂度。
 * 
 * 实践建议:
 * 1. 持续学习:每周至少花 3-5 小时学习新技术
 * 2. 写作输出:通过博客、文档沉淀知识
 * 3. Code Review:参与开源项目或团队互审
 * 4. 刻意练习:在 LeetCode/HackerRank 上练习算法
 * 5. 构建作品集:维护个人 GitHub 项目
 *
 * 说明:以下为示意片段,重点展示命名、职责与注释,
 * Order 等类型为占位符,不代表可独立编译的完整工程。
 */
public class EngineeringPractice {
    
    /**
     * 代码是写给人看的,顺便能被机器执行。
     * 好的代码应该像好的散文:清晰、简洁、有表达力。
     */
    public void writeCleanCode() {
        // 1. 有意义的命名
        int elapsedDays = calculateDaysSinceCreation();
        
        // 2. 小方法,单一职责
        Order order = validateAndCreateOrder(request);
        
        // 3. 适当的注释(解释 Why,而非 What)
        // 表达明确时间点时用 Instant,不依赖默认时区
        Instant createdAt = Instant.now();
    }
    
    private int calculateDaysSinceCreation() {
        // 计算自创建以来经过的完整 24 小时数
        return (int) Duration.between(
            Instant.parse("2024-01-01T00:00:00Z"),
            Instant.now()
        ).toDays();
    }
    
    private Order validateAndCreateOrder(Object request) {
        return new Order();
    }
}

Released under the MIT License.